From f684b60127f8106f5569b0cc1a35b0b0464d095a Mon Sep 17 00:00:00 2001 From: Anoop Saldanha Date: Wed, 23 Nov 2011 14:13:26 +0530 Subject: [PATCH] if flow has disabled app layer inspection, disable buffering the segments unnecessarily --- src/stream-tcp-reassemble.c | 25 +++++++++++++++++++------ 1 file changed, 19 insertions(+), 6 deletions(-) diff --git a/src/stream-tcp-reassemble.c b/src/stream-tcp-reassemble.c index b736bd82de..b644bcfa60 100644 --- a/src/stream-tcp-reassemble.c +++ b/src/stream-tcp-reassemble.c @@ -2696,12 +2696,25 @@ static int StreamTcpReassembleAppLayer (TcpReassemblyThreadCtx *ra_ctx, seg, seg->seq, seg->payload_len, (uint32_t)(seg->seq + seg->payload_len)); - /* Remove the segments which are either completely before the - ra_base_seq and processed by both app layer and raw reassembly. */ - if (SEQ_LEQ((seg->seq + seg->payload_len), (ra_base_seq+1)) && - seg->flags & SEGMENTTCP_FLAG_RAW_PROCESSED && - seg->flags & SEGMENTTCP_FLAG_APPLAYER_PROCESSED) - { + if (p->flow->flags & FLOW_NO_APPLAYER_INSPECTION) { + if (seg->flags & SEGMENTTCP_FLAG_RAW_PROCESSED) { + SCLogDebug("removing seg %p seq %"PRIu32 + " len %"PRIu16"", seg, seg->seq, seg->payload_len); + + TcpSegment *next_seg = seg->next; + StreamTcpRemoveSegmentFromStream(stream, seg); + StreamTcpSegmentReturntoPool(seg); + seg = next_seg; + continue; + } else { + break; + } + + /* Remove the segments which are either completely before the + * ra_base_seq and processed by both app layer and raw reassembly. */ + } else if (SEQ_LEQ((seg->seq + seg->payload_len), (ra_base_seq+1)) && + seg->flags & SEGMENTTCP_FLAG_RAW_PROCESSED && + seg->flags & SEGMENTTCP_FLAG_APPLAYER_PROCESSED) { SCLogDebug("removing pre ra_base_seq %"PRIu32" seg %p seq %"PRIu32 " len %"PRIu16"", ra_base_seq, seg, seg->seq, seg->payload_len);