From 5cab350f7839535e20cca9afd034b8e9e7cfef8a Mon Sep 17 00:00:00 2001 From: Titouan Rigoudy Date: Tue, 23 Feb 2016 12:25:07 +0100 Subject: [PATCH] Add PeerAddressResponse. --- src/proto/server/response.rs | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/src/proto/server/response.rs b/src/proto/server/response.rs index bf939ee..6953ecb 100644 --- a/src/proto/server/response.rs +++ b/src/proto/server/response.rs @@ -14,6 +14,7 @@ const MAX_PORT: u32 = (1 << 16) - 1; pub enum ServerResponse { LoginResponse(LoginResponse), ConnectToPeerResponse(ConnectToPeerResponse), + PeerAddressResponse(PeerAddressResponse), PrivilegedUsersResponse(PrivilegedUsersResponse), RoomListResponse(RoomListResponse), WishlistIntervalResponse(WishlistIntervalResponse), @@ -39,6 +40,11 @@ impl ServerResponse { try!(LoginResponse::from_packet(&mut packet)) ), + CODE_PEER_ADDRESS => + ServerResponse::PeerAddressResponse( + try!(PeerAddressResponse::from_packet(&mut packet)) + ), + CODE_PRIVILEGED_USERS => ServerResponse::PrivilegedUsersResponse( try!(PrivilegedUsersResponse::from_packet(&mut packet)) @@ -192,6 +198,34 @@ impl ParentSpeedRatioResponse { } } +/*==============* + * PEER ADDRESS * + *==============*/ + +#[derive(Debug)] +pub struct PeerAddressResponse { + username: String, + ip: net::Ipv4Addr, + port: u16, +} + +impl PeerAddressResponse { + fn from_packet(packet: &mut Packet) -> io::Result { + let username = try!(packet.read_str()); + let ip = net::Ipv4Addr::from(try!(packet.read_uint())); + let port = try!(packet.read_uint()); + if port > MAX_PORT { + return Err( + io::Error::new(io::ErrorKind::Other, "Invalid port number")); + } + Ok(PeerAddressResponse { + username: username, + ip: ip, + port: port as u16, + }) + } +} + /*==================* * PRIVILEGED USERS * *==================*/