From: Victor Julien Date: Sat, 21 Jan 2023 11:29:23 +0000 (+0100) Subject: streaming: add sbcfg to StreamingBufferSlideToOffset X-Git-Tag: suricata-7.0.0-rc1~123 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=3b5deb4ec781dab9f3e4fac30edda4d55c9c277c;p=thirdparty%2Fsuricata.git streaming: add sbcfg to StreamingBufferSlideToOffset --- diff --git a/src/app-layer-htp-body.c b/src/app-layer-htp-body.c index e430ce1ac1..15bab12175 100644 --- a/src/app-layer-htp-body.c +++ b/src/app-layer-htp-body.c @@ -187,7 +187,7 @@ void HtpBodyPrune(HtpState *state, HtpBody *body, int direction) if (left_edge) { SCLogDebug("sliding body to offset %"PRIu64, left_edge); - StreamingBufferSlideToOffset(body->sb, left_edge); + StreamingBufferSlideToOffset(body->sb, &cfg->sbcfg, left_edge); } SCLogDebug("pruning chunks of body %p", body); diff --git a/src/stream-tcp-list.c b/src/stream-tcp-list.c index 88b5148a3d..50d51eaf74 100644 --- a/src/stream-tcp-list.c +++ b/src/stream-tcp-list.c @@ -936,7 +936,7 @@ void StreamTcpPruneSession(Flow *f, uint8_t flags) if (!(ssn->flags & STREAMTCP_FLAG_APP_LAYER_DISABLED)) { AppLayerFramesSlide(f, slide, flags & (STREAM_TOSERVER | STREAM_TOCLIENT)); } - StreamingBufferSlideToOffset(&stream->sb, left_edge); + StreamingBufferSlideToOffset(&stream->sb, &stream_config.sbcnf, left_edge); stream->base_seq += slide; if (slide <= stream->app_progress_rel) { diff --git a/src/util-file.c b/src/util-file.c index 356ba64446..321d910a5a 100644 --- a/src/util-file.c +++ b/src/util-file.c @@ -412,7 +412,7 @@ static int FilePruneFile(File *file, const StreamingBufferConfig *cfg) } if (left_edge) { - StreamingBufferSlideToOffset(file->sb, left_edge); + StreamingBufferSlideToOffset(file->sb, cfg, left_edge); } SCReturnInt(0); diff --git a/src/util-streaming-buffer.c b/src/util-streaming-buffer.c index afd2d4c0cc..323281eada 100644 --- a/src/util-streaming-buffer.c +++ b/src/util-streaming-buffer.c @@ -650,7 +650,7 @@ static inline bool RegionContainsOffset(const StreamingBufferRegion *r, const ui * - no shift */ static inline void StreamingBufferSlideToOffsetWithRegions( - StreamingBuffer *sb, const uint64_t slide_offset) + StreamingBuffer *sb, const StreamingBufferConfig *cfg, const uint64_t slide_offset) { ListRegions(sb); BUG_ON(slide_offset == sb->region.stream_offset); @@ -760,7 +760,8 @@ static inline void StreamingBufferSlideToOffsetWithRegions( * \brief slide to absolute offset * \todo if sliding beyond window, we could perhaps reset? */ -void StreamingBufferSlideToOffset(StreamingBuffer *sb, uint64_t offset) +void StreamingBufferSlideToOffset( + StreamingBuffer *sb, const StreamingBufferConfig *cfg, uint64_t offset) { SCLogDebug("sliding to offset %" PRIu64, offset); ListRegions(sb); @@ -769,7 +770,7 @@ void StreamingBufferSlideToOffset(StreamingBuffer *sb, uint64_t offset) #endif if (sb->region.next) { - StreamingBufferSlideToOffsetWithRegions(sb, offset); + StreamingBufferSlideToOffsetWithRegions(sb, cfg, offset); SBBPrune(sb); SCLogDebug("post SBBPrune"); ListRegions(sb); @@ -1664,7 +1665,7 @@ static int StreamingBufferTest02(void) FAIL_IF_NOT_NULL(sb->head); FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree)); - StreamingBufferSlideToOffset(sb, 6); + StreamingBufferSlideToOffset(sb, &cfg, 6); FAIL_IF_NOT_NULL(sb->head); FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree)); @@ -1683,7 +1684,7 @@ static int StreamingBufferTest02(void) FAIL_IF_NOT_NULL(sb->head); FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree)); - StreamingBufferSlideToOffset(sb, 12); + StreamingBufferSlideToOffset(sb, &cfg, 12); FAIL_IF(!StreamingBufferSegmentIsBeforeWindow(sb,&seg1)); FAIL_IF(StreamingBufferSegmentIsBeforeWindow(sb,&seg2)); FAIL_IF(StreamingBufferSegmentIsBeforeWindow(sb,&seg3)); @@ -1737,7 +1738,7 @@ static int StreamingBufferTest03(void) FAIL_IF_NOT(sb->sbb_size == 22); FAIL_IF_NOT(sb->head == RB_MIN(SBB, &sb->sbb_tree)); - StreamingBufferSlideToOffset(sb, 10); + StreamingBufferSlideToOffset(sb, &cfg, 10); FAIL_IF(!StreamingBufferSegmentIsBeforeWindow(sb,&seg1)); FAIL_IF(StreamingBufferSegmentIsBeforeWindow(sb,&seg2)); FAIL_IF(StreamingBufferSegmentIsBeforeWindow(sb,&seg3)); diff --git a/src/util-streaming-buffer.h b/src/util-streaming-buffer.h index 33ed2745d3..4e7a5ee112 100644 --- a/src/util-streaming-buffer.h +++ b/src/util-streaming-buffer.h @@ -160,7 +160,8 @@ StreamingBuffer *StreamingBufferInit(const StreamingBufferConfig *cfg); void StreamingBufferClear(StreamingBuffer *sb); void StreamingBufferFree(StreamingBuffer *sb); -void StreamingBufferSlideToOffset(StreamingBuffer *sb, uint64_t offset); +void StreamingBufferSlideToOffset( + StreamingBuffer *sb, const StreamingBufferConfig *cfg, uint64_t offset); StreamingBufferSegment *StreamingBufferAppendRaw(StreamingBuffer *sb, const uint8_t *data, uint32_t data_len) WARN_UNUSED;