Skip to content

Commit f243f89

Browse files
committed
Formatting and clippy
1 parent 477c711 commit f243f89

File tree

3 files changed

+143
-46
lines changed

3 files changed

+143
-46
lines changed

core/src/protocols/stream/quic/frame.rs

+139-42
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,21 @@ use crate::protocols::stream::quic::QuicPacket;
1010
// Currently only includes those seen in the Init and Handshake packets
1111
#[derive(Debug, Serialize, Clone)]
1212
pub enum QuicFrame {
13-
Padding { length: usize },
13+
Padding {
14+
length: usize,
15+
},
1416
Ping,
15-
Ack { largest_acknowledged: u64, ack_delay: u64, first_ack_range: u64, ack_ranges: Vec<AckRange>, ecn_counts: Option<EcnCounts> },
16-
Crypto { offset: u64, data: Vec<u8> },
17+
Ack {
18+
largest_acknowledged: u64,
19+
ack_delay: u64,
20+
first_ack_range: u64,
21+
ack_ranges: Vec<AckRange>,
22+
ecn_counts: Option<EcnCounts>,
23+
},
24+
Crypto {
25+
offset: u64,
26+
data: Vec<u8>,
27+
},
1728
}
1829

1930
// ACK Range field, part of ACK frame
@@ -41,87 +52,173 @@ impl QuicFrame {
4152
// Iterate over plaintext payload bytes, this is a list of frames
4253
while offset < data.len() {
4354
// Parse frame type
44-
let frame_type_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
45-
let frame_type = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+frame_type_len)?)?;
55+
let frame_type_len =
56+
QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset + 1)?[0])?;
57+
let frame_type = QuicPacket::slice_to_u64(QuicPacket::access_data(
58+
data,
59+
offset,
60+
offset + frame_type_len,
61+
)?)?;
4662
offset += frame_type_len;
4763
match frame_type {
4864
0x00 => {
4965
// Handle PADDING
5066
let mut length = 0;
51-
while offset+length+1 < data.len() && QuicPacket::access_data(data, offset+length, offset+length+1)?[0] == 0 {
52-
length += 1;
67+
while offset + length + 1 < data.len()
68+
&& QuicPacket::access_data(data, offset + length, offset + length + 1)?[0]
69+
== 0
70+
{
71+
length += 1;
5372
}
5473
offset += length;
5574
length += frame_type_len; // Add the original frame type bytes to length. Wireshark also does this
56-
frames.push(QuicFrame::Padding { length: length });
75+
frames.push(QuicFrame::Padding { length });
5776
}
5877
0x01 => {
5978
// Handle PING
6079
frames.push(QuicFrame::Ping);
61-
},
80+
}
6281
0x02 | 0x03 => {
6382
// Handle ACK
6483
// Parse Largest Acknowledged
65-
let largest_acknowledged_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
66-
let largest_acknowledged = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+largest_acknowledged_len)?)?;
84+
let largest_acknowledged_len = QuicPacket::get_var_len(
85+
QuicPacket::access_data(data, offset, offset + 1)?[0],
86+
)?;
87+
let largest_acknowledged = QuicPacket::slice_to_u64(QuicPacket::access_data(
88+
data,
89+
offset,
90+
offset + largest_acknowledged_len,
91+
)?)?;
6792
offset += largest_acknowledged_len;
6893
// Parse ACK Delay
69-
let ack_delay_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
70-
let ack_delay = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+ack_delay_len)?)?;
94+
let ack_delay_len = QuicPacket::get_var_len(
95+
QuicPacket::access_data(data, offset, offset + 1)?[0],
96+
)?;
97+
let ack_delay = QuicPacket::slice_to_u64(QuicPacket::access_data(
98+
data,
99+
offset,
100+
offset + ack_delay_len,
101+
)?)?;
71102
offset += ack_delay_len;
72103
// Parse ACK Range Count
73-
let ack_range_count_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
74-
let ack_range_count = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+ack_range_count_len)?)?;
104+
let ack_range_count_len = QuicPacket::get_var_len(
105+
QuicPacket::access_data(data, offset, offset + 1)?[0],
106+
)?;
107+
let ack_range_count = QuicPacket::slice_to_u64(QuicPacket::access_data(
108+
data,
109+
offset,
110+
offset + ack_range_count_len,
111+
)?)?;
75112
offset += ack_range_count_len;
76113
// Parse First ACK Range
77-
let first_ack_range_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
78-
let first_ack_range = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+first_ack_range_len)?)?;
114+
let first_ack_range_len = QuicPacket::get_var_len(
115+
QuicPacket::access_data(data, offset, offset + 1)?[0],
116+
)?;
117+
let first_ack_range = QuicPacket::slice_to_u64(QuicPacket::access_data(
118+
data,
119+
offset,
120+
offset + first_ack_range_len,
121+
)?)?;
79122
// Parse ACK Range list field
80123
let mut ack_ranges = Vec::new();
81124
for _ in 0..ack_range_count {
82-
let gap_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
83-
let gap = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+gap_len)?)?;
125+
let gap_len = QuicPacket::get_var_len(
126+
QuicPacket::access_data(data, offset, offset + 1)?[0],
127+
)?;
128+
let gap = QuicPacket::slice_to_u64(QuicPacket::access_data(
129+
data,
130+
offset,
131+
offset + gap_len,
132+
)?)?;
84133
offset += gap_len;
85-
let ack_range_len_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
86-
let ack_range_len = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+ack_range_len_len)?)?;
134+
let ack_range_len_len = QuicPacket::get_var_len(
135+
QuicPacket::access_data(data, offset, offset + 1)?[0],
136+
)?;
137+
let ack_range_len = QuicPacket::slice_to_u64(QuicPacket::access_data(
138+
data,
139+
offset,
140+
offset + ack_range_len_len,
141+
)?)?;
87142
offset += ack_range_len_len;
88-
ack_ranges.push(AckRange{gap, ack_range_len})
143+
ack_ranges.push(AckRange { gap, ack_range_len })
89144
}
90145
// Parse ECN Counts, if the ACK frame contains them
91-
let ecn_counts: Option<EcnCounts>;
92-
if frame_type == 0x03 {
93-
let ect0_count_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
94-
let ect0_count = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+ect0_count_len)?)?;
146+
let ecn_counts: Option<EcnCounts> = if frame_type == 0x03 {
147+
let ect0_count_len = QuicPacket::get_var_len(
148+
QuicPacket::access_data(data, offset, offset + 1)?[0],
149+
)?;
150+
let ect0_count = QuicPacket::slice_to_u64(QuicPacket::access_data(
151+
data,
152+
offset,
153+
offset + ect0_count_len,
154+
)?)?;
95155
offset += ect0_count_len;
96-
let ect1_count_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
97-
let ect1_count = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+ect1_count_len)?)?;
156+
let ect1_count_len = QuicPacket::get_var_len(
157+
QuicPacket::access_data(data, offset, offset + 1)?[0],
158+
)?;
159+
let ect1_count = QuicPacket::slice_to_u64(QuicPacket::access_data(
160+
data,
161+
offset,
162+
offset + ect1_count_len,
163+
)?)?;
98164
offset += ect1_count_len;
99-
let ecn_ce_count_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
100-
let ecn_ce_count = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+ecn_ce_count_len)?)?;
101-
ecn_counts = Some(EcnCounts{ect0_count, ect1_count, ecn_ce_count});
165+
let ecn_ce_count_len = QuicPacket::get_var_len(
166+
QuicPacket::access_data(data, offset, offset + 1)?[0],
167+
)?;
168+
let ecn_ce_count = QuicPacket::slice_to_u64(QuicPacket::access_data(
169+
data,
170+
offset,
171+
offset + ecn_ce_count_len,
172+
)?)?;
173+
Some(EcnCounts {
174+
ect0_count,
175+
ect1_count,
176+
ecn_ce_count,
177+
})
102178
} else {
103-
ecn_counts = None;
104-
}
105-
frames.push(QuicFrame::Ack { largest_acknowledged, ack_delay, first_ack_range, ack_ranges, ecn_counts })
179+
None
180+
};
181+
frames.push(QuicFrame::Ack {
182+
largest_acknowledged,
183+
ack_delay,
184+
first_ack_range,
185+
ack_ranges,
186+
ecn_counts,
187+
})
106188
}
107189
0x06 => {
108190
// Handle CRYPTO frame
109191
// Parse offset
110-
let crypto_offset_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
111-
let crypto_offset = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+crypto_offset_len)?)?;
192+
let crypto_offset_len = QuicPacket::get_var_len(
193+
QuicPacket::access_data(data, offset, offset + 1)?[0],
194+
)?;
195+
let crypto_offset = QuicPacket::slice_to_u64(QuicPacket::access_data(
196+
data,
197+
offset,
198+
offset + crypto_offset_len,
199+
)?)?;
112200
offset += crypto_offset_len;
113201
// Parse length
114-
let crypto_len_len = QuicPacket::get_var_len(QuicPacket::access_data(data, offset, offset+1)?[0])?;
115-
let crypto_len = QuicPacket::slice_to_u64(QuicPacket::access_data(data, offset, offset+crypto_len_len)?)? as usize;
202+
let crypto_len_len = QuicPacket::get_var_len(
203+
QuicPacket::access_data(data, offset, offset + 1)?[0],
204+
)?;
205+
let crypto_len = QuicPacket::slice_to_u64(QuicPacket::access_data(
206+
data,
207+
offset,
208+
offset + crypto_len_len,
209+
)?)? as usize;
116210
offset += crypto_len_len;
117211
// Parse data
118-
let crypto_data = QuicPacket::access_data(data, offset, offset+crypto_len)?;
119-
frames.push(QuicFrame::Crypto{offset: crypto_offset, data: crypto_data.to_vec()});
212+
let crypto_data = QuicPacket::access_data(data, offset, offset + crypto_len)?;
213+
frames.push(QuicFrame::Crypto {
214+
offset: crypto_offset,
215+
data: crypto_data.to_vec(),
216+
});
120217
offset += crypto_len;
121-
},
218+
}
122219
_ => return Err(QuicError::UnknownFrameType),
123220
}
124221
}
125222
Ok(frames)
126223
}
127-
}
224+
}

core/src/protocols/stream/quic/mod.rs

+1-1
Original file line numberDiff line numberDiff line change
@@ -27,8 +27,8 @@ use frame::QuicFrame;
2727
use header::LongHeaderPacketType;
2828
use serde::Serialize;
2929
pub(crate) mod crypto;
30-
pub(crate) mod header;
3130
pub(crate) mod frame;
31+
pub(crate) mod header;
3232

3333
/// Errors Thrown throughout QUIC parsing. These are handled by retina and used to skip packets.
3434
#[derive(Debug)]

core/src/protocols/stream/quic/parser.rs

+3-3
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,14 @@
33
//! [Wireshark Quic Disector](https://gitlab.com/wireshark/wireshark/-/blob/master/epan/dissectors/packet-quic.c)
44
//!
55
use crate::protocols::stream::quic::crypto::calc_init_keys;
6+
use crate::protocols::stream::quic::frame::QuicFrame;
67
use crate::protocols::stream::quic::header::{
78
LongHeaderPacketType, QuicLongHeader, QuicShortHeader,
89
};
9-
use crate::protocols::stream::quic::{QuicPacket, QuicError};
10+
use crate::protocols::stream::quic::{QuicError, QuicPacket};
1011
use crate::protocols::stream::{
1112
ConnParsable, ConnState, L4Pdu, ParseResult, ProbeResult, Session, SessionData,
1213
};
13-
use crate::protocols::stream::quic::frame::QuicFrame;
1414
use byteorder::{BigEndian, ByteOrder};
1515
use std::collections::HashMap;
1616

@@ -357,7 +357,7 @@ impl QuicPacket {
357357
token,
358358
retry_tag,
359359
}),
360-
frames: frames,
360+
frames,
361361
})
362362
} else {
363363
// Short Header

0 commit comments

Comments
 (0)