Skip to content

Commit e86ac83

Browse files
committed
rust/ffi: use ThreadVars wrapper in flow callback signatures
1 parent a4258ff commit e86ac83

3 files changed

Lines changed: 20 additions & 20 deletions

File tree

doc/userguide/devguide/extending/flow-lifecycle-callbacks.rst

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -106,18 +106,18 @@ The Rust wrappers register closures or function items and return
106106
107107
use suricata_ffi::flow::{self, Flow};
108108
use suricata_ffi::packet::Packet;
109+
use suricata_ffi::threadvars::ThreadVars;
109110
use suricata_ffi::SCLogNotice;
110-
use suricata_sys::sys::ThreadVars;
111111
112-
fn flow_init(_tv: *mut ThreadVars, f: Flow<'_>, _p: Option<Packet<'_>>) {
112+
fn flow_init(_tv: ThreadVars<'_>, f: Flow<'_>, _p: Option<Packet<'_>>) {
113113
SCLogNotice!("flow initialized: {:p}", f.as_ptr());
114114
}
115115
116-
fn flow_update(_tv: *mut ThreadVars, f: Flow<'_>, p: Option<Packet<'_>>) {
116+
fn flow_update(_tv: ThreadVars<'_>, f: Flow<'_>, p: Option<Packet<'_>>) {
117117
SCLogNotice!("flow updated: {:p} has_packet: {}", f.as_ptr(), p.is_some());
118118
}
119119
120-
fn flow_finish(_tv: *mut ThreadVars, f: Flow<'_>) {
120+
fn flow_finish(_tv: ThreadVars<'_>, f: Flow<'_>) {
121121
SCLogNotice!("flow finished: {:p}", f.as_ptr());
122122
}
123123

examples/plugins/rust/src/mod.rs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -70,23 +70,23 @@ fn log_eve_wrapped(
7070
Ok(())
7171
}
7272

73-
fn log_flow_init(_tv: *mut RawThreadVars, f: Flow<'_>, p: Option<Packet<'_>>) {
73+
fn log_flow_init(_tv: ThreadVars<'_>, f: Flow<'_>, p: Option<Packet<'_>>) {
7474
SCLogNotice!(
7575
"rust example flow init callback: flow={:p}, has_packet={}",
7676
f.as_ptr(),
7777
p.is_some()
7878
);
7979
}
8080

81-
fn log_flow_update(_tv: *mut RawThreadVars, f: Flow<'_>, p: Option<Packet<'_>>) {
81+
fn log_flow_update(_tv: ThreadVars<'_>, f: Flow<'_>, p: Option<Packet<'_>>) {
8282
SCLogNotice!(
8383
"rust example flow update callback: flow={:p}, has_packet={}",
8484
f.as_ptr(),
8585
p.is_some()
8686
);
8787
}
8888

89-
fn log_flow_finish(_tv: *mut RawThreadVars, f: Flow<'_>) {
89+
fn log_flow_finish(_tv: ThreadVars<'_>, f: Flow<'_>) {
9090
SCLogNotice!("rust example flow finish callback: flow={:p}", f.as_ptr());
9191
}
9292

rust/ffi/src/flow.rs

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
use std::marker::PhantomData;
1919
use std::os::raw::c_void;
2020

21-
use suricata_sys::sys::{Flow as RawFlow, Packet as RawPacket, ThreadVars};
21+
use suricata_sys::sys::{Flow as RawFlow, Packet as RawPacket, ThreadVars as RawThreadVars};
2222
use suricata_sys::sys::{
2323
SCFlowRegisterFinishCallback, SCFlowRegisterInitCallback, SCFlowRegisterUpdateCallback,
2424
};
@@ -56,7 +56,7 @@ impl<'a> Flow<'a> {
5656
/// The callback must not panic.
5757
pub fn register_init_callback<F>(callback: F) -> Result<(), &'static str>
5858
where
59-
F: for<'a> Fn(*mut ThreadVars, Flow<'a>, Option<crate::packet::Packet<'a>>)
59+
F: for<'a> Fn(crate::threadvars::ThreadVars<'a>, Flow<'a>, Option<crate::packet::Packet<'a>>)
6060
+ Send
6161
+ Sync
6262
+ 'static,
@@ -88,7 +88,7 @@ where
8888
/// The callback must not panic.
8989
pub fn register_update_callback<F>(callback: F) -> Result<(), &'static str>
9090
where
91-
F: for<'a> Fn(*mut ThreadVars, Flow<'a>, Option<crate::packet::Packet<'a>>)
91+
F: for<'a> Fn(crate::threadvars::ThreadVars<'a>, Flow<'a>, Option<crate::packet::Packet<'a>>)
9292
+ Send
9393
+ Sync
9494
+ 'static,
@@ -118,7 +118,7 @@ where
118118
/// The callback must not panic.
119119
pub fn register_finish_callback<F>(callback: F) -> Result<(), &'static str>
120120
where
121-
F: for<'a> Fn(*mut ThreadVars, Flow<'a>) + Send + Sync + 'static,
121+
F: for<'a> Fn(crate::threadvars::ThreadVars<'a>, Flow<'a>) + Send + Sync + 'static,
122122
{
123123
let user = Box::into_raw(Box::new(callback)) as *mut c_void;
124124
if unsafe { SCFlowRegisterFinishCallback(Some(finish_callback_wrapper::<F>), user) } {
@@ -132,9 +132,9 @@ where
132132
}
133133

134134
unsafe extern "C" fn init_callback_wrapper<F>(
135-
tv: *mut ThreadVars, f: *mut RawFlow, p: *const RawPacket, user: *mut c_void,
135+
tv: *mut RawThreadVars, f: *mut RawFlow, p: *const RawPacket, user: *mut c_void,
136136
) where
137-
F: for<'a> Fn(*mut ThreadVars, Flow<'a>, Option<crate::packet::Packet<'a>>)
137+
F: for<'a> Fn(crate::threadvars::ThreadVars<'a>, Flow<'a>, Option<crate::packet::Packet<'a>>)
138138
+ Send
139139
+ Sync
140140
+ 'static,
@@ -145,13 +145,13 @@ unsafe extern "C" fn init_callback_wrapper<F>(
145145
} else {
146146
Some(crate::packet::Packet::from_ptr(p))
147147
};
148-
callback(tv, Flow::from_ptr(f), packet);
148+
callback(crate::threadvars::ThreadVars::from_ptr(tv), Flow::from_ptr(f), packet);
149149
}
150150

151151
unsafe extern "C" fn update_callback_wrapper<F>(
152-
tv: *mut ThreadVars, f: *mut RawFlow, p: *mut RawPacket, user: *mut c_void,
152+
tv: *mut RawThreadVars, f: *mut RawFlow, p: *mut RawPacket, user: *mut c_void,
153153
) where
154-
F: for<'a> Fn(*mut ThreadVars, Flow<'a>, Option<crate::packet::Packet<'a>>)
154+
F: for<'a> Fn(crate::threadvars::ThreadVars<'a>, Flow<'a>, Option<crate::packet::Packet<'a>>)
155155
+ Send
156156
+ Sync
157157
+ 'static,
@@ -162,14 +162,14 @@ unsafe extern "C" fn update_callback_wrapper<F>(
162162
} else {
163163
Some(crate::packet::Packet::from_ptr(p))
164164
};
165-
callback(tv, Flow::from_ptr(f), packet);
165+
callback(crate::threadvars::ThreadVars::from_ptr(tv), Flow::from_ptr(f), packet);
166166
}
167167

168168
unsafe extern "C" fn finish_callback_wrapper<F>(
169-
tv: *mut ThreadVars, f: *mut RawFlow, user: *mut c_void,
169+
tv: *mut RawThreadVars, f: *mut RawFlow, user: *mut c_void,
170170
) where
171-
F: for<'a> Fn(*mut ThreadVars, Flow<'a>) + Send + Sync + 'static,
171+
F: for<'a> Fn(crate::threadvars::ThreadVars<'a>, Flow<'a>) + Send + Sync + 'static,
172172
{
173173
let callback = &*(user as *const F);
174-
callback(tv, Flow::from_ptr(f));
174+
callback(crate::threadvars::ThreadVars::from_ptr(tv), Flow::from_ptr(f));
175175
}

0 commit comments

Comments
 (0)