Refactor the session manager using session transformation 2D array & Update test case

This commit is contained in:
luwenpeng
2024-03-14 10:56:09 +08:00
parent 639614622b
commit ce00122557
47 changed files with 3403 additions and 3563 deletions

View File

@@ -158,28 +158,6 @@ uint64_t session_get_last_time(const struct session *sess)
return sess->last_time;
}
// session tcp state
void session_set_tcp_state(struct session *sess, enum tcp_state state)
{
sess->tcp_state = state;
}
enum tcp_state session_get_tcp_state(const struct session *sess)
{
return sess->tcp_state;
}
// session udp state
void session_set_udp_state(struct session *sess, enum udp_state state)
{
sess->udp_state = state;
}
enum udp_state session_get_udp_state(const struct session *sess)
{
return sess->udp_state;
}
// session user data
void session_set_user_data(struct session *sess, void *user_data)
{
@@ -197,11 +175,19 @@ void *session_get_user_data(const struct session *sess)
void session_set_c2s_1st_pkt(struct session *sess, const struct packet *pkt)
{
if (sess->c2s_1st_pkt)
{
return;
}
sess->c2s_1st_pkt = packet_dup(pkt);
}
void session_set_s2c_1st_pkt(struct session *sess, const struct packet *pkt)
{
if (sess->s2c_1st_pkt)
{
return;
}
sess->s2c_1st_pkt = packet_dup(pkt);
}
@@ -341,7 +327,7 @@ void session_free_ex_data(struct session *sess, uint8_t idx)
sess->ex_data[idx] = NULL;
}
void session_free(struct session *sess)
void session_clean(struct session *sess)
{
if (sess)
{
@@ -402,100 +388,22 @@ void session_run_expirecb(struct session *sess)
* session dump
******************************************************************************/
static void tcp_state_to_str(enum tcp_state state, char *buffer, size_t buffer_len)
{
if (state == 0)
{
return;
}
int nused = 0;
if (state & TCP_SYN_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_SYN_RECVED ");
}
if (state & TCP_SYNACK_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_SYNACK_RECVED ");
}
if (state & TCP_C2S_ACK_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_ACK_RECVED ");
}
if (state & TCP_S2C_ACK_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_ACK_RECVED ");
}
if (state & TCP_C2S_DATA_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_DATA_RECVED ");
}
if (state & TCP_S2C_DATA_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_DATA_RECVED ");
}
if (state & TCP_C2S_FIN_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_FIN_RECVED ");
}
if (state & TCP_S2C_FIN_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_FIN_RECVED ");
}
if (state & TCP_C2S_RST_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_C2S_RST_RECVED ");
}
if (state & TCP_S2C_RST_RECVED)
{
nused += snprintf(buffer + nused, buffer_len - nused, "TCP_S2C_RST_RECVED ");
}
}
static void udp_state_to_str(enum udp_state state, char *buffer, size_t buffer_len)
{
if (state == 0)
{
return;
}
int nused = 0;
if (state & UDP_C2S_RECVED)
{
snprintf(buffer + nused, buffer_len - nused, "UDP_C2S_RECVED ");
}
if (state & UDP_S2C_RECVED)
{
snprintf(buffer + nused, buffer_len - nused, "UDP_S2C_RECVED ");
}
}
const char *session_closing_reason_to_str(enum closing_reason reason)
{
switch (reason)
{
case CLOSING_BY_TIMEOUT:
return "CLOSING BY TIMEOUT";
return "closing by timeout";
case CLOSING_BY_EVICTED:
return "CLOSING BY EVICTED";
return "closing by evicted";
case CLOSING_BY_CLIENT_FIN:
return "CLOSING BY CLIENT FIN";
return "closing by client FIN";
case CLOSING_BY_CLIENT_RST:
return "CLOSING BY CLIENT RST";
return "closing by client RST";
case CLOSING_BY_SERVER_FIN:
return "CLOSING BY SERVER FIN";
return "closing by server FIN";
case CLOSING_BY_SERVER_RST:
return "CLOSING BY SERVER RST";
return "closing by server RST";
default:
return "unknown";
}
@@ -571,24 +479,12 @@ void session_dump(struct session *sess)
printf("session type : %s\n", session_type_to_str(session_get_type(sess)));
printf("session dup traffic flag : %s\n", dup_traffic_flag_to_str(session_get_dup_traffic_flag(sess)));
printf("session closing reason : %s\n", session_closing_reason_to_str(session_get_closing_reason(sess)));
printf("session c2s packets : %" PRIu64 "\n", session_get_c2s_packets(sess));
printf("session c2s bytes : %" PRIu64 "\n", session_get_c2s_bytes(sess));
printf("session s2c packets : %" PRIu64 "\n", session_get_s2c_packets(sess));
printf("session s2c bytes : %" PRIu64 "\n", session_get_s2c_bytes(sess));
printf("session C2S packets : %" PRIu64 "\n", session_get_c2s_packets(sess));
printf("session C2S bytes : %" PRIu64 "\n", session_get_c2s_bytes(sess));
printf("session S2C packets : %" PRIu64 "\n", session_get_s2c_packets(sess));
printf("session S2C bytes : %" PRIu64 "\n", session_get_s2c_bytes(sess));
printf("session create time : %" PRIu64 "\n", session_get_new_time(sess));
printf("session last time : %" PRIu64 "\n", session_get_last_time(sess));
if (session_get_type(sess) == SESSION_TYPE_TCP)
{
memset(buffer, 0, sizeof(buffer));
tcp_state_to_str(session_get_tcp_state(sess), buffer, sizeof(buffer));
printf("session tcp state : %s\n", buffer);
}
else if (session_get_type(sess) == SESSION_TYPE_UDP)
{
memset(buffer, 0, sizeof(buffer));
udp_state_to_str(session_get_udp_state(sess), buffer, sizeof(buffer));
printf("session udp state : %s\n", buffer);
}
printf("session current packet ptr : %p\n", (void *)session_get0_cur_pkt(sess));
printf("session current packet dir : %s\n", session_dir_to_str(session_get_cur_dir(sess)));
printf("session ex data: \n");