]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
app-layer: extend AppLayerResult to add convenience
authorVictor Julien <victor@inliniac.net>
Sat, 14 Mar 2020 12:38:05 +0000 (13:38 +0100)
committerVictor Julien <victor@inliniac.net>
Tue, 17 Mar 2020 21:03:23 +0000 (22:03 +0100)
rust/src/applayer.rs
rust/src/applayertemplate/template.rs
rust/src/sip/sip.rs
rust/src/snmp/snmp.rs

index 6fca0f9ff0257bd1fe243fb71390203ce938882a..c4e7c2e8aa928923b163579cd9f30f11333a2c45 100644 (file)
@@ -63,6 +63,26 @@ impl AppLayerResult {
     }
 }
 
+impl From<bool> for AppLayerResult {
+    fn from(v: bool) -> Self {
+        if v == false {
+            Self::err()
+        } else {
+            Self::ok()
+        }
+    }
+}
+
+impl From<i32> for AppLayerResult {
+    fn from(v: i32) -> Self {
+        if v < 0 {
+            Self::err()
+        } else {
+            Self::ok()
+        }
+    }
+}
+
 /// Rust parser declaration
 #[repr(C)]
 pub struct RustParser {
index 7b80fbba5b449793194d161148d7fb2d7b36ee6c..93df4b34004c45fba1f499a1b30279b3c8b615d1 100644 (file)
@@ -316,10 +316,7 @@ pub extern "C" fn rs_template_parse_request(
 
     let state = cast_pointer!(state, TemplateState);
     let buf = build_slice!(input, input_len as usize);
-    if !state.parse_request(buf) {
-        return AppLayerResult::err();
-    }
-    AppLayerResult::ok()
+    state.parse_request(buf).into()
 }
 
 #[no_mangle]
@@ -341,10 +338,7 @@ pub extern "C" fn rs_template_parse_response(
     };
     let state = cast_pointer!(state, TemplateState);
     let buf = build_slice!(input, input_len as usize);
-    if !state.parse_response(buf) {
-        return AppLayerResult::err();
-    }
-    AppLayerResult::ok()
+    state.parse_response(buf).into()
 }
 
 #[no_mangle]
index 0733306b3e60b98da2482b69fee33106d9026c7a..cda829a49f7457974d6c621b84feb809b05d55c9 100755 (executable)
@@ -360,10 +360,7 @@ pub extern "C" fn rs_sip_parse_request(
 ) -> AppLayerResult {
     let buf = build_slice!(input, input_len as usize);
     let state = cast_pointer!(state, SIPState);
-    if !state.parse_request(buf) {
-        return AppLayerResult::err();
-    }
-    AppLayerResult::ok()
+    state.parse_request(buf).into()
 }
 
 #[no_mangle]
@@ -378,10 +375,7 @@ pub extern "C" fn rs_sip_parse_response(
 ) -> AppLayerResult {
     let buf = build_slice!(input, input_len as usize);
     let state = cast_pointer!(state, SIPState);
-    if !state.parse_response(buf) {
-        return AppLayerResult::err();
-    }
-    AppLayerResult::ok()
+    state.parse_response(buf).into()
 }
 
 const PARSER_NAME: &'static [u8] = b"sip\0";
index b555f15baf469cb3582246e8be58a798d1d96db3..fc59644e66c89844ca6a5215d530eb9ec04f3e4a 100644 (file)
@@ -325,10 +325,7 @@ pub extern "C" fn rs_snmp_parse_request(_flow: *const core::Flow,
                                        _flags: u8) -> AppLayerResult {
     let buf = build_slice!(input,input_len as usize);
     let state = cast_pointer!(state,SNMPState);
-    if state.parse(buf, STREAM_TOSERVER) < 0 {
-        return AppLayerResult::err();
-    }
-    AppLayerResult::ok()
+    state.parse(buf, STREAM_TOSERVER).into()
 }
 
 #[no_mangle]
@@ -341,10 +338,7 @@ pub extern "C" fn rs_snmp_parse_response(_flow: *const core::Flow,
                                        _flags: u8) -> AppLayerResult {
     let buf = build_slice!(input,input_len as usize);
     let state = cast_pointer!(state,SNMPState);
-    if state.parse(buf, STREAM_TOCLIENT) < 0 {
-        return AppLayerResult::err();
-    }
-    AppLayerResult::ok()
+    state.parse(buf, STREAM_TOCLIENT).into()
 }
 
 #[no_mangle]