]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
detect: new helper to register multi-buffer with progress
authorPhilippe Antoine <pantoine@oisf.net>
Tue, 15 Apr 2025 19:08:01 +0000 (21:08 +0200)
committerVictor Julien <victor@inliniac.net>
Sat, 19 Apr 2025 16:20:02 +0000 (18:20 +0200)
This allows to use these engines for hook rules needing exact
progress (checked in SigValidate)

rust/src/detect/mod.rs
src/detect-engine-helper.c
src/detect-engine-helper.h

index 19a5e34818a679611238f45b4bbf8a449d22e5e1..dc79f61393c06dfbbaaeff05283bcbaf58b87236 100644 (file)
@@ -137,6 +137,20 @@ extern "C" {
             u32,
         ) -> *mut c_void,
     ) -> c_int;
+    pub fn DetectHelperMultiBufferProgressMpmRegister(
+        name: *const libc::c_char, desc: *const libc::c_char, alproto: AppProto, toclient: bool,
+        toserver: bool,
+        get_multi_data: unsafe extern "C" fn(
+            *mut c_void,
+            *const c_void,
+            *const c_void,
+            u8,
+            *const c_void,
+            i32,
+            u32,
+        ) -> *mut c_void,
+        progress: c_int,
+    ) -> c_int;
 }
 #[repr(u8)]
 #[derive(Copy, Clone, Debug, PartialEq, Eq)]
index fd24bfb2c23144f2d10489992437635c422c4f4b..79d2128f11b323dc56a3aa262ff7636ecac752c1 100644 (file)
@@ -80,20 +80,29 @@ int DetectHelperBufferMpmRegister(const char *name, const char *desc, AppProto a
     return DetectBufferTypeGetByName(name);
 }
 
-int DetectHelperMultiBufferMpmRegister(const char *name, const char *desc, AppProto alproto,
-        bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData)
+int DetectHelperMultiBufferProgressMpmRegister(const char *name, const char *desc, AppProto alproto,
+        bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData, int progress)
 {
     if (toserver) {
-        DetectAppLayerMultiRegister(name, alproto, SIG_FLAG_TOSERVER, 0, GetData, 2, 0);
+        DetectAppLayerMultiRegister(
+                name, alproto, SIG_FLAG_TOSERVER, progress, GetData, 2, progress);
     }
     if (toclient) {
-        DetectAppLayerMultiRegister(name, alproto, SIG_FLAG_TOCLIENT, 0, GetData, 2, 0);
+        DetectAppLayerMultiRegister(
+                name, alproto, SIG_FLAG_TOCLIENT, progress, GetData, 2, progress);
     }
     DetectBufferTypeSupportsMultiInstance(name);
     DetectBufferTypeSetDescriptionByName(name, desc);
     return DetectBufferTypeGetByName(name);
 }
 
+int DetectHelperMultiBufferMpmRegister(const char *name, const char *desc, AppProto alproto,
+        bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData)
+{
+    return DetectHelperMultiBufferProgressMpmRegister(
+            name, desc, alproto, toclient, toserver, GetData, 0);
+}
+
 int SCDetectHelperNewKeywordId(void)
 {
     if (DETECT_TBLSIZE_IDX >= DETECT_TBLSIZE) {
index 7c8044430850994a5fb338267faf2047321303f0..ed4de944d2f8e692ca9a4bf985d8d0ae18cd7813 100644 (file)
@@ -43,6 +43,8 @@ int DetectHelperBufferMpmRegister(const char *name, const char *desc, AppProto a
         bool toclient, bool toserver, InspectionBufferGetDataPtr GetData);
 int DetectHelperMultiBufferMpmRegister(const char *name, const char *desc, AppProto alproto,
         bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData);
+int DetectHelperMultiBufferProgressMpmRegister(const char *name, const char *desc, AppProto alproto,
+        bool toclient, bool toserver, InspectionMultiBufferGetDataPtr GetData, int progress);
 
 InspectionBuffer *DetectHelperGetMultiData(struct DetectEngineThreadCtx_ *det_ctx,
         const DetectEngineTransforms *transforms, Flow *f, const uint8_t flow_flags, void *txv,