session_get_tcp_segment() and session_free_tcp_segment() support asynchronous calls

This commit is contained in:
luwenpeng
2024-05-15 17:45:08 +08:00
parent 00df68695e
commit 44c2cf86e4
3 changed files with 6 additions and 2 deletions

View File

@@ -210,8 +210,9 @@ struct tcp_segment *session_get_tcp_segment(struct session *sess)
enum flow_direction dir = session_get_current_flow_direction(sess);
struct tcp_half *half = &sess->tcp_halfs[dir];
if (half->in_order.data != NULL && half->in_order.len > 0)
if (half->in_order.data != NULL && half->in_order.len > 0 && half->in_order_ref == 0)
{
half->in_order_ref++;
return &half->in_order;
}
else

View File

@@ -305,6 +305,7 @@ static void tcp_update(struct session_manager *mgr, struct session *sess, enum f
half->in_order.data = tcp_layer->pld_ptr;
half->in_order.len = len;
half->in_order_ref = 0;
}
return;
}
@@ -345,6 +346,7 @@ static void tcp_update(struct session_manager *mgr, struct session *sess, enum f
half->in_order.data = tcp_layer->pld_ptr;
half->in_order.len = len;
half->in_order_ref = 0;
tcp_reassembly_inc_recv_next(half->assembler, len);
}
// retransmission

View File

@@ -25,6 +25,7 @@ struct tcp_half
{
struct tcp_reassembly *assembler;
struct tcp_segment in_order;
uint32_t in_order_ref;
uint32_t seq;
uint32_t ack;