From 7369dbab19c47d28e3646482cd15622baad2786d Mon Sep 17 00:00:00 2001 From: Cain <75994858+cainthebest@users.noreply.github.com> Date: Wed, 7 Feb 2024 16:10:04 +0000 Subject: [PATCH] refactor: use slices where possable in pcap --- crates/lib/src/capture/pcap.rs | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) diff --git a/crates/lib/src/capture/pcap.rs b/crates/lib/src/capture/pcap.rs index 005196d..acb653f 100644 --- a/crates/lib/src/capture/pcap.rs +++ b/crates/lib/src/capture/pcap.rs @@ -45,14 +45,15 @@ impl Pcap { } pub(crate) fn write_transport_packet(&mut self, info: &CapturePacket, payload: &[u8]) { - let mut buf = vec![0; BUFFER_SIZE]; + let mut buffer_array: [u8; BUFFER_SIZE] = [0; BUFFER_SIZE]; + let buf: &mut [u8] = &mut buffer_array[..]; let (source_port, dest_port) = info.ports_by_direction(); match info.protocol { Protocol::Tcp => { let buf_size = { - let mut tcp = MutableTcpPacket::new(&mut buf).unwrap(); + let mut tcp = MutableTcpPacket::new(buf).unwrap(); tcp.set_source(source_port); tcp.set_destination(dest_port); tcp.set_payload(payload); @@ -86,7 +87,7 @@ impl Pcap { let mut info = info.clone(); let buf_size = { - let mut tcp = MutableTcpPacket::new(&mut buf).unwrap(); + let mut tcp = MutableTcpPacket::new(buf).unwrap(); tcp.set_source(dest_port); tcp.set_destination(source_port); tcp.set_data_offset(5); @@ -119,7 +120,7 @@ impl Pcap { } Protocol::Udp => { let buf_size = { - let mut udp = MutableUdpPacket::new(&mut buf).unwrap(); + let mut udp = MutableUdpPacket::new(buf).unwrap(); udp.set_source(source_port); udp.set_destination(dest_port); udp.set_length((payload.len() + HEADER_SIZE_UDP) as u16); @@ -216,7 +217,8 @@ impl Pcap { let mut info = info.clone(); info.direction = Direction::Send; - let mut buf = vec![0; PACKET_SIZE]; + let mut buffer_array: [u8; BUFFER_SIZE] = [0; BUFFER_SIZE]; + let buf: &mut [u8] = &mut buffer_array[..]; // Add a generated comment to all packets let options = vec![ pcap_file::pcapng::blocks::enhanced_packet::EnhancedPacketOption::Comment("Generated TCP handshake".into()), @@ -224,7 +226,7 @@ impl Pcap { // SYN let buf_size = { - let mut tcp = MutableTcpPacket::new(&mut buf).unwrap(); + let mut tcp = MutableTcpPacket::new(buf).unwrap(); self.state.send_seq = 500; tcp.set_sequence(self.state.send_seq); tcp.set_flags(TcpFlags::SYN); @@ -245,7 +247,7 @@ impl Pcap { // SYN + ACK info.direction = Direction::Receive; let buf_size = { - let mut tcp = MutableTcpPacket::new(&mut buf).unwrap(); + let mut tcp = MutableTcpPacket::new(buf).unwrap(); self.state.send_seq = self.state.send_seq.wrapping_add(1); tcp.set_acknowledgement(self.state.send_seq); self.state.rec_seq = 1000; @@ -268,7 +270,7 @@ impl Pcap { // ACK info.direction = Direction::Send; let buf_size = { - let mut tcp = MutableTcpPacket::new(&mut buf).unwrap(); + let mut tcp = MutableTcpPacket::new(buf).unwrap(); tcp.set_sequence(self.state.send_seq); self.state.rec_seq = self.state.rec_seq.wrapping_add(1); tcp.set_acknowledgement(self.state.rec_seq); @@ -291,11 +293,12 @@ impl Pcap { } pub(crate) fn send_tcp_fin(&mut self, info: &CapturePacket) { - let mut buf = vec![0; BUFFER_SIZE]; + let mut buffer_array: [u8; BUFFER_SIZE] = [0; BUFFER_SIZE]; + let buf: &mut [u8] = &mut buffer_array[..]; let (source_port, dest_port) = info.ports_by_direction(); let buf_size = { - let mut tcp = MutableTcpPacket::new(&mut buf).unwrap(); + let mut tcp = MutableTcpPacket::new(buf).unwrap(); tcp.set_source(source_port); tcp.set_destination(dest_port); tcp.set_data_offset(5);