Add state to the on_session_message parameter.

* When state is closed, it implies that packet is null and the session will be destroyed
This commit is contained in:
luwenpeng
2024-10-25 19:15:28 +08:00
parent 4061d5a942
commit 03864c9731
9 changed files with 168 additions and 128 deletions

View File

@@ -5,6 +5,9 @@
void session_init(struct session *sess)
{
memset(sess, 0, sizeof(struct session));
sess->empty_seg.data = NULL;
sess->empty_seg.len = 0;
sess->empty_seg.user_data = sess;
}
void session_set_id(struct session *sess, uint64_t id)
@@ -205,12 +208,12 @@ struct tcp_segment *session_get_tcp_segment(struct session *sess)
enum flow_type type = session_get_flow_type(sess);
struct tcp_half *half = &sess->tcp_halfs[type];
if (half->in_order.data != NULL && half->in_order.len > 0 && half->in_order_ref == 0)
if (half->inorder_seg.data != NULL && half->inorder_seg.len > 0 && !half->inorder_seg_consumed)
{
sess->sess_mgr_stat->tcp_segs_consumed++;
half->in_order_ref++;
half->in_order.user_data = sess;
return &half->in_order;
half->inorder_seg_consumed = 1;
half->inorder_seg.user_data = sess;
return &half->inorder_seg;
}
else
{
@@ -236,15 +239,23 @@ void session_free_tcp_segment(struct session *sess, struct tcp_segment *seg)
return;
}
// empty segment for end of session
if (seg == &sess->empty_seg)
{
return;
}
enum flow_type type = session_get_flow_type(sess);
struct tcp_half *half = &sess->tcp_halfs[type];
if (seg == &half->in_order)
// in order segment
if (seg == &half->inorder_seg)
{
half->in_order.data = NULL;
half->in_order.len = 0;
half->inorder_seg.data = NULL;
half->inorder_seg.len = 0;
return;
}
// tcp reassembly segment
else
{
session_inc_stat(sess, type, STAT_TCP_SEGMENTS_RELEASED, 1);