stream: improve StreamTcpPruneSession

Check if a segment is done for the app-layer using
StreamTcpAppLayerSegmentProcessed instead of the flag directly so the
gap case works better.
pull/945/head
Victor Julien 11 years ago
parent 3fa818d087
commit 539bf57a65

@ -2740,13 +2740,14 @@ void StreamTcpPruneSession(Flow *f, uint8_t flags) {
for (; seg != NULL && SEQ_LT(seg->seq, stream->last_ack);) for (; seg != NULL && SEQ_LT(seg->seq, stream->last_ack);)
{ {
SCLogDebug("seg %p, SEQ %"PRIu32", LEN %"PRIu16", SUM %"PRIu32, SCLogDebug("seg %p, SEQ %"PRIu32", LEN %"PRIu16", SUM %"PRIu32", FLAGS %02x",
seg, seg->seq, seg->payload_len, seg, seg->seq, seg->payload_len,
(uint32_t)(seg->seq + seg->payload_len)); (uint32_t)(seg->seq + seg->payload_len), seg->flags);
if (SEQ_LEQ((seg->seq + seg->payload_len), (ra_base_seq+1)) && if (SEQ_LEQ((seg->seq + seg->payload_len), (ra_base_seq+1)) &&
(seg->flags & SEGMENTTCP_FLAG_RAW_PROCESSED) && (seg->flags & SEGMENTTCP_FLAG_RAW_PROCESSED) &&
(seg->flags & SEGMENTTCP_FLAG_APPLAYER_PROCESSED)) { StreamTcpAppLayerSegmentProcessed(stream, seg))
{
if (StreamTcpReturnSegmentCheck(ssn, stream, seg) == 0) { if (StreamTcpReturnSegmentCheck(ssn, stream, seg) == 0) {
break; break;
} }
@ -2761,8 +2762,8 @@ void StreamTcpPruneSession(Flow *f, uint8_t flags) {
continue; continue;
} else if (StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(stream) && } else if (StreamTcpIsSetStreamFlagAppProtoDetectionCompleted(stream) &&
(seg->flags & SEGMENTTCP_FLAG_RAW_PROCESSED) && (seg->flags & SEGMENTTCP_FLAG_RAW_PROCESSED) &&
(seg->flags & SEGMENTTCP_FLAG_APPLAYER_PROCESSED)) StreamTcpAppLayerSegmentProcessed(stream, seg))
{ {
if (StreamTcpReturnSegmentCheck(ssn, stream, seg) == 0) { if (StreamTcpReturnSegmentCheck(ssn, stream, seg) == 0) {
break; break;

Loading…
Cancel
Save