@@ -19,7 +19,7 @@ use std::ffi::CString;
1919use std:: os:: raw:: c_void;
2020
2121pub use suricata_sys:: sys:: {
22- Flow , Packet as RawPacket , SCEveUserCallbackFn , SCJsonBuilder , ThreadVars ,
22+ Flow as RawFlow , Packet as RawPacket , SCEveUserCallbackFn , SCJsonBuilder , ThreadVars ,
2323} ;
2424use suricata_sys:: sys:: {
2525 SCEveFileType , SCEveFileTypeDeinitFunc , SCEveFileTypeInitFunc , SCEveFileTypeThreadDeinitFunc ,
@@ -82,7 +82,7 @@ impl EveFileType {
8282/// The callback receives:
8383/// - `tv`: the `ThreadVars` for the thread performing the logging
8484/// - `p`: the `Packet`, or `None` if not available
85- /// - `f`: the `Flow`, if available
85+ /// - `f`: the `Flow`, or `None` if not available
8686/// - `jb`: the JSON builder for the current EVE record
8787///
8888/// This API is intended for plugin and library users.
@@ -115,7 +115,7 @@ where
115115 F : for < ' a > Fn (
116116 * mut ThreadVars ,
117117 Option < crate :: packet:: Packet < ' a > > ,
118- * mut Flow ,
118+ Option < crate :: flow :: Flow < ' a > > ,
119119 & mut crate :: jsonbuilder:: JsonBuilder ,
120120 ) -> Result < ( ) , crate :: jsonbuilder:: Error >
121121 + Send
@@ -136,13 +136,13 @@ where
136136/// Internal wrapper used to adapt the C EVE callback to a Rust
137137/// closure callback.
138138unsafe extern "C" fn callback_wrapper < F > (
139- tv : * mut ThreadVars , p : * const RawPacket , f : * mut Flow , jb : * mut SCJsonBuilder ,
139+ tv : * mut ThreadVars , p : * const RawPacket , f : * mut RawFlow , jb : * mut SCJsonBuilder ,
140140 user : * mut c_void ,
141141) where
142142 F : for < ' a > Fn (
143143 * mut ThreadVars ,
144144 Option < crate :: packet:: Packet < ' a > > ,
145- * mut Flow ,
145+ Option < crate :: flow :: Flow < ' a > > ,
146146 & mut crate :: jsonbuilder:: JsonBuilder ,
147147 ) -> Result < ( ) , crate :: jsonbuilder:: Error >
148148 + Send
@@ -157,7 +157,12 @@ unsafe extern "C" fn callback_wrapper<F>(
157157 } else {
158158 Some ( crate :: packet:: Packet :: from_ptr ( p) )
159159 } ;
160- if callback ( tv, packet, f, & mut jb) . is_err ( ) {
160+ let flow = if f. is_null ( ) {
161+ None
162+ } else {
163+ Some ( crate :: flow:: Flow :: from_ptr ( f) )
164+ } ;
165+ if callback ( tv, packet, flow, & mut jb) . is_err ( ) {
161166 let _ = jb. restore_mark ( & mark) ;
162167 }
163168}
0 commit comments