Skip to content

Commit 2cb5790

Browse files
committed
rust/ffi: use Flow wrapper in flow callback signatures
1 parent 64f45c6 commit 2cb5790

3 files changed

Lines changed: 23 additions & 23 deletions

File tree

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

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -104,21 +104,21 @@ The Rust wrappers register closures or function items and return
104104

105105
.. code-block:: rust
106106
107-
use suricata_ffi::flow;
107+
use suricata_ffi::flow::{self, Flow};
108108
use suricata_ffi::packet::Packet;
109109
use suricata_ffi::SCLogNotice;
110-
use suricata_sys::sys::{Flow, ThreadVars};
110+
use suricata_sys::sys::ThreadVars;
111111
112-
fn flow_init(_tv: *mut ThreadVars, f: *mut Flow, _p: Option<Packet<'_>>) {
113-
SCLogNotice!("flow initialized: {:p}", f);
112+
fn flow_init(_tv: *mut ThreadVars, f: Flow<'_>, _p: Option<Packet<'_>>) {
113+
SCLogNotice!("flow initialized: {:p}", f.as_ptr());
114114
}
115115
116-
fn flow_update(_tv: *mut ThreadVars, f: *mut Flow, p: Option<Packet<'_>>) {
117-
SCLogNotice!("flow updated: {:p} has_packet: {}", f, p.is_some());
116+
fn flow_update(_tv: *mut ThreadVars, f: Flow<'_>, p: Option<Packet<'_>>) {
117+
SCLogNotice!("flow updated: {:p} has_packet: {}", f.as_ptr(), p.is_some());
118118
}
119119
120-
fn flow_finish(_tv: *mut ThreadVars, f: *mut Flow) {
121-
SCLogNotice!("flow finished: {:p}", f);
120+
fn flow_finish(_tv: *mut ThreadVars, f: Flow<'_>) {
121+
SCLogNotice!("flow finished: {:p}", f.as_ptr());
122122
}
123123
124124
fn register_flow_callbacks() -> Result<(), &'static str> {

examples/plugins/rust/src/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -68,24 +68,24 @@ fn log_eve_wrapped(
6868
Ok(())
6969
}
7070

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

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

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

9191
#[no_mangle]

rust/ffi/src/flow.rs

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -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, *mut RawFlow, Option<crate::packet::Packet<'a>>)
59+
F: for<'a> Fn(*mut ThreadVars, 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, *mut RawFlow, Option<crate::packet::Packet<'a>>)
91+
F: for<'a> Fn(*mut ThreadVars, 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: Fn(*mut ThreadVars, *mut RawFlow) + Send + Sync + 'static,
121+
F: for<'a> Fn(*mut ThreadVars, 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) } {
@@ -134,7 +134,7 @@ where
134134
unsafe extern "C" fn init_callback_wrapper<F>(
135135
tv: *mut ThreadVars, f: *mut RawFlow, p: *const RawPacket, user: *mut c_void,
136136
) where
137-
F: for<'a> Fn(*mut ThreadVars, *mut RawFlow, Option<crate::packet::Packet<'a>>)
137+
F: for<'a> Fn(*mut ThreadVars, 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, f, packet);
148+
callback(tv, Flow::from_ptr(f), packet);
149149
}
150150

151151
unsafe extern "C" fn update_callback_wrapper<F>(
152152
tv: *mut ThreadVars, f: *mut RawFlow, p: *mut RawPacket, user: *mut c_void,
153153
) where
154-
F: for<'a> Fn(*mut ThreadVars, *mut RawFlow, Option<crate::packet::Packet<'a>>)
154+
F: for<'a> Fn(*mut ThreadVars, 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, f, packet);
165+
callback(tv, Flow::from_ptr(f), packet);
166166
}
167167

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

0 commit comments

Comments
 (0)