From: Jason Ish Date: Mon, 2 May 2022 18:19:51 +0000 (-0600) Subject: dcerpc: convert transaction list to vecdeque X-Git-Tag: suricata-7.0.0-beta1~630 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=dfe76bb905409bf91345e972f2ab157bda51f003;p=thirdparty%2Fsuricata.git dcerpc: convert transaction list to vecdeque Allows for more efficient removal from front of the list. Ticket: #5271 --- diff --git a/rust/src/dcerpc/dcerpc.rs b/rust/src/dcerpc/dcerpc.rs index 3dac2a0a48..7aae120ffc 100644 --- a/rust/src/dcerpc/dcerpc.rs +++ b/rust/src/dcerpc/dcerpc.rs @@ -1,4 +1,4 @@ -/* Copyright (C) 2020 Open Information Security Foundation +/* Copyright (C) 2020-2022 Open Information Security Foundation * * You can copy, redistribute or modify this Program under the terms of * the GNU General Public License version 2 as published by the Free @@ -24,6 +24,7 @@ use nom7::{Err, IResult, Needed}; use std; use std::cmp; use std::ffi::CString; +use std::collections::VecDeque; // Constant DCERPC UDP Header length pub const DCERPC_HDR_LEN: u16 = 16; @@ -296,7 +297,7 @@ pub struct DCERPCState { pub header: Option, pub bind: Option, pub bindack: Option, - pub transactions: Vec, + pub transactions: VecDeque, pub buffer_ts: Vec, pub buffer_tc: Vec, pub pad: u8, @@ -687,7 +688,7 @@ impl DCERPCState { sc_app_layer_parser_trigger_raw_stream_reassembly(flow, Direction::ToServer as i32); } tx.frag_cnt_ts = 1; - self.transactions.push(tx); + self.transactions.push_back(tx); // Bytes parsed with `parse_dcerpc_bind` + (bytes parsed per bindctxitem [44] * number // of bindctxitems) (input.len() - leftover_bytes.len()) as i32 + retval * numctxitems as i32 @@ -867,7 +868,7 @@ impl DCERPCState { tx.ctxid = request.ctxid; tx.opnum = request.opnum; tx.first_request_seen = request.first_request_seen; - self.transactions.push(tx); + self.transactions.push_back(tx); } } let parsed = self.handle_common_stub( @@ -1010,8 +1011,8 @@ impl DCERPCState { } else { let mut tx = self.create_tx(current_call_id); tx.resp_cmd = x; - self.transactions.push(tx); - self.transactions.last_mut().unwrap() + self.transactions.push_back(tx); + self.transactions.back_mut().unwrap() }; tx.resp_done = true; tx.frag_cnt_tc = 1; @@ -1036,7 +1037,7 @@ impl DCERPCState { None => { let mut tx = self.create_tx(current_call_id); tx.resp_cmd = x; - self.transactions.push(tx); + self.transactions.push_back(tx); } }; retval = self.handle_common_stub(