diff --git a/deps/dablooms/test/gtest_dablooms.cpp b/deps/dablooms/test/gtest_dablooms.cpp index 539d82d..69dcbde 100644 --- a/deps/dablooms/test/gtest_dablooms.cpp +++ b/deps/dablooms/test/gtest_dablooms.cpp @@ -39,7 +39,7 @@ struct packet_idetify idetify = { .ip_dst = 789000, }; -TEST(DABLOOMS, ADD_SEARCH) +TEST(DABLOOMS, TEST) { struct expiry_dablooms_handle *handle = expiry_dablooms_init(config.capacity, config.error_rate, time(NULL), config.expiry_time); EXPECT_TRUE(handle != nullptr); diff --git a/src/packet/packet_helpers.h b/src/packet/packet_helpers.h index 181ce25..2f52928 100644 --- a/src/packet/packet_helpers.h +++ b/src/packet/packet_helpers.h @@ -102,6 +102,7 @@ static inline struct packet *packet_dup(const struct packet *pkt) return NULL; } memcpy(pkt_dup, pkt, sizeof(struct packet)); + pkt_dup->user_data = NULL; if (pkt->data_len) { diff --git a/src/packet/test/gtest_ipv4_helpers.cpp b/src/packet/test/gtest_ipv4_helpers.cpp index 7bd918c..6d8b682 100644 --- a/src/packet/test/gtest_ipv4_helpers.cpp +++ b/src/packet/test/gtest_ipv4_helpers.cpp @@ -29,7 +29,7 @@ unsigned char data[] = {0x45, 0x00, 0x00, 0x2c, 0xff, 0xff, 0x20, 0x00, 0x7f, 0x06, 0x4d, 0x8b, 0xc0, 0xa8, 0x24, 0x67, 0xc0, 0xa8, 0x28, 0x89}; -TEST(IPV4_HELPERS, GET) +TEST(IPV4_HELPERS, TEST) { const struct ip *hdr = (struct ip *)data; EXPECT_TRUE(ipv4_hdr_get_version(hdr) == 4); diff --git a/src/packet/test/gtest_tcp_helpers.cpp b/src/packet/test/gtest_tcp_helpers.cpp index bd49a56..75a5aec 100644 --- a/src/packet/test/gtest_tcp_helpers.cpp +++ b/src/packet/test/gtest_tcp_helpers.cpp @@ -74,7 +74,7 @@ unsigned char data[] = { 0xd9, 0x03, 0x9f, 0x98, 0xec, 0x5f, 0xc6, 0x3c, 0x3b, 0x12, 0x47, 0x92, 0xa0, 0x12, 0xaa, 0xaa, 0xfe, 0x30, 0x00, 0x00, 0x02, 0x04, 0xff, 0xd7, 0x04, 0x02, 0x08, 0x0a, 0xa4, 0xef, 0xa3, 0xcc, 0xa4, 0xef, 0xa3, 0xcc, 0x01, 0x03, 0x03, 0x07}; -TEST(TCP_HELPERS, GET) +TEST(TCP_HELPERS, TEST) { const struct tcphdr *hdr = (struct tcphdr *)data; EXPECT_TRUE(tcp_hdr_get_sport(hdr) == 55555); diff --git a/src/packet/test/gtest_udp_helpers.cpp b/src/packet/test/gtest_udp_helpers.cpp index 3be02b0..c1b8144 100644 --- a/src/packet/test/gtest_udp_helpers.cpp +++ b/src/packet/test/gtest_udp_helpers.cpp @@ -14,7 +14,7 @@ unsigned char data[] = {0x0f, 0xa1, 0x1f, 0x40, 0x00, 0x9b, 0x1e, 0x1e}; -TEST(UDP_HELPERS, GET) +TEST(UDP_HELPERS, TEST) { const struct udphdr *hdr = (struct udphdr *)data; EXPECT_TRUE(udp_hdr_get_sport(hdr) == 4001); diff --git a/src/session/session.cpp b/src/session/session.cpp index ea3bf89..a5288d0 100644 --- a/src/session/session.cpp +++ b/src/session/session.cpp @@ -312,9 +312,9 @@ void session_free_ex_data(struct session *sess, uint8_t idx) } struct ex_schema *schema = &g_ex_manager.schemas[idx]; - printf("free ex_data, idx: %d, key: %s, val: %p\n", idx, schema->key, sess->ex_data[idx]); if (schema->free_cb != NULL && sess->ex_data[idx] != NULL) { + printf("free ex_data, idx: %d, key: %s, val: %p\n", idx, schema->key, sess->ex_data[idx]); schema->free_cb(sess, idx, sess->ex_data[idx], schema->args); } diff --git a/src/session/session_manager.cpp b/src/session/session_manager.cpp index 7ac2fac..0728138 100644 --- a/src/session/session_manager.cpp +++ b/src/session/session_manager.cpp @@ -23,8 +23,8 @@ struct session_manager void *arg; // timeout config - uint64_t timeout_to_closing; - uint64_t timeout_to_closed; + uint64_t timeout_toclosing; + uint64_t timeout_toclosed; // session number uint64_t tcp_opening_sess_num; @@ -201,7 +201,7 @@ void session_manager_update_session_timer(struct session_manager *mgr, struct se 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_LOG_DEBUG("session %lu closing expire, free session", session_get_id(sess)); struct session_manager *mgr = (struct session_manager *)arg; assert(mgr != NULL); @@ -225,14 +225,14 @@ static void session_to_closed(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_LOG_DEBUG("session %lu packet expire, trigger closing event", session_get_id(sess)); struct session_manager *mgr = (struct session_manager *)arg; assert(mgr != NULL); update_counter_on_closing(mgr, sess); session_set_state(sess, SESSION_STATE_CLOSING); session_push_event(sess, SESSION_EVENT_CLOSING); - session_manager_update_session_timer(mgr, sess, session_to_closed, mgr->timeout_to_closed); + session_manager_update_session_timer(mgr, sess, session_to_closed, mgr->timeout_toclosed); } /****************************************************************************** @@ -428,7 +428,7 @@ static int handle_tcp_new_session(struct session_manager *mgr, struct tuple6 *ke session_push_event(sess, SESSION_EVENT_OPENING); session_push_event(sess, SESSION_EVENT_PACKET); - session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_to_closing); + session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_toclosing); return 0; } @@ -460,7 +460,7 @@ static int handle_udp_new_session(struct session_manager *mgr, struct tuple6 *ke session_push_event(sess, SESSION_EVENT_OPENING); session_push_event(sess, SESSION_EVENT_PACKET); - session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_to_closing); + session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_toclosing); return 0; } @@ -478,7 +478,7 @@ static void handle_tcp_old_session(struct session_manager *mgr, struct tuple6 *k session_set_state(sess, SESSION_STATE_CLOSING); session_push_event(sess, SESSION_EVENT_PACKET); session_push_event(sess, SESSION_EVENT_CLOSING); - session_manager_update_session_timer(mgr, sess, session_to_closed, mgr->timeout_to_closed); + session_manager_update_session_timer(mgr, sess, session_to_closed, mgr->timeout_toclosed); return; } @@ -487,7 +487,7 @@ static void handle_tcp_old_session(struct session_manager *mgr, struct tuple6 *k update_counter_on_active(mgr, sess); session_set_state(sess, SESSION_STATE_ACTIVE); session_push_event(sess, SESSION_EVENT_PACKET); - session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_to_closing); + session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_toclosing); return; } } @@ -501,7 +501,7 @@ static void handle_udp_old_session(struct session_manager *mgr, struct tuple6 *k update_counter_on_active(mgr, sess); session_set_state(sess, SESSION_STATE_ACTIVE); session_push_event(sess, SESSION_EVENT_PACKET); - session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_to_closing); + session_manager_update_session_timer(mgr, sess, session_to_closing, mgr->timeout_toclosing); } // return 0: success @@ -571,8 +571,8 @@ struct session_manager *session_manager_create(uint64_t max_session_num) goto error; } - mgr->timeout_to_closed = 2 * 1000; - mgr->timeout_to_closing = 5 * 1000; + mgr->timeout_toclosed = 2 * 1000; + mgr->timeout_toclosing = 5 * 1000; mgr->tcp_opening_sess_num = 0; mgr->tcp_closing_sess_num = 0; @@ -617,12 +617,12 @@ void session_manager_set_session_eventcb(struct session_manager *mgr, session_ev void session_manager_set_timeout_toclosing(struct session_manager *mgr, uint64_t timeout_ms) { - mgr->timeout_to_closing = timeout_ms; + mgr->timeout_toclosing = timeout_ms; } void session_manager_set_timeout_toclosed(struct session_manager *mgr, uint64_t timeout_ms) { - mgr->timeout_to_closed = timeout_ms; + mgr->timeout_toclosed = timeout_ms; } struct session *session_manager_lookup(struct session_manager *mgr, const struct packet *pkt) @@ -636,7 +636,7 @@ struct session *session_manager_lookup(struct session_manager *mgr, const struct return session_table_find_session(mgr->sess_table, &key); } -// return null: Invalid tuple6 or tcp first packet is not syn +// 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; @@ -657,7 +657,7 @@ struct session *session_manager_update(struct session_manager *mgr, const struct session_set_state(unused_sess, SESSION_STATE_CLOSING); session_push_event(unused_sess, SESSION_EVENT_CLOSING); session_queue_push(mgr->evicted_sess, unused_sess); - session_manager_update_session_timer(mgr, unused_sess, session_to_closed, mgr->timeout_to_closed); + session_manager_update_session_timer(mgr, unused_sess, session_to_closed, mgr->timeout_toclosed); } sess = session_pool_alloc(mgr->sess_pool); @@ -685,7 +685,7 @@ struct session *session_manager_update(struct session_manager *mgr, const struct struct session *session_manager_expire(struct session_manager *mgr) { - SESSION_MANAGER_LOG_DEBUG("current timestamp: %lu s", timestamp_get_sec()); + SESSION_LOG_DEBUG("current timestamp: %lu s", timestamp_get_sec()); struct session *sess = session_timer_expire_session(mgr->sess_timer, timestamp_get_msec()); if (sess == NULL) { @@ -712,7 +712,7 @@ static void session_dispatch(struct session_manager *mgr, struct session *sess) 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)); + SESSION_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); @@ -732,32 +732,37 @@ void session_manager_dispatch(struct session_manager *mgr, struct session *sess) session_dispatch(mgr, evicted_sess); } -uint64_t session_manager_get_tcp_opening_sess_num(struct session_manager *mgr) +uint64_t session_manager_get_sessions(struct session_manager *mgr, enum session_type type, enum session_state state) { - return mgr->tcp_opening_sess_num; -} + if (type == SESSION_TYPE_TCP) + { + switch (state) + { + case SESSION_STATE_OPENING: + return mgr->tcp_opening_sess_num; + case SESSION_STATE_ACTIVE: + return mgr->tcp_active_sess_num; + case SESSION_STATE_CLOSING: + return mgr->tcp_closing_sess_num; + default: + return 0; + } + } -uint64_t session_manager_get_tcp_closing_sess_num(struct session_manager *mgr) -{ - return mgr->tcp_closing_sess_num; -} + if (type == SESSION_TYPE_UDP) + { + switch (state) + { + case SESSION_STATE_OPENING: + return mgr->udp_opening_sess_num; + case SESSION_STATE_ACTIVE: + return mgr->udp_active_sess_num; + case SESSION_STATE_CLOSING: + return mgr->udp_closing_sess_num; + default: + return 0; + } + } -uint64_t session_manager_get_tcp_active_sess_num(struct session_manager *mgr) -{ - return mgr->tcp_active_sess_num; -} - -uint64_t session_manager_get_udp_opening_sess_num(struct session_manager *mgr) -{ - return mgr->udp_opening_sess_num; -} - -uint64_t session_manager_get_udp_closing_sess_num(struct session_manager *mgr) -{ - return mgr->udp_closing_sess_num; -} - -uint64_t session_manager_get_udp_active_sess_num(struct session_manager *mgr) -{ - return mgr->udp_active_sess_num; + return 0; } diff --git a/src/session/session_manager.h b/src/session/session_manager.h index 9f344e9..796b695 100644 --- a/src/session/session_manager.h +++ b/src/session/session_manager.h @@ -8,42 +8,34 @@ extern "C" #include "session.h" -// #define SESSION_MANAGER_LOG_ERROR(format, ...) void(0) -#ifndef SESSION_MANAGER_LOG_ERROR -#define SESSION_MANAGER_LOG_ERROR(format, ...) \ - fprintf(stderr, "ERROR (session manager), " format "\n", ##__VA_ARGS__); +// #define SESSION_LOG_ERROR(format, ...) void(0) +#ifndef SESSION_LOG_ERROR +#define SESSION_LOG_ERROR(format, ...) \ + fprintf(stderr, "ERROR (session), " format "\n", ##__VA_ARGS__); #endif -// #define SESSION_MANAGER_LOG_DEBUG(format, ...) void(0) -#ifndef SESSION_MANAGER_LOG_DEBUG -#define SESSION_MANAGER_LOG_DEBUG(format, ...) \ - fprintf(stderr, "DEBUG (session manager), " format "\n", ##__VA_ARGS__); +// #define SESSION_LOG_DEBUG(format, ...) void(0) +#ifndef SESSION_LOG_DEBUG +#define SESSION_LOG_DEBUG(format, ...) \ + fprintf(stderr, "DEBUG (session), " format "\n", ##__VA_ARGS__); #endif -// create and destroy struct session_manager; struct session_manager *session_manager_create(uint64_t max_session_num); void session_manager_destroy(struct session_manager *mgr); -// config 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_timeout_toclosing(struct session_manager *mgr, uint64_t timeout_ms); void session_manager_set_timeout_toclosed(struct session_manager *mgr, uint64_t timeout_ms); -// core functions struct session *session_manager_lookup(struct session_manager *mgr, const struct packet *pkt); -// return null: Invalid tuple6 or tcp first packet is not syn +// 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 -uint64_t session_manager_get_tcp_opening_sess_num(struct session_manager *mgr); -uint64_t session_manager_get_tcp_closing_sess_num(struct session_manager *mgr); -uint64_t session_manager_get_tcp_active_sess_num(struct session_manager *mgr); -uint64_t session_manager_get_udp_opening_sess_num(struct session_manager *mgr); -uint64_t session_manager_get_udp_closing_sess_num(struct session_manager *mgr); -uint64_t session_manager_get_udp_active_sess_num(struct session_manager *mgr); +uint64_t session_manager_get_sessions(struct session_manager *mgr, enum session_type type, enum session_state state); #ifdef __cpluscplus } diff --git a/src/session/test/gtest_session.cpp b/src/session/test/gtest_session.cpp index 1b870d1..92352ec 100644 --- a/src/session/test/gtest_session.cpp +++ b/src/session/test/gtest_session.cpp @@ -63,21 +63,21 @@ TEST(SESSION, EX_SET_GET) EXPECT_TRUE(session_get0_ex_data(&sess, idx) == (void *)0x1234); } -TEST(SESSION, EX_FREE_BY_RESET_NULL) +TEST(SESSION, EX_FREE_BY_RESET) { struct session sess; memset(&sess, 0, sizeof(sess)); - uint8_t idx = session_get_ex_new_index("ex_free_by_reset_null", free_ex_data, NULL); + uint8_t idx = session_get_ex_new_index("ex_free_by_reset", free_ex_data, NULL); char *ptr = strdup("hello"); session_set_ex_data(&sess, idx, ptr); session_set_ex_data(&sess, idx, NULL); } -TEST(SESSION, EX_FREE_BY_CALL_API) +TEST(SESSION, EX_FREE_BY_CB) { struct session sess; memset(&sess, 0, sizeof(sess)); - uint8_t idx = session_get_ex_new_index("ex_free_by_call_api", free_ex_data, NULL); + uint8_t idx = session_get_ex_new_index("ex_free_by_cb", free_ex_data, NULL); char *ptr = strdup("hello"); session_set_ex_data(&sess, idx, ptr); session_free_ex_data(&sess, idx); diff --git a/src/session/test/gtest_session_manager.cpp b/src/session/test/gtest_session_manager.cpp index 05d10c1..9cca505 100644 --- a/src/session/test/gtest_session_manager.cpp +++ b/src/session/test/gtest_session_manager.cpp @@ -94,12 +94,12 @@ TEST(SESSION_MANAGER, INIT_TO_OPENING_BY_SYN) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == TCP_SYN_RECVED); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); session_manager_dispatch(mgr, sess); for (int i = 0; i < 4; i++) @@ -110,12 +110,12 @@ TEST(SESSION_MANAGER, INIT_TO_OPENING_BY_SYN) } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -170,12 +170,12 @@ TEST(SESSION_MANAGER, INIT_TO_OPENING_BY_SYNACK) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == TCP_SYNACK_RECVED); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); session_manager_dispatch(mgr, sess); for (int i = 0; i < 4; i++) @@ -186,12 +186,12 @@ TEST(SESSION_MANAGER, INIT_TO_OPENING_BY_SYNACK) } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -250,12 +250,12 @@ TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_C2S) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, udp_builtin_ex) == UDP_C2S_RECVED); // check session manager info - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 1); session_manager_dispatch(mgr, sess); for (int i = 0; i < 4; i++) @@ -266,12 +266,12 @@ TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_C2S) } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -326,12 +326,12 @@ TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_S2C) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, udp_builtin_ex) == UDP_S2C_RECVED); // check session manager info - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 1); session_manager_dispatch(mgr, sess); for (int i = 0; i < 4; i++) @@ -342,12 +342,12 @@ TEST(SESSION_MANAGER, INIT_TO_ACTIVE_BY_UDP_S2C) } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -413,12 +413,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_C2S_PAYLOAD) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == TCP_SYN_RECVED); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer SYN Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -451,12 +451,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_C2S_PAYLOAD) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_C2S_PAYLOAD_RECVED)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer C2S Payload Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -474,12 +474,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_C2S_PAYLOAD) } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -541,12 +541,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_S2C_PAYLOAD) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == TCP_SYN_RECVED); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer SYN Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -579,12 +579,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_S2C_PAYLOAD) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_S2C_PAYLOAD_RECVED)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer C2S Payload Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -601,12 +601,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_S2C_PAYLOAD) sleep(1); } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -667,12 +667,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_C2S_PAYLOAD) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == TCP_SYNACK_RECVED); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer SYNACK Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -705,12 +705,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_C2S_PAYLOAD) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer C2S Payload Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -728,12 +728,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_C2S_PAYLOAD) } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -794,12 +794,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_S2C_PAYLOAD) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == TCP_SYNACK_RECVED); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer SYNACK Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -832,12 +832,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_S2C_PAYLOAD) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYNACK_RECVED | TCP_S2C_PAYLOAD_RECVED)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer S2C Payload Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -855,12 +855,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYNACK_AND_S2C_PAYLOAD) } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -926,12 +926,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == TCP_SYN_RECVED); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer SYN Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -964,12 +964,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer SYNACK Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1002,12 +1002,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer ACK Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1040,12 +1040,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer C2S TCP Payload Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1062,12 +1062,12 @@ TEST(SESSION_MANAGER, OPENING_TO_ACTIVE_BY_SYN_AND_SYNACK_AND_ACK_AND_C2S_PAYLOA sleep(1); } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -1229,12 +1229,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == TCP_SYN_RECVED); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer SYN Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1267,12 +1267,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer SYNACK Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1305,12 +1305,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED)); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer ACK Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1343,12 +1343,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer C2S HTTP Req Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1381,12 +1381,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, tcp_builtin_ex) == (TCP_SYN_RECVED | TCP_SYNACK_RECVED | TCP_C2S_PAYLOAD_RECVED)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer S2C Ack Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1419,12 +1419,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) 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)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer S2C HTTP Resp Packet1 <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1457,12 +1457,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) 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)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer S2C HTTP Resp Packet2 <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1495,12 +1495,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) 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)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer C2S Ack Packet2 <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1533,12 +1533,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) 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)); // check session manager info - 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_active_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer C2S FIN Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1571,12 +1571,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) 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)); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer C2S FIN Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1609,12 +1609,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) 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)); // check session manager info - EXPECT_TRUE(session_manager_get_tcp_opening_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_tcp_closing_sess_num(mgr) == 1); - EXPECT_TRUE(session_manager_get_tcp_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 1); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); printf("\n===> Atfer C2S ACK Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1632,12 +1632,12 @@ TEST(SESSION_MANAGER, TCP_FULL_STREAM) } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); @@ -1698,12 +1698,12 @@ TEST(SESSION_MANAGER, UDP_FULL_STREAM) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, udp_builtin_ex) == UDP_C2S_RECVED); // check session manager info - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 1); printf("\n===> Atfer UDP c2s Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1736,12 +1736,12 @@ TEST(SESSION_MANAGER, UDP_FULL_STREAM) EXPECT_TRUE((uint64_t)session_get0_ex_data(sess, udp_builtin_ex) == (UDP_C2S_RECVED | UDP_S2C_RECVED)); // check session manager info - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 1); printf("\n===> Atfer UDP c2s Packet <=== \n\n"); session_manager_dispatch(mgr, sess); @@ -1758,12 +1758,12 @@ TEST(SESSION_MANAGER, UDP_FULL_STREAM) } // check sess mgr - 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_active_sess_num(mgr) == 0); - EXPECT_TRUE(session_manager_get_udp_opening_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_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_TCP, SESSION_STATE_ACTIVE) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_OPENING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_CLOSING) == 0); + EXPECT_TRUE(session_manager_get_sessions(mgr, SESSION_TYPE_UDP, SESSION_STATE_ACTIVE) == 0); // destory session_manager_destroy(mgr); diff --git a/src/stellar/CMakeLists.txt b/src/stellar/CMakeLists.txt index d20f8b5..d826933 100644 --- a/src/stellar/CMakeLists.txt +++ b/src/stellar/CMakeLists.txt @@ -1,2 +1,8 @@ add_executable(stellar stellar.cpp) + +target_include_directories(stellar PUBLIC ${CMAKE_SOURCE_DIR}/src/packet) +target_include_directories(stellar PUBLIC ${CMAKE_SOURCE_DIR}/src/session) +target_include_directories(stellar PUBLIC ${CMAKE_SOURCE_DIR}/src/timestamp) +target_link_libraries(stellar session_manager pthread) + install(TARGETS stellar RUNTIME DESTINATION bin COMPONENT Program) \ No newline at end of file diff --git a/src/stellar/stellar.cpp b/src/stellar/stellar.cpp index e44548c..865ac7d 100644 --- a/src/stellar/stellar.cpp +++ b/src/stellar/stellar.cpp @@ -1,7 +1,227 @@ #include +#include +#include +#include +#include +#include +#include +#include + +#include "packet.h" +#include "timestamp.h" +#include "session_manager.h" + +#ifndef STELLAR_LOG_ERROR +#define STELLAR_LOG_ERROR(format, ...) \ + fprintf(stderr, "ERROR (stellar), " format "\n", ##__VA_ARGS__); +#endif +#ifndef STELLAR_LOG_DEBUG +#define STELLAR_LOG_DEBUG(format, ...) \ + fprintf(stderr, "DEBUG (stellar), " format "\n", ##__VA_ARGS__); +#endif + +#define ATOMIC_SET(x, y) __atomic_store_n(x, y, __ATOMIC_RELAXED) +#define ATOMIC_READ(x) __atomic_load_n(x, __ATOMIC_RELAXED) + +struct thread_ctx +{ + pthread_t tid; + uint16_t index; + uint64_t need_exit; + uint64_t is_runing; + struct session_manager *sess_mgr; +}; + +struct stellar_ctx +{ + uint64_t need_exit; + uint16_t max_worker_num; + uint64_t sess_mgr_max_session_num; + uint64_t sess_mgr_timeout_ms_toclsoing; + uint64_t sess_mgr_timeout_ms_toclosed; + struct thread_ctx thread_ctx[128]; +} g_stellar_ctx = { + .need_exit = 0, + .max_worker_num = 1, + .sess_mgr_max_session_num = 1000000, + .sess_mgr_timeout_ms_toclsoing = 1000, + .sess_mgr_timeout_ms_toclosed = 10000, +}; + +// TODO +static int recv_packet(const char **data) +{ + static unsigned char packet_data[] = { + 0x5c, 0x5e, 0xab, 0x2a, 0xa2, 0x00, 0x2c, 0x6b, 0xf5, 0x45, 0x88, 0x29, 0x08, 0x00, 0x45, 0x00, 0x00, 0x5c, 0x0b, 0x4d, 0x00, 0x00, 0x3b, 0x29, 0x09, 0xc8, + 0xd2, 0x4d, 0x58, 0xa3, 0x3b, 0x42, 0x04, 0x32, 0x60, 0x00, 0x00, 0x00, 0x00, 0x20, 0x06, 0x40, 0x20, 0x01, 0x0d, 0xa8, 0x02, 0x00, 0x90, 0x0e, 0x02, 0x00, + 0x5e, 0xfe, 0xd2, 0x4d, 0x58, 0xa3, 0x26, 0x00, 0x14, 0x0e, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x17, 0x02, 0x10, 0x58, 0xcd, 0x4c, 0x00, 0x50, + 0x81, 0x80, 0x5c, 0x76, 0x00, 0x00, 0x00, 0x00, 0x80, 0x02, 0x20, 0x00, 0xf7, 0x57, 0x00, 0x00, 0x02, 0x04, 0x04, 0xc4, 0x01, 0x03, 0x03, 0x08, 0x01, 0x01, + 0x04, 0x02}; + + *data = (const char *)packet_data; + return sizeof(packet_data); +} + +static void signal_handler(int signo) +{ + if (signo == SIGINT) + { + STELLAR_LOG_DEBUG("recv SIGINT, exit !!!"); + ATOMIC_SET(&g_stellar_ctx.need_exit, 1); + } + + if (signo == SIGQUIT) + { + STELLAR_LOG_DEBUG("recv SIGQUIT, exit !!!"); + ATOMIC_SET(&g_stellar_ctx.need_exit, 1); + } + + if (signo == SIGTERM) + { + STELLAR_LOG_DEBUG("recv SIGTERM, exit !!!"); + ATOMIC_SET(&g_stellar_ctx.need_exit, 1); + } +} + +static void plugin_dispatch(struct session *sess, uint32_t event, void *arg) +{ + struct thread_ctx *thd_ctx = (struct thread_ctx *)arg; + printf("=> tid[%d] plugin_dispatch handle session: %p, event: \"%s\"\n", thd_ctx->index, sess, session_event_tostring((enum session_event)event)); + session_dump(sess); +} + +static void thread_ctx_init(struct stellar_ctx *ctx) +{ + for (uint16_t i = 0; i < ctx->max_worker_num; i++) + { + struct thread_ctx *thd_ctx = &ctx->thread_ctx[i]; + thd_ctx->index = i; + thd_ctx->need_exit = 0; + thd_ctx->is_runing = 0; + thd_ctx->sess_mgr = session_manager_create(ctx->sess_mgr_max_session_num); + assert(thd_ctx->sess_mgr != NULL); + session_manager_set_session_eventcb(thd_ctx->sess_mgr, plugin_dispatch, thd_ctx); + session_manager_set_timeout_toclosing(thd_ctx->sess_mgr, ctx->sess_mgr_timeout_ms_toclsoing); + session_manager_set_timeout_toclosed(thd_ctx->sess_mgr, ctx->sess_mgr_timeout_ms_toclosed); + } +} + +static void thread_ctx_free(struct stellar_ctx *ctx) +{ + for (uint16_t i = 0; i < ctx->max_worker_num; i++) + { + struct thread_ctx *thd_ctx = &ctx->thread_ctx[i]; + if (ATOMIC_READ(&thd_ctx->is_runing) == 0) + { + session_manager_destroy(thd_ctx->sess_mgr); + } + } +} + +static void *thread_cycle(void *arg) +{ + uint16_t len = 0; + const char *data = NULL; + struct packet pkt; + struct session *sess = NULL; + struct thread_ctx *thd_ctx = (struct thread_ctx *)arg; + struct session_manager *sess_mgr = thd_ctx->sess_mgr; + char thread_name[16]; + + ATOMIC_SET(&thd_ctx->is_runing, 1); + snprintf(thread_name, sizeof(thread_name), "stellar:%d", thd_ctx->index); + prctl(PR_SET_NAME, (unsigned long long)thread_name, NULL, NULL, NULL); + STELLAR_LOG_DEBUG("worker thread %s runing\n", thread_name); + + while (ATOMIC_READ(&thd_ctx->need_exit) == 0) + { + // TODO recv packet + len = recv_packet(&data); + + // parse packet + packet_parse(&pkt, data, len); + + // TODO duplicated packet filter + + // update session + sess = session_manager_update(sess_mgr, &pkt); + if (sess == NULL) + { + goto fast_forward; + } + session_manager_dispatch(sess_mgr, sess); + + fast_forward: + // TODO send packet + + // dispatch expire session + sess = session_manager_expire(sess_mgr); + session_manager_dispatch(sess_mgr, sess); + + // TODO get next timeout + sleep(1); + } + + ATOMIC_SET(&thd_ctx->is_runing, 0); + STELLAR_LOG_DEBUG("worker thread %s exit\n", thread_name); + + return NULL; +} int main(int argc, char **argv) { - printf("Hello Stellar\n"); + // TODO parse command line + + // TODO init log + + // TODO init plugin + + // register signal handler + signal(SIGINT, signal_handler); + signal(SIGQUIT, signal_handler); + signal(SIGTERM, signal_handler); + + // update timestamp + timestamp_update(); + + // init thread context + thread_ctx_init(&g_stellar_ctx); + + // create worker thread + for (uint16_t i = 0; i < g_stellar_ctx.max_worker_num; i++) + { + struct thread_ctx *thd_ctx = &g_stellar_ctx.thread_ctx[i]; + if (pthread_create(&thd_ctx->tid, NULL, thread_cycle, (void *)thd_ctx) < 0) + { + STELLAR_LOG_ERROR("unable to create worker thread, error %d: %s", errno, strerror(errno)); + goto error_out; + } + } + + // master thread update timestamp + while (!g_stellar_ctx.need_exit) + { + timestamp_update(); + sleep(1); + } + + // wait worker thread exit + for (uint16_t i = 0; i < g_stellar_ctx.max_worker_num; i++) + { + struct thread_ctx *thd_ctx = &g_stellar_ctx.thread_ctx[i]; + ATOMIC_SET(&thd_ctx->need_exit, 1); + while (ATOMIC_READ(&thd_ctx->is_runing) == 1) + { + sleep(1); + } + } + +error_out: + thread_ctx_free(&g_stellar_ctx); + + // TODO free plugin + + // TODO free log + return 0; } \ No newline at end of file