]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
stream: add offset to raw stream callback
authorVictor Julien <vjulien@oisf.net>
Tue, 12 Apr 2022 13:22:23 +0000 (15:22 +0200)
committerVictor Julien <vjulien@oisf.net>
Fri, 15 Apr 2022 11:49:48 +0000 (13:49 +0200)
This gives the called function to understand where it is in the
stream.

src/detect-engine-payload.c
src/output-streaming.c
src/stream-tcp-reassemble.c
src/stream-tcp.h
src/tests/stream-tcp-reassemble.c

index bbe46addc7fe271a119a2fe553086d30d91fa4d3..65cdf076daf229594bd97e3e2a9a01192eb85852 100644 (file)
@@ -54,7 +54,8 @@ struct StreamMpmData {
     const MpmCtx *mpm_ctx;
 };
 
-static int StreamMpmFunc(void *cb_data, const uint8_t *data, const uint32_t data_len)
+static int StreamMpmFunc(
+        void *cb_data, const uint8_t *data, const uint32_t data_len, const uint64_t _offset)
 {
     struct StreamMpmData *smd = cb_data;
     if (data_len >= smd->mpm_ctx->minlen) {
@@ -221,7 +222,8 @@ struct StreamContentInspectData {
     Flow *f;
 };
 
-static int StreamContentInspectFunc(void *cb_data, const uint8_t *data, const uint32_t data_len)
+static int StreamContentInspectFunc(
+        void *cb_data, const uint8_t *data, const uint32_t data_len, const uint64_t _offset)
 {
     SCEnter();
     int r = 0;
@@ -279,7 +281,8 @@ struct StreamContentInspectEngineData {
     Flow *f;
 };
 
-static int StreamContentInspectEngineFunc(void *cb_data, const uint8_t *data, const uint32_t data_len)
+static int StreamContentInspectEngineFunc(
+        void *cb_data, const uint8_t *data, const uint32_t data_len, const uint64_t _offset)
 {
     SCEnter();
     int r = 0;
index 77d2a98f11d4366f41c864df6ad2875c35da7492..60efef57910bd1f573ddee4ce1ed77a1856c2fd5 100644 (file)
@@ -253,7 +253,8 @@ struct StreamLogData {
     Flow *f;
 };
 
-static int StreamLogFunc(void *cb_data, const uint8_t *data, const uint32_t data_len)
+static int StreamLogFunc(
+        void *cb_data, const uint8_t *data, const uint32_t data_len, const uint64_t _offset)
 {
     struct StreamLogData *log = cb_data;
 
index 114dba6e974ee8d378a8706e51b7cf60b5a3b9c4..0d74459fd19c5b42d7450c80fef075e48f56ff24 100644 (file)
@@ -1597,7 +1597,7 @@ static int StreamReassembleRawInline(TcpSession *ssn, const Packet *p,
     }
 
     /* run the callback */
-    r = Callback(cb_data, mydata, mydata_len);
+    r = Callback(cb_data, mydata, mydata_len, mydata_offset);
     BUG_ON(r < 0);
 
     if (return_progress) {
@@ -1745,7 +1745,7 @@ static int StreamReassembleRawDo(TcpSession *ssn, TcpStream *stream,
         SCLogDebug("data %p len %u", mydata, mydata_len);
 
         /* we have data. */
-        r = Callback(cb_data, mydata, mydata_len);
+        r = Callback(cb_data, mydata, mydata_len, mydata_offset);
         BUG_ON(r < 0);
 
         if (mydata_offset == progress) {
index 4284f5e73f8d7715d97f6e580b4b28a16d1c22f3..ba360cdf3e8b24144117bb645bccfee1a6b29fd1 100644 (file)
@@ -127,7 +127,8 @@ int StreamTcpSegmentForEach(const Packet *p, uint8_t flag,
 void StreamTcpReassembleConfigEnableOverlapCheck(void);
 void TcpSessionSetReassemblyDepth(TcpSession *ssn, uint32_t size);
 
-typedef int (*StreamReassembleRawFunc)(void *data, const uint8_t *input, const uint32_t input_len);
+typedef int (*StreamReassembleRawFunc)(
+        void *data, const uint8_t *input, const uint32_t input_len, const uint64_t offset);
 
 int StreamReassembleLog(TcpSession *ssn, TcpStream *stream,
         StreamReassembleRawFunc Callback, void *cb_data,
index a3c5da6d7e671b1535819433412f9e0244aaa230..5f07f336c4d84cc7bf9493fcf3a064b2cca44174 100644 (file)
@@ -31,7 +31,8 @@ struct TestReassembleRawCallbackData {
     const uint32_t expect_data_len;
 };
 
-static int TestReassembleRawCallback(void *cb_data, const uint8_t *data, const uint32_t data_len)
+static int TestReassembleRawCallback(
+        void *cb_data, const uint8_t *data, const uint32_t data_len, const uint64_t offset)
 {
     struct TestReassembleRawCallbackData *cb = cb_data;