diff --git a/rust/src/dcerpc/dcerpc_udp.rs b/rust/src/dcerpc/dcerpc_udp.rs index bf69611787..e4e5440d53 100644 --- a/rust/src/dcerpc/dcerpc_udp.rs +++ b/rust/src/dcerpc/dcerpc_udp.rs @@ -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, pub uuid_list: Vec, 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, diff --git a/src/app-layer-dcerpc-udp.c b/src/app-layer-dcerpc-udp.c index abd3f16411..052cb6bc1f 100644 --- a/src/app-layer-dcerpc-udp.c +++ b/src/app-layer-dcerpc-udp.c @@ -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);