]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
streaming: add sbcfg to StreamingBufferSlideToOffset
authorVictor Julien <vjulien@oisf.net>
Sat, 21 Jan 2023 11:29:23 +0000 (12:29 +0100)
committerVictor Julien <vjulien@oisf.net>
Mon, 23 Jan 2023 09:33:32 +0000 (10:33 +0100)
src/app-layer-htp-body.c
src/stream-tcp-list.c
src/util-file.c
src/util-streaming-buffer.c
src/util-streaming-buffer.h

index e430ce1ac12a25c7774959e0fcef12e91d367faf..15bab12175ee7f5aa3b795882540a81f296e8784 100644 (file)
@@ -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);
index 88b5148a3d950a3ae359c183095bb92062ce78a3..50d51eaf74bc7e136cc687b9c687796334d2749b 100644 (file)
@@ -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) {
index 356ba64446c15b72b0865481cf2b9b1b57ce0816..321d910a5aeafc7961689e24bc551c3d1977382a 100644 (file)
@@ -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);
index afd2d4c0cc27bc030eb4cf599b775bf39abb803c..323281eada18c1b4b2323ed570e6c3aca181a553 100644 (file)
@@ -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));
index 33ed2745d33b37685530c68df0f693536a2a2021..4e7a5ee1127331243b170a7a07d03025011d4244 100644 (file)
@@ -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;