From 823a370229ccb82ce5f010c75ef63ec1a11eaed3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20P=C4=99dzich?= Date: Wed, 26 Feb 2025 21:59:35 +0100 Subject: [PATCH] misc: repurpose udpclient to create raw packet dump files --- src/bin/udpclient.rs | 29 +++++++++++++++++++++++++---- 1 file changed, 25 insertions(+), 4 deletions(-) diff --git a/src/bin/udpclient.rs b/src/bin/udpclient.rs index 1f7f5ea..0fbbe50 100644 --- a/src/bin/udpclient.rs +++ b/src/bin/udpclient.rs @@ -1,18 +1,39 @@ use f1_game_packet_parser::parse; use std::error::Error; +use std::fs::File; +use std::io::{BufWriter, Write}; use std::net::UdpSocket; +use std::path::PathBuf; fn main() -> Result<(), Box> { let addr = "127.0.0.1:20777"; let socket = UdpSocket::bind(addr)?; - let mut buf = [0u8; 2048]; + let mut buf = [0u8; 1464]; println!("UDP client is listening on {}", addr); loop { - let (msg_len, _) = socket.recv_from(&mut buf)?; - let msg = &buf[..msg_len]; + let (amt, _) = socket.recv_from(&mut buf)?; - parse(msg)?; + let raw_data = &buf[..amt]; + let packet = parse(raw_data)?; + let file_path = PathBuf::from(format!( + "tests/data/{}-{:0>2}{}.bin", + packet.header.packet_format, + packet.header.packet_id as u8, + if let Some(event) = &packet.event { + format!("-{}", event.code) + } else { + "".to_string() + } + )); + + if !file_path.exists() { + let bin_file = File::create(file_path)?; + let mut writer = BufWriter::new(bin_file); + + writer.write_all(raw_data)?; + writer.flush()?; + } } }