diff --git a/rust/Makefile.am b/rust/Makefile.am index 7b1ff85ee3..48da425b90 100644 --- a/rust/Makefile.am +++ b/rust/Makefile.am @@ -144,6 +144,7 @@ if HAVE_BINDGEN --allowlist-function 'AppProto.*' \ --allowlist-function 'File.*' \ --allowlist-type 'SC.*' \ + --allowlist-type 'AppLayerEventType' \ --allowlist-function 'SC.*' \ --allowlist-var 'SC.*' \ --opaque-type 'SCConfNode' \ diff --git a/rust/src/core.rs b/rust/src/core.rs index d9f961c6d8..f3a226ac9f 100644 --- a/rust/src/core.rs +++ b/rust/src/core.rs @@ -23,13 +23,7 @@ use suricata_sys::sys::SCAppLayerParserTriggerRawStreamInspection; use crate::flow::Flow; -#[repr(C)] -#[derive(Debug, PartialEq, Eq, Clone, Copy)] -#[allow(non_camel_case_types)] -pub enum AppLayerEventType { - APP_LAYER_EVENT_TYPE_TRANSACTION = 1, - APP_LAYER_EVENT_TYPE_PACKET = 2, -} +pub use suricata_sys::sys::AppLayerEventType; pub const STREAM_START: u8 = 0x01; pub const STREAM_EOF: u8 = 0x02; diff --git a/rust/sys/src/sys.rs b/rust/sys/src/sys.rs index 7be2a12b42..db88a85ef8 100644 --- a/rust/sys/src/sys.rs +++ b/rust/sys/src/sys.rs @@ -925,14 +925,49 @@ extern "C" { extern "C" { pub fn AppProtoDetectListNames(); } +#[doc = " \\brief Data structure to store app layer decoder events."] +#[repr(C)] +#[derive(Debug, Copy, Clone)] +pub struct AppLayerDecoderEvents_ { + pub events: *mut u8, + pub cnt: u8, + pub events_buffer_size: u8, + pub event_last_logged: u8, +} +impl Default for AppLayerDecoderEvents_ { + fn default() -> Self { + let mut s = ::std::mem::MaybeUninit::::uninit(); + unsafe { + ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1); + s.assume_init() + } + } +} +#[doc = " \\brief Data structure to store app layer decoder events."] +pub type AppLayerDecoderEvents = AppLayerDecoderEvents_; +#[repr(u32)] +#[derive(Debug, Copy, Clone, Hash, PartialEq, Eq)] +pub enum AppLayerEventType { + APP_LAYER_EVENT_TYPE_TRANSACTION = 1, + APP_LAYER_EVENT_TYPE_PACKET = 2, +} +extern "C" { + pub fn SCAppLayerDecoderEventsSetEventRaw(sevents: *mut *mut AppLayerDecoderEvents, event: u8); +} +extern "C" { + pub fn SCAppLayerDecoderEventsFreeEvents(events: *mut *mut AppLayerDecoderEvents); +} +extern "C" { + pub fn SCAppLayerGetEventIdByName( + event_name: *const ::std::os::raw::c_char, table: *mut SCEnumCharMap, event_id: *mut u8, + ) -> ::std::os::raw::c_int; +} #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct AppLayerParserState_ { _unused: [u8; 0], } pub type AppLayerParserState = AppLayerParserState_; -#[doc = " \\brief Data structure to store app layer decoder events."] -pub type AppLayerDecoderEvents = AppLayerDecoderEvents_; #[repr(C)] #[derive(Debug, Copy, Clone)] pub struct File_ { @@ -1015,35 +1050,6 @@ extern "C" { proto_name: *const ::std::os::raw::c_char, proto_alias: *const ::std::os::raw::c_char, ) -> ::std::os::raw::c_int; } -#[doc = " \\brief Data structure to store app layer decoder events."] -#[repr(C)] -#[derive(Debug, Copy, Clone)] -pub struct AppLayerDecoderEvents_ { - pub events: *mut u8, - pub cnt: u8, - pub events_buffer_size: u8, - pub event_last_logged: u8, -} -impl Default for AppLayerDecoderEvents_ { - fn default() -> Self { - let mut s = ::std::mem::MaybeUninit::::uninit(); - unsafe { - ::std::ptr::write_bytes(s.as_mut_ptr(), 0, 1); - s.assume_init() - } - } -} -extern "C" { - pub fn SCAppLayerDecoderEventsSetEventRaw(sevents: *mut *mut AppLayerDecoderEvents, event: u8); -} -extern "C" { - pub fn SCAppLayerDecoderEventsFreeEvents(events: *mut *mut AppLayerDecoderEvents); -} -extern "C" { - pub fn SCAppLayerGetEventIdByName( - event_name: *const ::std::os::raw::c_char, table: *mut SCEnumCharMap, event_id: *mut u8, - ) -> ::std::os::raw::c_int; -} extern "C" { pub fn SCHTTP2MimicHttp1Request( arg1: *mut ::std::os::raw::c_void, arg2: *mut ::std::os::raw::c_void, diff --git a/src/app-layer-events.h b/src/app-layer-events.h index 6c81d31c3d..736e218a9f 100644 --- a/src/app-layer-events.h +++ b/src/app-layer-events.h @@ -30,7 +30,7 @@ /** * \brief Data structure to store app layer decoder events. */ -struct AppLayerDecoderEvents_ { +typedef struct AppLayerDecoderEvents_ { /* array of events */ uint8_t *events; /* number of events in the above buffer */ @@ -39,7 +39,7 @@ struct AppLayerDecoderEvents_ { uint8_t events_buffer_size; /* last logged */ uint8_t event_last_logged; -}; +} AppLayerDecoderEvents; /* app layer pkt level events */ enum { @@ -51,6 +51,11 @@ enum { APPLAYER_UNEXPECTED_PROTOCOL, }; +typedef enum AppLayerEventType { + APP_LAYER_EVENT_TYPE_TRANSACTION = 1, + APP_LAYER_EVENT_TYPE_PACKET = 2, +} AppLayerEventType; + int AppLayerGetPktEventInfo(const char *event_name, uint8_t *event_id); int AppLayerGetEventInfoById( diff --git a/src/app-layer-parser.h b/src/app-layer-parser.h index 4432cfa35d..36c66626aa 100644 --- a/src/app-layer-parser.h +++ b/src/app-layer-parser.h @@ -26,6 +26,7 @@ #define SURICATA_APP_LAYER_PARSER_H #include "app-layer-protos.h" +#include "app-layer-events.h" // Forward declarations for bindgen enum ConfigAction; typedef struct Flow_ Flow; @@ -40,7 +41,6 @@ typedef struct AppLayerResult AppLayerResult; typedef struct AppLayerGetTxIterTuple AppLayerGetTxIterTuple; typedef struct AppLayerGetFileState AppLayerGetFileState; typedef struct AppLayerTxData AppLayerTxData; -typedef enum AppLayerEventType AppLayerEventType; typedef struct AppLayerStateData AppLayerStateData; typedef struct AppLayerTxConfig AppLayerTxConfig; diff --git a/src/rust.h b/src/rust.h index a48c616a9a..10ff59349b 100644 --- a/src/rust.h +++ b/src/rust.h @@ -23,6 +23,7 @@ typedef struct HttpRangeContainerBlock HttpRangeContainerBlock; typedef struct Dataset Dataset; typedef struct DetectEngineState_ DetectEngineState; +typedef enum AppLayerEventType AppLayerEventType; // may be improved by smaller include #include "detect.h"