bugfix: call duplicated packet filter too many times
This commit is contained in:
@@ -95,6 +95,11 @@ void tcp_reassembly_free(struct tcp_reassembly *assembler)
|
||||
// return: -1: failed (no space)
|
||||
int tcp_reassembly_push(struct tcp_reassembly *assembler, struct tcp_segment *seg, uint64_t now)
|
||||
{
|
||||
if (assembler == NULL)
|
||||
{
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (assembler->cur_seg_num >= assembler->max_seg_num)
|
||||
{
|
||||
TCP_REASSEMBLY_LOG_ERROR("assembler is full");
|
||||
@@ -121,9 +126,12 @@ int tcp_reassembly_push(struct tcp_reassembly *assembler, struct tcp_segment *se
|
||||
|
||||
struct tcp_segment *tcp_reassembly_pop(struct tcp_reassembly *assembler)
|
||||
{
|
||||
struct interval_tree_node *node;
|
||||
if (assembler == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
node = interval_tree_iter_first(&assembler->root, assembler->recv_next, assembler->recv_next);
|
||||
struct interval_tree_node *node = interval_tree_iter_first(&assembler->root, assembler->recv_next, assembler->recv_next);
|
||||
if (node == NULL)
|
||||
{
|
||||
return NULL;
|
||||
@@ -167,6 +175,11 @@ struct tcp_segment *tcp_reassembly_pop(struct tcp_reassembly *assembler)
|
||||
|
||||
struct tcp_segment *tcp_reassembly_expire(struct tcp_reassembly *assembler, uint64_t now)
|
||||
{
|
||||
if (assembler == NULL)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (list_empty(&assembler->list))
|
||||
{
|
||||
return NULL;
|
||||
@@ -188,6 +201,11 @@ struct tcp_segment *tcp_reassembly_expire(struct tcp_reassembly *assembler, uint
|
||||
|
||||
void tcp_reassembly_inc_recv_next(struct tcp_reassembly *assembler, uint32_t offset)
|
||||
{
|
||||
if (assembler == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
assembler->recv_next += offset;
|
||||
if (assembler->recv_next > UINT32_MAX)
|
||||
{
|
||||
@@ -197,10 +215,20 @@ void tcp_reassembly_inc_recv_next(struct tcp_reassembly *assembler, uint32_t off
|
||||
|
||||
void tcp_reassembly_set_recv_next(struct tcp_reassembly *assembler, uint32_t seq)
|
||||
{
|
||||
if (assembler == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
assembler->recv_next = seq;
|
||||
}
|
||||
|
||||
uint32_t tcp_reassembly_get_recv_next(struct tcp_reassembly *assembler)
|
||||
{
|
||||
if (assembler == NULL)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
return assembler->recv_next;
|
||||
}
|
||||
Reference in New Issue
Block a user