From 7116389afe41604ae69a9a60021a9dfb50957687 Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Tue, 11 Mar 2025 21:52:46 -0400 Subject: [PATCH] Fix size of initalization encryption packet, start testing for that --- src/bin/kawari-lobby.rs | 2 ++ src/packet.rs | 32 +++++++++++++++++++++++++++++++- 2 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/bin/kawari-lobby.rs b/src/bin/kawari-lobby.rs index b87c516..4fd978a 100644 --- a/src/bin/kawari-lobby.rs +++ b/src/bin/kawari-lobby.rs @@ -38,6 +38,8 @@ async fn main() { let n = read.read(&mut buf).await.expect("Failed to read data!"); if n != 0 { + tracing::info!("read {} bytes", n); + let (segments, _) = parse_packet(&buf[..n], &mut state).await; for segment in &segments { match &segment.segment_type { diff --git a/src/packet.rs b/src/packet.rs index ba3dddd..7de6762 100644 --- a/src/packet.rs +++ b/src/packet.rs @@ -42,11 +42,13 @@ pub enum SegmentType { #[brw(magic = 0x9u32)] InitializeEncryption { #[brw(pad_before = 36)] // empty - #[br(count = 64)] + #[brw(pad_size_to = 32)] + #[br(count = 32)] #[br(map = read_string)] #[bw(ignore)] phrase: String, + #[brw(pad_before = 32)] #[brw(pad_after = 512)] // empty key: [u8; 4], }, @@ -255,3 +257,31 @@ pub async fn send_keep_alive( }; send_packet(socket, &[response_packet], state).await; } + +#[cfg(test)] +mod tests { + use super::*; + + #[test] + fn test_packet_sizes() { + let packet_types = [SegmentType::InitializeEncryption { + phrase: String::new(), + key: [0; 4], + }]; + + for packet in &packet_types { + let mut cursor = Cursor::new(Vec::new()); + + let packet_segment = PacketSegment { + source_actor: 0, + target_actor: 0, + segment_type: packet.clone(), + }; + packet_segment.write_le(&mut cursor).unwrap(); + + let buffer = cursor.into_inner(); + + assert_eq!(buffer.len(), packet_segment.calc_size() as usize); + } + } +}