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