refactor: change session key from address list to six tuple

This commit is contained in:
luwenpeng
2023-12-14 15:23:13 +08:00
parent 5620ac211b
commit a232045764
14 changed files with 773 additions and 563 deletions

View File

@@ -28,12 +28,12 @@ struct session_manager
* private API
******************************************************************************/
static void session_manager_handle_new_session(struct session_manager *mgr, struct session *sess, const struct packet *pkt, struct session_address *addr)
static void session_manager_handle_new_session(struct session_manager *mgr, struct session_key *key, struct session *sess, const struct packet *pkt)
{
// TODO
}
static void session_manager_handle_old_session(struct session_manager *mgr, struct session *sess, const struct packet *pkt, struct session_address *addr)
static void session_manager_handle_old_session(struct session_manager *mgr, struct session_key *key, struct session *sess, const struct packet *pkt)
{
// TODO
}
@@ -95,7 +95,7 @@ static void handshake_expire_cb(struct session *sess, void *arg)
assert(mgr != NULL);
session_set_state(sess, SESSION_STATE_DISCARD);
session_push_event(sess, SESSION_EVENT_DISCARD);
session_push_event(sess, SESSION_EVENT_CLOSING);
session_manager_enqueue_ready_session(mgr, sess);
}
@@ -168,24 +168,12 @@ void session_manager_set_session_eventcb(struct session_manager *mgr, session_ev
mgr->arg = arg;
}
struct session *session_manager_find_session_by_id(struct session_manager *mgr, uint64_t id)
struct session *session_manager_find_sessions(struct session_manager *mgr, const struct packet *pkt)
{
struct session *sess = session_table_find_session_by_id(mgr->sess_table, id);
if (sess)
{
session_set_last_time(sess, timestamp_get_msec());
// TODO
}
struct session_key key;
// TODO packet to key
return sess;
}
struct session *session_manager_find_session_by_packet(struct session_manager *mgr, const struct packet *pkt)
{
struct session_address addr;
session_address_init(&addr, pkt);
struct session *sess = session_table_find_session_by_addr(mgr->sess_table, &addr);
struct session *sess = session_table_find_session(mgr->sess_table, &key);
if (sess == NULL)
{
if (session_pool_get_count(mgr->sess_pool) == 1)
@@ -193,18 +181,18 @@ struct session *session_manager_find_session_by_packet(struct session_manager *m
struct session *oldest_sess = session_table_find_oldest_session(mgr->sess_table);
assert(oldest_sess == NULL);
session_set_state(oldest_sess, SESSION_STATE_DISCARD);
session_push_event(oldest_sess, SESSION_EVENT_DISCARD);
session_push_event(oldest_sess, SESSION_EVENT_CLOSING);
session_manager_enqueue_ready_session(mgr, oldest_sess);
}
sess = session_pool_alloc(mgr->sess_pool);
assert(sess != NULL);
session_manager_handle_new_session(mgr, sess, pkt, &addr);
session_manager_handle_new_session(mgr, &key, sess, pkt);
}
else
{
session_manager_handle_old_session(mgr, sess, pkt, &addr);
session_manager_handle_old_session(mgr, &key, sess, pkt);
}
return sess;