diff --git a/src/bin/kawari-lobby.rs b/src/bin/kawari-lobby.rs index afce380..b7101bc 100644 --- a/src/bin/kawari-lobby.rs +++ b/src/bin/kawari-lobby.rs @@ -5,6 +5,7 @@ use kawari::lobby::ipc::{ ServerLobbyIpcSegment, ServerLobbyIpcType, }; use kawari::oodle::OodleNetwork; +use kawari::packet::ConnectionType; use kawari::packet::{PacketSegment, PacketState, SegmentType, send_keep_alive}; use kawari::{CONTENT_ID, WORLD_NAME}; use tokio::io::AsyncReadExt; @@ -214,6 +215,7 @@ async fn main() { send_keep_alive::( &mut connection.socket, &mut connection.state, + ConnectionType::Lobby, *id, *timestamp, ) diff --git a/src/bin/kawari-world.rs b/src/bin/kawari-world.rs index cb39bab..b426d86 100644 --- a/src/bin/kawari-world.rs +++ b/src/bin/kawari-world.rs @@ -1,5 +1,5 @@ use kawari::oodle::OodleNetwork; -use kawari::packet::{PacketSegment, PacketState, SegmentType, send_keep_alive}; +use kawari::packet::{ConnectionType, PacketSegment, PacketState, SegmentType, send_keep_alive}; use kawari::world::ipc::{ ClientZoneIpcData, GameMasterCommandType, ServerZoneIpcData, ServerZoneIpcSegment, ServerZoneIpcType, SocialListRequestType, @@ -594,6 +594,7 @@ async fn main() { send_keep_alive::( &mut connection.socket, &mut connection.state, + ConnectionType::Zone, *id, *timestamp, ) diff --git a/src/lobby/connection.rs b/src/lobby/connection.rs index 0d27a3b..13529e3 100644 --- a/src/lobby/connection.rs +++ b/src/lobby/connection.rs @@ -42,9 +42,10 @@ impl LobbyConnection { pub async fn send_segment(&mut self, segment: PacketSegment) { send_packet( &mut self.socket, - &[segment], &mut self.state, + ConnectionType::Lobby, CompressionType::Uncompressed, + &[segment], ) .await; } @@ -169,9 +170,10 @@ impl LobbyConnection { send_packet( &mut self.socket, - &packets, &mut self.state, + ConnectionType::Lobby, CompressionType::Uncompressed, + &packets, ) .await; diff --git a/src/packet/packet.rs b/src/packet/packet.rs index ce0adc1..ae6447a 100644 --- a/src/packet/packet.rs +++ b/src/packet/packet.rs @@ -133,9 +133,10 @@ fn dump(msg: &str, data: &[u8]) { pub async fn send_packet( socket: &mut TcpStream, - segments: &[PacketSegment], state: &mut PacketState, + connection_type: ConnectionType, compression_type: CompressionType, + segments: &[PacketSegment], ) { let (data, uncompressed_size) = compress(state, &compression_type, segments); let size = std::mem::size_of::() + data.len(); @@ -145,7 +146,7 @@ pub async fn send_packet( unk2: 0x75C4997B4D642A7F, // wtf? x2 timestamp: timestamp_msecs(), size: size as u32, - connection_type: ConnectionType::Lobby, + connection_type, segment_count: segments.len() as u16, unk3: 0, compression_type, @@ -202,6 +203,7 @@ pub async fn parse_packet( pub async fn send_keep_alive( socket: &mut TcpStream, state: &mut PacketState, + connection_type: ConnectionType, id: u32, timestamp: u32, ) { @@ -212,9 +214,10 @@ pub async fn send_keep_alive( }; send_packet( socket, - &[response_packet], state, + connection_type, CompressionType::Uncompressed, + &[response_packet], ) .await; } diff --git a/src/world/connection.rs b/src/world/connection.rs index c440879..2c163c0 100644 --- a/src/world/connection.rs +++ b/src/world/connection.rs @@ -38,9 +38,10 @@ impl ZoneConnection { pub async fn send_segment(&mut self, segment: PacketSegment) { send_packet( &mut self.socket, - &[segment], &mut self.state, + ConnectionType::Zone, CompressionType::Oodle, + &[segment], ) .await; } @@ -59,17 +60,11 @@ impl ZoneConnection { ..Default::default() }; - let response_packet = PacketSegment { + self.send_segment(PacketSegment { source_actor: self.player_id, target_actor: self.player_id, segment_type: SegmentType::Ipc { data: ipc }, - }; - send_packet( - &mut self.socket, - &[response_packet], - &mut self.state, - CompressionType::Oodle, - ) + }) .await; } }