From bf43011a43a6d542ab2f85aa61986340ed8254c8 Mon Sep 17 00:00:00 2001 From: Philippe Antoine Date: Wed, 24 Aug 2022 10:24:51 +0200 Subject: [PATCH] dcerpc: convert transaction list to vecdeque for UDP As was done for TCP in dfe76bb90 and d745d28d4 Ticket: #5518 --- rust/src/dcerpc/dcerpc_udp.rs | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/rust/src/dcerpc/dcerpc_udp.rs b/rust/src/dcerpc/dcerpc_udp.rs index 51e9a583d8..4648e9148e 100644 --- a/rust/src/dcerpc/dcerpc_udp.rs +++ b/rust/src/dcerpc/dcerpc_udp.rs @@ -15,7 +15,7 @@ * 02110-1301, USA. */ -use crate::applayer::*; +use crate::applayer::{self, *}; use crate::core::{self, Direction, DIR_BOTH}; use crate::dcerpc::dcerpc::{ DCERPCTransaction, DCERPC_TYPE_REQUEST, DCERPC_TYPE_RESPONSE, PFCL1_FRAG, PFCL1_LASTFRAG, @@ -24,6 +24,7 @@ use crate::dcerpc::dcerpc::{ use nom7::Err; use std; use std::ffi::CString; +use std::collections::VecDeque; use crate::dcerpc::parser; // Constant DCERPC UDP Header length @@ -55,7 +56,17 @@ pub struct DCERPCHdrUdp { #[derive(Default, Debug)] pub struct DCERPCUDPState { pub tx_id: u64, - pub transactions: Vec, + pub transactions: VecDeque, +} + +impl State for DCERPCUDPState { + fn get_transaction_count(&self) -> usize { + self.transactions.len() + } + + fn get_transaction_by_index(&self, index: usize) -> Option<&DCERPCTransaction> { + self.transactions.get(index) + } } impl DCERPCUDPState { @@ -137,8 +148,8 @@ impl DCERPCUDPState { if otx.is_none() { let ntx = self.create_tx(hdr); SCLogDebug!("new tx id {}, last tx_id {}, {} {}", ntx.id, self.tx_id, ntx.seqnum, ntx.activityuuid[0]); - self.transactions.push(ntx); - otx = self.transactions.last_mut(); + self.transactions.push_back(ntx); + otx = self.transactions.back_mut(); } if let Some(tx) = otx { @@ -347,7 +358,7 @@ pub unsafe extern "C" fn rs_dcerpc_udp_register_parser() { localstorage_new: None, localstorage_free: None, get_files: None, - get_tx_iterator: None, + get_tx_iterator: Some(applayer::state_get_tx_iterator::), get_tx_data: rs_dcerpc_udp_get_tx_data, apply_tx_config: None, flags: APP_LAYER_PARSER_OPT_UNIDIR_TXS, -- 2.47.2