]> git.ipfire.org Git - thirdparty/suricata.git/commitdiff
dcerpc/udp: support AppLayerTxData
authorVictor Julien <victor@inliniac.net>
Sun, 7 Jun 2020 14:36:58 +0000 (16:36 +0200)
committerVictor Julien <victor@inliniac.net>
Sat, 11 Jul 2020 06:37:40 +0000 (08:37 +0200)
rust/src/dcerpc/dcerpc_udp.rs
src/app-layer-dcerpc-udp.c

index bf696117879185c768f9d665e71a447a1890fde0..e4e5440d53bdf109bb6c2c13fcd2f914394a2170 100644 (file)
@@ -17,7 +17,7 @@
 
 use std::mem::transmute;
 
-use crate::applayer::AppLayerResult;
+use crate::applayer::{AppLayerResult, AppLayerTxData};
 use crate::core;
 use crate::dcerpc::dcerpc::{
     DCERPCRequest, DCERPCResponse, DCERPCUuidEntry, DCERPC_TYPE_REQUEST, DCERPC_TYPE_RESPONSE,
@@ -62,6 +62,7 @@ pub struct DCERPCUDPState {
     pub uuid_entry: Option<DCERPCUuidEntry>,
     pub uuid_list: Vec<DCERPCUuidEntry>,
     pub de_state: Option<*mut core::DetectEngineState>,
+    pub tx_data: AppLayerTxData,
 }
 
 impl DCERPCUDPState {
@@ -74,6 +75,7 @@ impl DCERPCUDPState {
             uuid_entry: None,
             uuid_list: Vec::new(),
             de_state: None,
+            tx_data: AppLayerTxData::new(),
         };
     }
 
@@ -314,6 +316,15 @@ pub extern "C" fn rs_dcerpc_udp_set_tx_detect_state(
     0
 }
 
+#[no_mangle]
+pub extern "C" fn rs_dcerpc_udp_get_tx_data(
+    tx: *mut std::os::raw::c_void)
+    -> *mut AppLayerTxData
+{
+    let tx = cast_pointer!(tx, DCERPCUDPState);
+    return &mut tx.tx_data;
+}
+
 #[no_mangle]
 pub extern "C" fn rs_dcerpc_udp_get_tx(
     state: *mut std::os::raw::c_void,
index abd3f16411e8b819cf190e240c3bfbfc891410f8..052cb6bc1f980a9b9458d21cbd89a8acf906d547 100644 (file)
@@ -142,6 +142,7 @@ void RegisterDCERPCUDPParsers(void)
                                                RustDCERPCUDPGetTxDetectState, RustDCERPCUDPSetTxDetectState);
 
         AppLayerParserRegisterGetTx(IPPROTO_UDP, ALPROTO_DCERPC, RustDCERPCUDPGetTx);
+        AppLayerParserRegisterTxDataFunc(IPPROTO_UDP, ALPROTO_DCERPC, rs_dcerpc_udp_get_tx_data);
 
         AppLayerParserRegisterGetTxCnt(IPPROTO_UDP, ALPROTO_DCERPC, RustDCERPCUDPGetTxCnt);