parse_header/
parse_header.rs1#![allow(missing_docs)]
2fn main() {
9 let packet: Vec<u8> = build_sample_initial();
12
13 match quic_parser::parse_initial(&packet) {
14 Ok(header) => {
15 println!("QUIC Initial packet parsed successfully");
16 println!(" version: {:#010x}", header.version);
17 println!(" dcid: {}", hex(header.dcid));
18 println!(" scid: {}", hex(header.scid));
19 println!(" token length: {}", header.token.len());
20 println!(" payload size: {} bytes", header.payload.len());
21 }
22 Err(e) => {
23 eprintln!("parse error: {e}");
24 }
25 }
26
27 if let Some(dcid) = quic_parser::peek_long_header_dcid(&packet) {
29 println!(" peeked dcid: {}", hex(dcid));
30 }
31}
32
33fn hex(bytes: &[u8]) -> String {
34 bytes.iter().map(|b| format!("{b:02x}")).collect()
35}
36
37fn build_sample_initial() -> Vec<u8> {
38 let mut pkt = Vec::new();
39
40 pkt.push(0xc0);
43
44 pkt.extend_from_slice(&0x0000_0001u32.to_be_bytes());
46
47 let dcid = [0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08];
49 pkt.push(dcid.len() as u8);
50 pkt.extend_from_slice(&dcid);
51
52 pkt.push(0x00);
54
55 pkt.push(0x00);
57
58 let payload_len: u8 = 24;
60 pkt.push(payload_len);
61
62 pkt.extend_from_slice(&vec![0xAA; payload_len as usize]);
64
65 pkt
66}