1717
1818use std:: os:: raw:: c_void;
1919
20- use suricata_sys:: sys:: { Flow , Packet , ThreadVars } ;
2120use suricata_sys:: sys:: {
22- SCFlowRegisterFinishCallback , SCFlowRegisterInitCallback , SCFlowRegisterUpdateCallback ,
21+ self , Flow , Packet , SCFlowRegisterFinishCallback , SCFlowRegisterInitCallback ,
22+ SCFlowRegisterUpdateCallback ,
2323} ;
2424
25+ use crate :: thread:: ThreadVars ;
26+
2527/// Register a flow initialization callback.
2628///
2729/// The callback is invoked whenever Suricata initializes a flow. It receives:
@@ -37,7 +39,7 @@ use suricata_sys::sys::{
3739/// The callback must not panic.
3840pub fn register_init_callback < F > ( callback : F ) -> Result < ( ) , & ' static str >
3941where
40- F : Fn ( * mut ThreadVars , * mut Flow , * const Packet ) + Send + Sync + ' static ,
42+ F : Fn ( & ThreadVars , * mut Flow , * const Packet ) + Send + Sync + ' static ,
4143{
4244 let user = Box :: into_raw ( Box :: new ( callback) ) as * mut c_void ;
4345 if unsafe { SCFlowRegisterInitCallback ( Some ( init_callback_wrapper :: < F > ) , user) } {
6668/// The callback must not panic.
6769pub fn register_update_callback < F > ( callback : F ) -> Result < ( ) , & ' static str >
6870where
69- F : Fn ( * mut ThreadVars , * mut Flow , * mut Packet ) + Send + Sync + ' static ,
71+ F : Fn ( & ThreadVars , * mut Flow , * mut Packet ) + Send + Sync + ' static ,
7072{
7173 let user = Box :: into_raw ( Box :: new ( callback) ) as * mut c_void ;
7274 if unsafe { SCFlowRegisterUpdateCallback ( Some ( update_callback_wrapper :: < F > ) , user) } {
9395/// The callback must not panic.
9496pub fn register_finish_callback < F > ( callback : F ) -> Result < ( ) , & ' static str >
9597where
96- F : Fn ( * mut ThreadVars , * mut Flow ) + Send + Sync + ' static ,
98+ F : Fn ( & ThreadVars , * mut Flow ) + Send + Sync + ' static ,
9799{
98100 let user = Box :: into_raw ( Box :: new ( callback) ) as * mut c_void ;
99101 if unsafe { SCFlowRegisterFinishCallback ( Some ( finish_callback_wrapper :: < F > ) , user) } {
@@ -107,28 +109,31 @@ where
107109}
108110
109111unsafe extern "C" fn init_callback_wrapper < F > (
110- tv : * mut ThreadVars , f : * mut Flow , p : * const Packet , user : * mut c_void ,
112+ tv : * mut sys :: ThreadVars , f : * mut Flow , p : * const Packet , user : * mut c_void ,
111113) where
112- F : Fn ( * mut ThreadVars , * mut Flow , * const Packet ) + Send + Sync + ' static ,
114+ F : Fn ( & ThreadVars , * mut Flow , * const Packet ) + Send + Sync + ' static ,
113115{
114116 let callback = & * ( user as * const F ) ;
115- callback ( tv, f, p) ;
117+ let tv = ThreadVars :: from_ptr ( tv) ;
118+ callback ( & tv, f, p) ;
116119}
117120
118121unsafe extern "C" fn update_callback_wrapper < F > (
119- tv : * mut ThreadVars , f : * mut Flow , p : * mut Packet , user : * mut c_void ,
122+ tv : * mut sys :: ThreadVars , f : * mut Flow , p : * mut Packet , user : * mut c_void ,
120123) where
121- F : Fn ( * mut ThreadVars , * mut Flow , * mut Packet ) + Send + Sync + ' static ,
124+ F : Fn ( & ThreadVars , * mut Flow , * mut Packet ) + Send + Sync + ' static ,
122125{
123126 let callback = & * ( user as * const F ) ;
124- callback ( tv, f, p) ;
127+ let tv = ThreadVars :: from_ptr ( tv) ;
128+ callback ( & tv, f, p) ;
125129}
126130
127131unsafe extern "C" fn finish_callback_wrapper < F > (
128- tv : * mut ThreadVars , f : * mut Flow , user : * mut c_void ,
132+ tv : * mut sys :: ThreadVars , f : * mut Flow , user : * mut c_void ,
129133) where
130- F : Fn ( * mut ThreadVars , * mut Flow ) + Send + Sync + ' static ,
134+ F : Fn ( & ThreadVars , * mut Flow ) + Send + Sync + ' static ,
131135{
132136 let callback = & * ( user as * const F ) ;
133- callback ( tv, f) ;
137+ let tv = ThreadVars :: from_ptr ( tv) ;
138+ callback ( & tv, f) ;
134139}
0 commit comments