use std::mem::transmute;
-use crate::applayer::AppLayerResult;
+use crate::applayer::{AppLayerResult, AppLayerTxData};
use crate::core;
use crate::dcerpc::parser;
use crate::log::*;
pub query_completed: bool,
pub data_needed_for_dir: u8,
pub prev_dir: u8,
- pub detect_flags_ts: u64,
- pub detect_flags_tc: u64,
pub de_state: Option<*mut core::DetectEngineState>,
+ pub tx_data: AppLayerTxData,
}
impl DCERPCState {
query_completed: false,
data_needed_for_dir: core::STREAM_TOSERVER,
prev_dir: core::STREAM_TOSERVER,
- detect_flags_ts: 0,
- detect_flags_tc: 0,
de_state: None,
+ tx_data: AppLayerTxData::new(),
};
}
}
#[no_mangle]
-pub extern "C" fn rs_dcerpc_get_tx_detect_flags(vtx: *mut std::os::raw::c_void, dir: u8) -> u64 {
- let state = cast_pointer!(vtx, DCERPCState);
- if dir & core::STREAM_TOSERVER != 0 {
- return state.detect_flags_ts;
- }
- state.detect_flags_tc
-}
-
-#[no_mangle]
-pub extern "C" fn rs_dcerpc_set_tx_detect_flags(
- vtx: *mut std::os::raw::c_void,
- dir: u8,
- flags: u64,
-) {
- let state = cast_pointer!(vtx, DCERPCState);
- if dir & core::STREAM_TOSERVER != 0 {
- state.detect_flags_ts = flags;
- } else {
- state.detect_flags_tc = flags;
- }
+pub extern "C" fn rs_dcerpc_get_tx_data(
+ tx: *mut std::os::raw::c_void)
+ -> *mut AppLayerTxData
+{
+ let tx = cast_pointer!(tx, DCERPCState);
+ return &mut tx.tx_data;
}
#[no_mangle]
return rs_dcerpc_get_alstate_progress(tx, direction);
}
-static void DCERPCSetTxDetectFlags(void *vtx, uint8_t dir, uint64_t flags)
-{
- return rs_dcerpc_set_tx_detect_flags(vtx, dir, flags);
-}
-
-static uint64_t DCERPCGetTxDetectFlags(void *vtx, uint8_t dir)
-{
- return rs_dcerpc_get_tx_detect_flags(vtx, dir);
-}
-
static int DCERPCRegisterPatternsForProtocolDetection(void)
{
if (AppLayerProtoDetectPMRegisterPatternCS(IPPROTO_TCP, ALPROTO_DCERPC,
DCERPCGetTxDetectState, DCERPCSetTxDetectState);
AppLayerParserRegisterGetTx(IPPROTO_TCP, ALPROTO_DCERPC, DCERPCGetTx);
+ AppLayerParserRegisterTxDataFunc(IPPROTO_TCP, ALPROTO_DCERPC, rs_dcerpc_get_tx_data);
AppLayerParserRegisterGetTxCnt(IPPROTO_TCP, ALPROTO_DCERPC, DCERPCGetTxCnt);
AppLayerParserRegisterGetStateProgressCompletionStatus(ALPROTO_DCERPC,
DCERPCGetAlstateProgressCompletionStatus);
- AppLayerParserRegisterDetectFlagsFuncs(IPPROTO_TCP, ALPROTO_DCERPC,
- DCERPCGetTxDetectFlags, DCERPCSetTxDetectFlags);
} else {
SCLogInfo("Parsed disabled for %s protocol. Protocol detection"
"still on.", proto_name);