Skip to content

Commit a82803e

Browse files
committed
examples/altemplate: update to use jsonbuilder from ffi crate
1 parent 0d45c1b commit a82803e

1 file changed

Lines changed: 5 additions & 35 deletions

File tree

  • examples/plugins/altemplate/src

examples/plugins/altemplate/src/log.rs

Lines changed: 5 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -18,46 +18,16 @@
1818
// same file as rust/src/applayertemplate/logger.rs except
1919
// different paths for use statements
2020
// open_object using altemplate instead of just template
21-
// Addition of SCJsonBuilderWrapper to look like a rust app-layer
22-
// even if we must use C API for SCJsonBuilder (because of its rust repr)
21+
// use the plugin-facing FFI JsonBuilder wrapper
2322

2423
use super::template::TemplateTransaction;
25-
use std::ffi::CString;
2624
use suricata::cast_pointer;
27-
use suricata_sys::sys::{SCJbClose, SCJbOpenObject, SCJbSetString, SCJsonBuilder};
25+
use suricata_ffi::jsonbuilder::{Error as JsonError, JsonBuilder};
26+
use suricata_sys::sys::SCJsonBuilder;
2827

2928
use std;
3029

31-
// syntax sugar around C API of SCJsonBuilder to feel like a normal app-layer in log_template
32-
pub struct SCJsonBuilderWrapper {
33-
inner: *mut SCJsonBuilder,
34-
}
35-
36-
impl SCJsonBuilderWrapper {
37-
fn close(&mut self) -> Result<(), ()> {
38-
if unsafe { !SCJbClose(self.inner) } {
39-
return Err(());
40-
}
41-
Ok(())
42-
}
43-
fn open_object(&mut self, key: &str) -> Result<(), ()> {
44-
let keyc = CString::new(key).unwrap();
45-
if unsafe { !SCJbOpenObject(self.inner, keyc.as_ptr()) } {
46-
return Err(());
47-
}
48-
Ok(())
49-
}
50-
fn set_string(&mut self, key: &str, val: &str) -> Result<(), ()> {
51-
let keyc = CString::new(key).unwrap();
52-
let valc = CString::new(val.escape_default().to_string()).unwrap();
53-
if unsafe { !SCJbSetString(self.inner, keyc.as_ptr(), valc.as_ptr()) } {
54-
return Err(());
55-
}
56-
Ok(())
57-
}
58-
}
59-
60-
fn log_template(tx: &TemplateTransaction, js: &mut SCJsonBuilderWrapper) -> Result<(), ()> {
30+
fn log_template(tx: &TemplateTransaction, js: &mut JsonBuilder) -> Result<(), JsonError> {
6131
js.open_object("altemplate")?;
6232
if let Some(ref request) = tx.request {
6333
js.set_string("request", request)?;
@@ -74,6 +44,6 @@ pub(super) unsafe extern "C" fn template_logger_log(
7444
) -> bool {
7545
let tx = cast_pointer!(tx, TemplateTransaction);
7646
let js = cast_pointer!(js, SCJsonBuilder);
77-
let mut js = SCJsonBuilderWrapper { inner: js };
47+
let mut js = JsonBuilder::from_raw(js);
7848
log_template(tx, &mut js).is_ok()
7949
}

0 commit comments

Comments
 (0)