session manager not trigger event

This commit is contained in:
luwenpeng
2024-01-15 11:21:11 +08:00
parent 84bdd92534
commit a045c04f8d
8 changed files with 95 additions and 265 deletions

View File

@@ -117,11 +117,20 @@ static void signal_handler(int signo)
}
}
static void plugin_dispatch(struct session *sess, uint32_t event, void *arg)
static void __session_dispatch(struct session *sess)
{
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));
if (sess == NULL)
{
return;
}
printf("\n");
printf("=> session dispatch: %p\n", sess);
session_dump(sess);
printf("<= session dispatch\n");
session_set0_cur_pkt(sess, NULL);
session_set_cur_dir(sess, SESSION_DIR_NONE);
}
static void thread_ctx_init(struct stellar_ctx *ctx)
@@ -135,7 +144,6 @@ static void thread_ctx_init(struct stellar_ctx *ctx)
// session manager
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);
// duplicated packet filter
@@ -206,7 +214,7 @@ static void *thread_cycle(void *arg)
// TODO session synchronization
session_manager_dispatch(sess_mgr, sess);
__session_dispatch(sess);
dupkt_filter_add(dupkt_filter, &pkt);
fast_forward:
@@ -219,7 +227,15 @@ static void *thread_cycle(void *arg)
const struct packet *sess_1st_pkt = session_get0_1st_pkt(sess);
eviction_filter_add(thd_ctx->eviction_filter, sess_1st_pkt);
}
session_manager_dispatch(sess_mgr, sess);
__session_dispatch(sess);
sess = session_manager_evicte(sess_mgr);
if (sess && session_get_type(sess) == SESSION_TYPE_UDP)
{
const struct packet *sess_1st_pkt = session_get0_1st_pkt(sess);
eviction_filter_add(thd_ctx->eviction_filter, sess_1st_pkt);
}
__session_dispatch(sess);
// TODO get next timeout
sleep(1);