Split session_manager_dispatch into session_manager_dispatch and session_manager_expire

This commit is contained in:
luwenpeng
2023-12-22 18:18:21 +08:00
parent 6ed321caea
commit b353c9c824
3 changed files with 202 additions and 285 deletions

View File

@@ -17,14 +17,14 @@ struct session_manager
struct session_pool *sess_pool; struct session_pool *sess_pool;
struct session_table *sess_table; struct session_table *sess_table;
struct session_timer *sess_timer; struct session_timer *sess_timer;
struct session_queue *sess_queue; // ready session queue struct session_queue *evicted_sess;
session_event_cb event_cb; session_event_cb event_cb;
void *arg; void *arg;
// timeout config // timeout config
uint64_t packet_timeout_ms; uint64_t timeout_to_closing;
uint64_t closing_timeout_ms; uint64_t timeout_to_closed;
// session number // session number
uint64_t tcp_opening_sess_num; uint64_t tcp_opening_sess_num;
@@ -185,15 +185,9 @@ static enum session_dir judge_direction_by_session(const struct session *sess, c
} }
/****************************************************************************** /******************************************************************************
* update session event and timer * update session timer
******************************************************************************/ ******************************************************************************/
void session_manager_trigger_session_event(struct session_manager *mgr, struct session *sess, uint32_t event)
{
session_push_event(sess, event);
session_queue_push(mgr->sess_queue, sess);
}
void session_manager_update_session_timer(struct session_manager *mgr, struct session *sess, session_expire_cb cb, uint64_t timeout_ms) void session_manager_update_session_timer(struct session_manager *mgr, struct session *sess, session_expire_cb cb, uint64_t timeout_ms)
{ {
session_timer_del_session(mgr->sess_timer, sess); session_timer_del_session(mgr->sess_timer, sess);
@@ -205,7 +199,7 @@ void session_manager_update_session_timer(struct session_manager *mgr, struct se
* expire callback * expire callback
******************************************************************************/ ******************************************************************************/
static void closing_expire_callback(struct session *sess, void *arg) static void session_to_closed(struct session *sess, void *arg)
{ {
SESSION_MANAGER_LOG_DEBUG("session %lu closing expire, free session", session_get_id(sess)); SESSION_MANAGER_LOG_DEBUG("session %lu closing expire, free session", session_get_id(sess));
struct session_manager *mgr = (struct session_manager *)arg; struct session_manager *mgr = (struct session_manager *)arg;
@@ -229,7 +223,7 @@ static void closing_expire_callback(struct session *sess, void *arg)
session_pool_free(mgr->sess_pool, sess); session_pool_free(mgr->sess_pool, sess);
} }
static void packet_expire_callback(struct session *sess, void *arg) static void session_to_closing(struct session *sess, void *arg)
{ {
SESSION_MANAGER_LOG_DEBUG("session %lu packet expire, trigger closing event", session_get_id(sess)); SESSION_MANAGER_LOG_DEBUG("session %lu packet expire, trigger closing event", session_get_id(sess));
struct session_manager *mgr = (struct session_manager *)arg; struct session_manager *mgr = (struct session_manager *)arg;
@@ -237,8 +231,8 @@ static void packet_expire_callback(struct session *sess, void *arg)
update_counter_on_closing(mgr, sess); update_counter_on_closing(mgr, sess);
session_set_state(sess, SESSION_STATE_CLOSING); session_set_state(sess, SESSION_STATE_CLOSING);
session_manager_trigger_session_event(mgr, sess, SESSION_EVENT_CLOSING); session_push_event(sess, SESSION_EVENT_CLOSING);
session_manager_update_session_timer(mgr, sess, closing_expire_callback, mgr->closing_timeout_ms); session_manager_update_session_timer(mgr, sess, session_to_closed, mgr->timeout_to_closed);
} }
/****************************************************************************** /******************************************************************************
@@ -426,8 +420,9 @@ static int handle_tcp_new_session(struct session_manager *mgr, struct tuple6 *ke
session_set_create_time(sess, timestamp_get_msec()); session_set_create_time(sess, timestamp_get_msec());
update_session_base(sess, pkt, curr_dir); update_session_base(sess, pkt, curr_dir);
session_manager_trigger_session_event(mgr, sess, SESSION_EVENT_OPENING); session_push_event(sess, SESSION_EVENT_OPENING);
session_manager_update_session_timer(mgr, sess, packet_expire_callback, mgr->packet_timeout_ms); session_push_event(sess, SESSION_EVENT_PACKET);
session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_to_closing);
return 0; return 0;
} }
@@ -457,9 +452,9 @@ static int handle_udp_new_session(struct session_manager *mgr, struct tuple6 *ke
session_set_create_time(sess, timestamp_get_msec()); session_set_create_time(sess, timestamp_get_msec());
update_session_base(sess, pkt, curr_dir); update_session_base(sess, pkt, curr_dir);
session_manager_trigger_session_event(mgr, sess, SESSION_EVENT_OPENING); session_push_event(sess, SESSION_EVENT_OPENING);
session_manager_trigger_session_event(mgr, sess, SESSION_EVENT_PACKET); session_push_event(sess, SESSION_EVENT_PACKET);
session_manager_update_session_timer(mgr, sess, packet_expire_callback, mgr->packet_timeout_ms); session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_to_closing);
return 0; return 0;
} }
@@ -475,8 +470,9 @@ static void handle_tcp_old_session(struct session_manager *mgr, struct tuple6 *k
{ {
update_counter_on_closing(mgr, sess); update_counter_on_closing(mgr, sess);
session_set_state(sess, SESSION_STATE_CLOSING); session_set_state(sess, SESSION_STATE_CLOSING);
session_manager_trigger_session_event(mgr, sess, SESSION_EVENT_CLOSING); session_push_event(sess, SESSION_EVENT_PACKET);
session_manager_update_session_timer(mgr, sess, closing_expire_callback, mgr->closing_timeout_ms); session_push_event(sess, SESSION_EVENT_CLOSING);
session_manager_update_session_timer(mgr, sess, session_to_closed, mgr->timeout_to_closed);
return; return;
} }
@@ -484,8 +480,8 @@ static void handle_tcp_old_session(struct session_manager *mgr, struct tuple6 *k
{ {
update_counter_on_active(mgr, sess); update_counter_on_active(mgr, sess);
session_set_state(sess, SESSION_STATE_ACTIVE); session_set_state(sess, SESSION_STATE_ACTIVE);
session_manager_trigger_session_event(mgr, sess, SESSION_EVENT_PACKET); session_push_event(sess, SESSION_EVENT_PACKET);
session_manager_update_session_timer(mgr, sess, packet_expire_callback, mgr->packet_timeout_ms); session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_to_closing);
return; return;
} }
} }
@@ -498,8 +494,8 @@ static void handle_udp_old_session(struct session_manager *mgr, struct tuple6 *k
update_counter_on_active(mgr, sess); update_counter_on_active(mgr, sess);
session_set_state(sess, SESSION_STATE_ACTIVE); session_set_state(sess, SESSION_STATE_ACTIVE);
session_manager_trigger_session_event(mgr, sess, SESSION_EVENT_PACKET); session_push_event(sess, SESSION_EVENT_PACKET);
session_manager_update_session_timer(mgr, sess, packet_expire_callback, mgr->packet_timeout_ms); session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_to_closing);
} }
// return 0: success // return 0: success
@@ -563,14 +559,14 @@ struct session_manager *session_manager_create(uint64_t max_session_num)
goto error; goto error;
} }
mgr->sess_queue = session_queue_create(); mgr->evicted_sess = session_queue_create();
if (mgr->sess_queue == NULL) if (mgr->evicted_sess == NULL)
{ {
goto error; goto error;
} }
mgr->closing_timeout_ms = 2 * 1000; mgr->timeout_to_closed = 2 * 1000;
mgr->packet_timeout_ms = 5 * 1000; mgr->timeout_to_closing = 5 * 1000;
mgr->tcp_opening_sess_num = 0; mgr->tcp_opening_sess_num = 0;
mgr->tcp_closing_sess_num = 0; mgr->tcp_closing_sess_num = 0;
@@ -598,7 +594,7 @@ void session_manager_destroy(struct session_manager *mgr)
{ {
if (mgr) if (mgr)
{ {
session_queue_destroy(mgr->sess_queue); session_queue_destroy(mgr->evicted_sess);
session_timer_destroy(mgr->sess_timer); session_timer_destroy(mgr->sess_timer);
session_table_destroy(mgr->sess_table); session_table_destroy(mgr->sess_table);
session_pool_destroy(mgr->sess_pool); session_pool_destroy(mgr->sess_pool);
@@ -613,20 +609,29 @@ void session_manager_set_session_eventcb(struct session_manager *mgr, session_ev
mgr->arg = arg; mgr->arg = arg;
} }
void session_manager_set_packet_timeout(struct session_manager *mgr, uint64_t timeout_ms) void session_manager_set_timeout_toclosing(struct session_manager *mgr, uint64_t timeout_ms)
{ {
mgr->packet_timeout_ms = timeout_ms; mgr->timeout_to_closing = timeout_ms;
} }
void session_manager_set_closing_timeout(struct session_manager *mgr, uint64_t timeout_ms) void session_manager_set_timeout_toclosed(struct session_manager *mgr, uint64_t timeout_ms)
{ {
mgr->closing_timeout_ms = timeout_ms; mgr->timeout_to_closed = timeout_ms;
} }
// return NULL: discard struct session *session_manager_lookup(struct session_manager *mgr, const struct packet *pkt)
// * tuple6 not find {
// * tcp first packet not syn struct tuple6 key;
struct session *session_manager_find_session(struct session_manager *mgr, const struct packet *pkt) if (packet_get_innermost_tuple6(pkt, &key) == -1)
{
return NULL;
}
return session_table_find_session(mgr->sess_table, &key);
}
// return null: Invalid tuple6 or tcp first packet is not syn
struct session *session_manager_update(struct session_manager *mgr, const struct packet *pkt)
{ {
struct tuple6 key; struct tuple6 key;
if (packet_get_innermost_tuple6(pkt, &key) == -1) if (packet_get_innermost_tuple6(pkt, &key) == -1)
@@ -644,8 +649,9 @@ struct session *session_manager_find_session(struct session_manager *mgr, const
update_counter_on_closing(mgr, unused_sess); update_counter_on_closing(mgr, unused_sess);
session_set_state(unused_sess, SESSION_STATE_CLOSING); session_set_state(unused_sess, SESSION_STATE_CLOSING);
session_manager_trigger_session_event(mgr, unused_sess, SESSION_EVENT_CLOSING); session_push_event(unused_sess, SESSION_EVENT_CLOSING);
session_manager_update_session_timer(mgr, unused_sess, closing_expire_callback, mgr->closing_timeout_ms); session_queue_push(mgr->evicted_sess, unused_sess);
session_manager_update_session_timer(mgr, unused_sess, session_to_closed, mgr->timeout_to_closed);
} }
sess = session_pool_alloc(mgr->sess_pool); sess = session_pool_alloc(mgr->sess_pool);
@@ -671,54 +677,53 @@ struct session *session_manager_find_session(struct session_manager *mgr, const
return sess; return sess;
} }
void session_manager_dispatch(struct session_manager *mgr) struct session *session_manager_expire(struct session_manager *mgr)
{ {
uint32_t event;
struct session *sess;
void *cb_arg = mgr->arg;
session_event_cb event_cb = mgr->event_cb;
SESSION_MANAGER_LOG_DEBUG("current timestamp: %lu s", timestamp_get_sec()); SESSION_MANAGER_LOG_DEBUG("current timestamp: %lu s", timestamp_get_sec());
struct session *sess = session_timer_expire_session(mgr->sess_timer, timestamp_get_msec());
// limit expire session number if (sess == NULL)
for (int i = 0; i < 100; i++)
{ {
sess = session_timer_expire_session(mgr->sess_timer, timestamp_get_msec()); return NULL;
if (sess == NULL)
{
break;
}
session_run_expirecb(sess);
} }
while (1) session_run_expirecb(sess);
if (session_get_state(sess) == SESSION_STATE_CLOSED)
{ {
// get session from ready queue return NULL;
sess = session_queue_pop(mgr->sess_queue); }
if (sess == NULL)
{
break;
}
while (1) return sess;
{ }
// get event from session
if (session_pop_event(sess, &event) == false)
{
break;
}
SESSION_MANAGER_LOG_DEBUG("handle \"%s\" event on session %lu", session_event_tostring((enum session_event)event), session_get_id(sess)); static void session_dispatch(struct session_manager *mgr, struct session *sess)
if (event_cb) {
{ if (sess == NULL)
event_cb(sess, event, cb_arg); {
} return;
}
uint32_t event;
while (session_pop_event(sess, &event))
{
SESSION_MANAGER_LOG_DEBUG("handle \"%s\" event on session %lu", session_event_tostring((enum session_event)event), session_get_id(sess));
if (mgr->event_cb)
{
mgr->event_cb(sess, event, mgr->arg);
} }
session_set0_cur_pkt(sess, NULL); }
session_set_cur_dir(sess, SESSION_DIR_NONE); session_set0_cur_pkt(sess, NULL);
}; session_set_cur_dir(sess, SESSION_DIR_NONE);
}
void session_manager_dispatch(struct session_manager *mgr, struct session *sess)
{
// Handle sessions that are ready to be processed
session_dispatch(mgr, sess);
// Handle sessions that are evicted because the flow table is full
struct session *evicted_sess = session_queue_pop(mgr->evicted_sess);
session_dispatch(mgr, evicted_sess);
} }
uint64_t session_manager_get_tcp_opening_sess_num(struct session_manager *mgr) uint64_t session_manager_get_tcp_opening_sess_num(struct session_manager *mgr)

View File

@@ -27,12 +27,15 @@ void session_manager_destroy(struct session_manager *mgr);
// config // config
typedef void (*session_event_cb)(struct session *sess, uint32_t event, void *arg); typedef void (*session_event_cb)(struct session *sess, uint32_t event, void *arg);
void session_manager_set_session_eventcb(struct session_manager *mgr, session_event_cb cb, void *arg); void session_manager_set_session_eventcb(struct session_manager *mgr, session_event_cb cb, void *arg);
void session_manager_set_packet_timeout(struct session_manager *mgr, uint64_t timeout_ms); void session_manager_set_timeout_toclosing(struct session_manager *mgr, uint64_t timeout_ms);
void session_manager_set_closing_timeout(struct session_manager *mgr, uint64_t timeout_ms); void session_manager_set_timeout_toclosed(struct session_manager *mgr, uint64_t timeout_ms);
// core functions // core functions
struct session *session_manager_find_session(struct session_manager *mgr, const struct packet *pkt); struct session *session_manager_lookup(struct session_manager *mgr, const struct packet *pkt);
void session_manager_dispatch(struct session_manager *mgr); // return null: Invalid tuple6 or tcp first packet is not syn
struct session *session_manager_update(struct session_manager *mgr, const struct packet *pkt);
struct session *session_manager_expire(struct session_manager *mgr);
void session_manager_dispatch(struct session_manager *mgr, struct session *sess);
// for debug // for debug
uint64_t session_manager_get_tcp_opening_sess_num(struct session_manager *mgr); uint64_t session_manager_get_tcp_opening_sess_num(struct session_manager *mgr);

View File

@@ -67,11 +67,11 @@ TEST(SESSION_MANAGER, INIT_TO_OPENING_BY_SYN)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -101,10 +101,11 @@ TEST(SESSION_MANAGER, INIT_TO_OPENING_BY_SYN)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
session_manager_dispatch(mgr, sess);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
@@ -142,11 +143,11 @@ TEST(SESSION_MANAGER, INIT_TO_OPENING_BY_SYNACK)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -176,10 +177,11 @@ TEST(SESSION_MANAGER, INIT_TO_OPENING_BY_SYNACK)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
session_manager_dispatch(mgr, sess);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
@@ -221,11 +223,11 @@ TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_C2S)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
packet_parse(&pkt, (const char *)udp_pkt1_dns_req, sizeof(udp_pkt1_dns_req)); packet_parse(&pkt, (const char *)udp_pkt1_dns_req, sizeof(udp_pkt1_dns_req));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -255,10 +257,11 @@ TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_C2S)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 1); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 1);
session_manager_dispatch(mgr, sess);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
@@ -296,11 +299,11 @@ TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_S2C)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
packet_parse(&pkt, (const char *)udp_pkt2_dns_resp, sizeof(udp_pkt2_dns_resp)); packet_parse(&pkt, (const char *)udp_pkt2_dns_resp, sizeof(udp_pkt2_dns_resp));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -330,10 +333,11 @@ TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_S2C)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 1); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 1);
session_manager_dispatch(mgr, sess);
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
@@ -378,15 +382,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_C2S_PAYLOAD)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
/************************************************************************** /**************************************************************************
* syn packet * syn packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -416,20 +420,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_C2S_PAYLOAD)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer SYN Packet <=== \n\n"); printf("\n===> Atfer SYN Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* c2s payload packet * c2s payload packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req)); packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -446,7 +445,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_C2S_PAYLOAD)
EXPECT_TRUE(session_get_s2c_packets(sess) == 0); EXPECT_TRUE(session_get_s2c_packets(sess) == 0);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_C2S_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_C2S_PAYLOAD_RECVED));
@@ -459,9 +458,8 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_C2S_PAYLOAD)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer C2S Payload Packet <=== \n\n"); printf("\n===> Atfer C2S Payload Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
/************************************************************************** /**************************************************************************
* timeout * timeout
@@ -471,7 +469,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_C2S_PAYLOAD)
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
@@ -512,15 +510,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_S2C_PAYLOAD)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
/************************************************************************** /**************************************************************************
* syn packet * syn packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -550,20 +548,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_S2C_PAYLOAD)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer SYN Packet <=== \n\n"); printf("\n===> Atfer SYN Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* s2c payload packet * s2c payload packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1)); packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -580,7 +573,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_S2C_PAYLOAD)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_S2C_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_S2C_PAYLOAD_RECVED));
@@ -593,9 +586,8 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_S2C_PAYLOAD)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer C2S Payload Packet <=== \n\n"); printf("\n===> Atfer C2S Payload Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
/************************************************************************** /**************************************************************************
* timeout * timeout
@@ -605,10 +597,9 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_S2C_PAYLOAD)
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
// check sess mgr // check sess mgr
EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0);
@@ -645,15 +636,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_C2S_PAYLOAD)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
/************************************************************************** /**************************************************************************
* synack packet * synack packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -683,20 +674,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_C2S_PAYLOAD)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer SYNACK Packet <=== \n\n"); printf("\n===> Atfer SYNACK Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* c2s payload packet * c2s payload packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req)); packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -713,7 +699,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_C2S_PAYLOAD)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED));
@@ -726,9 +712,8 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_C2S_PAYLOAD)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer C2S Payload Packet <=== \n\n"); printf("\n===> Atfer C2S Payload Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
/************************************************************************** /**************************************************************************
* timeout * timeout
@@ -738,7 +723,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_C2S_PAYLOAD)
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
@@ -778,15 +763,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_S2C_PAYLOAD)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
/************************************************************************** /**************************************************************************
* synack packet * synack packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -816,20 +801,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_S2C_PAYLOAD)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer SYNACK Packet <=== \n\n"); printf("\n===> Atfer SYNACK Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* s2c payload packet * s2c payload packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1)); packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -846,7 +826,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_S2C_PAYLOAD)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYNACK_RECVED | TCP_S2C_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYNACK_RECVED | TCP_S2C_PAYLOAD_RECVED));
@@ -859,9 +839,8 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_S2C_PAYLOAD)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer S2C Payload Packet <=== \n\n"); printf("\n===> Atfer S2C Payload Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
/************************************************************************** /**************************************************************************
* timeout * timeout
@@ -871,7 +850,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_S2C_PAYLOAD)
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
@@ -916,15 +895,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
/************************************************************************** /**************************************************************************
* syn packet * syn packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -954,20 +933,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer SYN Packet <=== \n\n"); printf("\n===> Atfer SYN Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* synack packet * synack packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -984,7 +958,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA
EXPECT_TRUE(session_get_s2c_packets(sess) == 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED));
@@ -997,20 +971,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer SYNACK Packet <=== \n\n"); printf("\n===> Atfer SYNACK Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* ack packet * ack packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt3_c2s_ack, sizeof(tcp_pkt3_c2s_ack)); packet_parse(&pkt, (const char *)tcp_pkt3_c2s_ack, sizeof(tcp_pkt3_c2s_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1027,7 +996,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA
EXPECT_TRUE(session_get_s2c_packets(sess) == 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED));
@@ -1040,20 +1009,15 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer ACK Packet <=== \n\n"); printf("\n===> Atfer ACK Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* c2s payload packet * c2s payload packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req)); packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1070,7 +1034,7 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA
EXPECT_TRUE(session_get_s2c_packets(sess) == 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED));
@@ -1083,9 +1047,8 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer C2S TCP Payload Packet <=== \n\n"); printf("\n===> Atfer C2S TCP Payload Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
/************************************************************************** /**************************************************************************
* timeout * timeout
@@ -1095,10 +1058,9 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
// check sess mgr // check sess mgr
EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0);
@@ -1236,15 +1198,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
/************************************************************************** /**************************************************************************
* syn packet * syn packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn)); packet_parse(&pkt, (const char *)tcp_pkt1_c2s_syn, sizeof(tcp_pkt1_c2s_syn));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1274,20 +1236,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer SYN Packet <=== \n\n"); printf("\n===> Atfer SYN Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* synack packet * synack packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack)); packet_parse(&pkt, (const char *)tcp_pkt2_s2c_syn_ack, sizeof(tcp_pkt2_s2c_syn_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1304,7 +1261,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED));
@@ -1317,20 +1274,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer SYNACK Packet <=== \n\n"); printf("\n===> Atfer SYNACK Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* ack packet * ack packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt3_c2s_ack, sizeof(tcp_pkt3_c2s_ack)); packet_parse(&pkt, (const char *)tcp_pkt3_c2s_ack, sizeof(tcp_pkt3_c2s_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1347,7 +1299,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED));
@@ -1360,20 +1312,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer ACK Packet <=== \n\n"); printf("\n===> Atfer ACK Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* c2s http req packet * c2s http req packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req)); packet_parse(&pkt, (const char *)tcp_pkt4_c2s_http_req, sizeof(tcp_pkt4_c2s_http_req));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1390,7 +1337,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED));
@@ -1403,20 +1350,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer C2S HTTP Req Packet <=== \n\n"); printf("\n===> Atfer C2S HTTP Req Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* s2c ack packet * s2c ack packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt5_s2c_ack, sizeof(tcp_pkt5_s2c_ack)); packet_parse(&pkt, (const char *)tcp_pkt5_s2c_ack, sizeof(tcp_pkt5_s2c_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1433,7 +1375,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED));
@@ -1446,20 +1388,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer S2C Ack Packet <=== \n\n"); printf("\n===> Atfer S2C Ack Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* s2c http resp packet1 * s2c http resp packet1
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1)); packet_parse(&pkt, (const char *)tcp_pkt6_s2c_http_resq_1, sizeof(tcp_pkt6_s2c_http_resq_1));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1476,7 +1413,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED));
@@ -1489,20 +1426,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer S2C HTTP Resp Packet1 <=== \n\n"); printf("\n===> Atfer S2C HTTP Resp Packet1 <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* s2c http resp packet2 * s2c http resp packet2
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt7_s2c_http_resp_2, sizeof(tcp_pkt7_s2c_http_resp_2)); packet_parse(&pkt, (const char *)tcp_pkt7_s2c_http_resp_2, sizeof(tcp_pkt7_s2c_http_resp_2));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1519,7 +1451,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED));
@@ -1532,20 +1464,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer S2C HTTP Resp Packet2 <=== \n\n"); printf("\n===> Atfer S2C HTTP Resp Packet2 <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* c2s ack packet * c2s ack packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt8_c2s_ack, sizeof(tcp_pkt8_c2s_ack)); packet_parse(&pkt, (const char *)tcp_pkt8_c2s_ack, sizeof(tcp_pkt8_c2s_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1562,7 +1489,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED));
@@ -1575,20 +1502,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer C2S Ack Packet2 <=== \n\n"); printf("\n===> Atfer C2S Ack Packet2 <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* c2s fin packet * c2s fin packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt9_c2s_fin, sizeof(tcp_pkt9_c2s_fin)); packet_parse(&pkt, (const char *)tcp_pkt9_c2s_fin, sizeof(tcp_pkt9_c2s_fin));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1605,7 +1527,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_C2S);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED | TCP_C2S_FIN_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED | TCP_C2S_FIN_RECVED));
@@ -1618,20 +1540,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer C2S FIN Packet <=== \n\n"); printf("\n===> Atfer C2S FIN Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* s2c fin packet * s2c fin packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt10_s2c_fin, sizeof(tcp_pkt10_s2c_fin)); packet_parse(&pkt, (const char *)tcp_pkt10_s2c_fin, sizeof(tcp_pkt10_s2c_fin));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1648,7 +1565,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1 + 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1 + 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED | TCP_C2S_FIN_RECVED | TCP_S2C_FIN_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED | TCP_C2S_FIN_RECVED | TCP_S2C_FIN_RECVED));
@@ -1661,20 +1578,15 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
timestamp_update();
printf("\n===> Atfer C2S FIN Packet <=== \n\n"); printf("\n===> Atfer C2S FIN Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* c2s ack packet * c2s ack packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)tcp_pkt11_c2s_ack, sizeof(tcp_pkt11_c2s_ack)); packet_parse(&pkt, (const char *)tcp_pkt11_c2s_ack, sizeof(tcp_pkt11_c2s_ack));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1691,7 +1603,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1 + 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1 + 1 + 1 + 1 + 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == NULL); EXPECT_TRUE(session_get0_cur_pkt(sess) == NULL);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_NONE); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_NONE);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED | TCP_C2S_FIN_RECVED | TCP_S2C_FIN_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED | TCP_S2C_PAYLOAD_RECVED | TCP_C2S_FIN_RECVED | TCP_S2C_FIN_RECVED));
@@ -1704,6 +1616,9 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 0);
printf("\n===> Atfer C2S ACK Packet <=== \n\n");
session_manager_dispatch(mgr, sess);
/************************************************************************** /**************************************************************************
* timeout * timeout
**************************************************************************/ **************************************************************************/
@@ -1712,7 +1627,7 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM)
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }
@@ -1752,15 +1667,15 @@ TEST(SESSION_MANAGER, UDP_FULL_STREAM)
mgr = session_manager_create(max_session_num); mgr = session_manager_create(max_session_num);
EXPECT_TRUE(mgr != NULL); EXPECT_TRUE(mgr != NULL);
session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx); session_manager_set_session_eventcb(mgr, plugin_dispatch, (void *)plugin_ctx);
session_manager_set_packet_timeout(mgr, 1000); session_manager_set_timeout_toclosing(mgr, 1000);
session_manager_set_closing_timeout(mgr, 2000); session_manager_set_timeout_toclosed(mgr, 2000);
/************************************************************************** /**************************************************************************
* UDP c2s packet * UDP c2s packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)udp_pkt1_dns_req, sizeof(udp_pkt1_dns_req)); packet_parse(&pkt, (const char *)udp_pkt1_dns_req, sizeof(udp_pkt1_dns_req));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1790,20 +1705,15 @@ TEST(SESSION_MANAGER, UDP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 1); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 1);
timestamp_update();
printf("\n===> Atfer UDP c2s Packet <=== \n\n"); printf("\n===> Atfer UDP c2s Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
// update timestamp
usleep(1000);
timestamp_update();
/************************************************************************** /**************************************************************************
* UDP s2c packet * UDP s2c packet
**************************************************************************/ **************************************************************************/
packet_parse(&pkt, (const char *)udp_pkt2_dns_resp, sizeof(udp_pkt2_dns_resp)); packet_parse(&pkt, (const char *)udp_pkt2_dns_resp, sizeof(udp_pkt2_dns_resp));
sess = session_manager_find_session(mgr, &pkt); sess = session_manager_update(mgr, &pkt);
EXPECT_TRUE(sess); EXPECT_TRUE(sess);
// check session info // check session info
@@ -1820,7 +1730,7 @@ TEST(SESSION_MANAGER, UDP_FULL_STREAM)
EXPECT_TRUE(session_get_s2c_packets(sess) == 1); EXPECT_TRUE(session_get_s2c_packets(sess) == 1);
EXPECT_TRUE(session_get_create_time(sess) != 0); EXPECT_TRUE(session_get_create_time(sess) != 0);
EXPECT_TRUE(session_get_last_time(sess) != 0); EXPECT_TRUE(session_get_last_time(sess) != 0);
EXPECT_TRUE(session_get_create_time(sess) < session_get_last_time(sess)); EXPECT_TRUE(session_get_create_time(sess) == session_get_last_time(sess));
EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt); EXPECT_TRUE(session_get0_cur_pkt(sess) == &pkt);
EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C); EXPECT_TRUE(session_get_cur_dir(sess) == SESSION_DIR_S2C);
EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, udp_builtin_ex) == (UDP_C2S_RECVED | UDP_S2C_RECVED)); EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, udp_builtin_ex) == (UDP_C2S_RECVED | UDP_S2C_RECVED));
@@ -1833,9 +1743,8 @@ TEST(SESSION_MANAGER, UDP_FULL_STREAM)
EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0); EXPECT_TRUE(session_manager_get_udp_closing_sess_num(mgr) == 0);
EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 1); EXPECT_TRUE(session_manager_get_udp_active_sess_num(mgr) == 1);
timestamp_update();
printf("\n===> Atfer UDP c2s Packet <=== \n\n"); printf("\n===> Atfer UDP c2s Packet <=== \n\n");
session_manager_dispatch(mgr); session_manager_dispatch(mgr, sess);
/************************************************************************** /**************************************************************************
* timeout * timeout
@@ -1844,7 +1753,7 @@ TEST(SESSION_MANAGER, UDP_FULL_STREAM)
for (int i = 0; i < 4; i++) for (int i = 0; i < 4; i++)
{ {
timestamp_update(); timestamp_update();
session_manager_dispatch(mgr); session_manager_dispatch(mgr, session_manager_expire(mgr));
sleep(1); sleep(1);
} }