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
2423use super :: template:: TemplateTransaction ;
25- use std:: ffi:: CString ;
2624use 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
2928use 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