]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
rust: bindgen AppLayerParserStateSetFlag
authorPhilippe Antoine <pantoine@oisf.net>
Mon, 9 Jun 2025 20:12:44 +0000 (22:12 +0200)
committerVictor Julien <victor@inliniac.net>
Tue, 10 Jun 2025 20:13:53 +0000 (22:13 +0200)
Ticket: 7667

rust/src/applayer.rs
rust/src/ssh/ssh.rs
rust/sys/src/sys.rs
src/app-layer-parser.c
src/app-layer-parser.h
src/app-layer-ssl.c
src/bindgen.h
src/flow-timeout.c
src/flow-worker.c
src/stream-tcp-reassemble.c
src/suricata-common.h

index 73728fdf7640643e0c98a05635f8ddc43e276e87..a11cc8b2f5a31f5e881cb05fd32ca4e26e4d93e5 100644 (file)
@@ -537,7 +537,6 @@ pub const APP_LAYER_TX_ACCEPT: u8 = BIT_U8!(4);
 
 /// cbindgen:ignore
 extern "C" {
-    pub fn AppLayerParserStateSetFlag(state: *mut c_void, flag: u16);
     pub fn AppLayerParserStateIssetFlag(state: *mut c_void, flag: u16) -> u16;
     pub fn AppLayerParserSetStreamDepth(ipproto: u8, alproto: AppProto, stream_depth: u32);
     pub fn AppLayerParserConfParserEnabled(ipproto: *const c_char, proto: *const c_char) -> c_int;
index fac31c2d716adf2be4903582113539ef63d3e547..62a5b155e2ff4f64ed71e8418adebe7a667ecff2 100644 (file)
@@ -24,7 +24,10 @@ use crate::frames::Frame;
 use nom7::Err;
 use std::ffi::CString;
 use std::sync::atomic::{AtomicBool, Ordering};
-use suricata_sys::sys::{AppProto, SCAppLayerProtoDetectConfProtoDetectionEnabled};
+use suricata_sys::sys::{
+    AppLayerParserState_, AppProto, SCAppLayerParserStateSetFlag,
+    SCAppLayerProtoDetectConfProtoDetectionEnabled,
+};
 
 #[repr(C)]
 #[derive(Debug, PartialEq, Eq, Clone, Copy)]
@@ -236,7 +239,11 @@ impl SSHState {
 
                                 if flags != 0 {
                                     unsafe {
-                                        AppLayerParserStateSetFlag(pstate, flags);
+                                        // TODO a later bindgen should prove that this cast is useless
+                                        SCAppLayerParserStateSetFlag(
+                                            pstate as *mut AppLayerParserState_,
+                                            flags,
+                                        );
                                     }
                                 }
                             }
index 845203cf8cdb07519eeb6dab070a77485cf63ff2..13470292a3a275ae9ddae991f5c4c3f40aa766de 100644 (file)
@@ -689,3 +689,12 @@ extern "C" {
         default_enabled: bool,
     ) -> ::std::os::raw::c_int;
 }
+#[repr(C)]
+#[derive(Debug, Copy, Clone)]
+pub struct AppLayerParserState_ {
+    _unused: [u8; 0],
+}
+pub type AppLayerParserState = AppLayerParserState_;
+extern "C" {
+    pub fn SCAppLayerParserStateSetFlag(pstate: *mut AppLayerParserState, flag: u16);
+}
index bd0f536c359fe882ab6909e1751a6d63febf78ac..75497284a8603db6e39f8ad8603b8df8f13dfeb1 100644 (file)
@@ -1216,10 +1216,10 @@ static inline void SetEOFFlags(AppLayerParserState *pstate, const uint8_t flags)
 {
     if ((flags & (STREAM_EOF|STREAM_TOSERVER)) == (STREAM_EOF|STREAM_TOSERVER)) {
         SCLogDebug("setting APP_LAYER_PARSER_EOF_TS");
-        AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_EOF_TS);
+        SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_EOF_TS);
     } else if ((flags & (STREAM_EOF|STREAM_TOCLIENT)) == (STREAM_EOF|STREAM_TOCLIENT)) {
         SCLogDebug("setting APP_LAYER_PARSER_EOF_TC");
-        AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_EOF_TC);
+        SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_EOF_TC);
     }
 }
 
@@ -1503,7 +1503,7 @@ void AppLayerParserSetEOF(AppLayerParserState *pstate)
         goto end;
 
     SCLogDebug("setting APP_LAYER_PARSER_EOF_TC and APP_LAYER_PARSER_EOF_TS");
-    AppLayerParserStateSetFlag(pstate, (APP_LAYER_PARSER_EOF_TS|APP_LAYER_PARSER_EOF_TC));
+    SCAppLayerParserStateSetFlag(pstate, (APP_LAYER_PARSER_EOF_TS | APP_LAYER_PARSER_EOF_TC));
 
  end:
     SCReturn;
@@ -1818,9 +1818,8 @@ void AppLayerParserRegisterProtocolParsers(void)
     ValidateParsers();
 }
 
-
-/* coccinelle: AppLayerParserStateSetFlag():2,2:APP_LAYER_PARSER_ */
-void AppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag)
+/* coccinelle: SCAppLayerParserStateSetFlag():2,2:APP_LAYER_PARSER_ */
+void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag)
 {
     SCEnter();
     pstate->flags |= flag;
index f1ef43691492b1e9e50fab6a549ff6ac240aa499..90075141e742cecb4913cde334fd06686defe30e 100644 (file)
@@ -33,6 +33,7 @@ typedef struct AppLayerParserState_ AppLayerParserState;
 typedef struct AppLayerDecoderEvents_ AppLayerDecoderEvents;
 typedef struct ThreadVars_ ThreadVars;
 typedef struct File_ File;
+typedef enum LoggerId LoggerId;
 // Forward declarations from rust
 typedef struct StreamSlice StreamSlice;
 typedef struct AppLayerResult AppLayerResult;
@@ -301,7 +302,7 @@ void AppLayerParserStateCleanup(const Flow *f, void *alstate, AppLayerParserStat
 
 void AppLayerParserRegisterProtocolParsers(void);
 
-void AppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag);
+void SCAppLayerParserStateSetFlag(AppLayerParserState *pstate, uint16_t flag);
 uint16_t AppLayerParserStateIssetFlag(AppLayerParserState *pstate, uint16_t flag);
 
 AppLayerParserState *AppLayerParserStateAlloc(void);
index 2af5ac514bddd244e615ae7844c621272b3261b1..3b3a91ba06f8d527285acb5ac9f287cb17d8acfc 100644 (file)
@@ -2334,13 +2334,12 @@ static struct SSLDecoderResult SSLv2Decode(uint8_t direction, SSLState *ssl_stat
                     (ssl_state->flags & SSL_AL_FLAG_SSL_SERVER_SSN_ENCRYPTED))
                 {
                     if (ssl_config.encrypt_mode != SSL_CNF_ENC_HANDLE_FULL) {
-                        AppLayerParserStateSetFlag(pstate,
-                                APP_LAYER_PARSER_NO_INSPECTION);
+                        SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_INSPECTION);
                     }
 
                     if (ssl_config.encrypt_mode == SSL_CNF_ENC_HANDLE_BYPASS) {
-                        AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_REASSEMBLY);
-                        AppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_BYPASS_READY);
+                        SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_REASSEMBLY);
+                        SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_BYPASS_READY);
                     }
                     SCLogDebug("SSLv2 No reassembly & inspection has been set");
                 }
@@ -2554,20 +2553,16 @@ static struct SSLDecoderResult SSLv3Decode(uint8_t direction, SSLState *ssl_stat
 
             if (ssl_config.encrypt_mode != SSL_CNF_ENC_HANDLE_FULL) {
                 SCLogDebug("setting APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD");
-                AppLayerParserStateSetFlag(pstate,
-                        APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD);
+                SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_INSPECTION_PAYLOAD);
             }
 
             /* Encrypted data, reassembly not asked, bypass asked, let's sacrifice
              * heartbeat lke inspection to be able to be able to bypass the flow */
             if (ssl_config.encrypt_mode == SSL_CNF_ENC_HANDLE_BYPASS) {
                 SCLogDebug("setting APP_LAYER_PARSER_NO_REASSEMBLY");
-                AppLayerParserStateSetFlag(pstate,
-                        APP_LAYER_PARSER_NO_REASSEMBLY);
-                AppLayerParserStateSetFlag(pstate,
-                        APP_LAYER_PARSER_NO_INSPECTION);
-                AppLayerParserStateSetFlag(pstate,
-                        APP_LAYER_PARSER_BYPASS_READY);
+                SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_REASSEMBLY);
+                SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_NO_INSPECTION);
+                SCAppLayerParserStateSetFlag(pstate, APP_LAYER_PARSER_BYPASS_READY);
             }
             break;
 
index 81e80ce8c6f85d996299ceee2c5fcf82d7cb65c3..d11078523795188dce7f8299126ccce9af4cf95a 100644 (file)
@@ -47,5 +47,6 @@
 #include "conf.h"
 
 #include "app-layer-detect-proto.h"
+#include "app-layer-parser.h"
 
 #endif
index 136fc31f7e721b9ca62f396d2cbc2c85c1603c1f..2e6099ab7fcbc15ee34ed80ec18925f56db4f0da 100644 (file)
@@ -246,11 +246,11 @@ static inline Packet *FlowPseudoPacketSetup(
 
     if (direction == 0) {
         if (f->alparser && !STREAM_HAS_SEEN_DATA(&ssn->client)) {
-            AppLayerParserStateSetFlag(f->alparser, APP_LAYER_PARSER_EOF_TS);
+            SCAppLayerParserStateSetFlag(f->alparser, APP_LAYER_PARSER_EOF_TS);
         }
     } else {
         if (f->alparser && !STREAM_HAS_SEEN_DATA(&ssn->server)) {
-            AppLayerParserStateSetFlag(f->alparser, APP_LAYER_PARSER_EOF_TC);
+            SCAppLayerParserStateSetFlag(f->alparser, APP_LAYER_PARSER_EOF_TC);
         }
     }
 
index 585dfa755b93259cd2f794d0be35874142d531af..92b21b0ba200ab9fa177096e8e35751ad2f6c2e9 100644 (file)
@@ -388,8 +388,8 @@ static inline void FlowWorkerStreamTCPUpdate(ThreadVars *tv, FlowWorkerThreadDat
         if (setting_nopayload) {
             FlowSetNoPayloadInspectionFlag(p->flow);
         }
-        AppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TS);
-        AppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TC);
+        SCAppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TS);
+        SCAppLayerParserStateSetFlag(p->flow->alparser, APP_LAYER_PARSER_EOF_TC);
     }
 
     /* Packets here can safely access p->flow as it's locked */
index 2c0c3ca7cc8965a6c6b907839d16dabf0e40e239..e530d30982a60293a4917b027000f53132355ead 100644 (file)
@@ -454,8 +454,8 @@ void StreamTcpDisableAppLayer(Flow *f)
     StreamTcpSetStreamFlagAppProtoDetectionCompleted(&ssn->server);
     StreamTcpDisableAppLayerReassembly(ssn);
     if (f->alparser) {
-        AppLayerParserStateSetFlag(f->alparser,
-                (APP_LAYER_PARSER_EOF_TS|APP_LAYER_PARSER_EOF_TC));
+        SCAppLayerParserStateSetFlag(
+                f->alparser, (APP_LAYER_PARSER_EOF_TS | APP_LAYER_PARSER_EOF_TC));
     }
 }
 
index 58a4ac4c43e3b10c9b74cc7a0f7cb215b862f79b..3bfe4255936b313e3aebb7c636326d4fa64b1de8 100644 (file)
@@ -474,7 +474,7 @@ typedef enum PacketProfileDetectId_ {
 } PacketProfileDetectId;
 
 /** \note update PacketProfileLoggerIdToString if you change anything here */
-typedef enum {
+typedef enum LoggerId {
     LOGGER_UNDEFINED,
 
     /* TX loggers first for low logger IDs */