Browse Source

Implement Proto{De,En}code for PeerAddressResponse.

wip
Titouan Rigoudy 7 years ago
parent
commit
5dd29e2b3c
1 changed files with 39 additions and 0 deletions
  1. +39
    -0
      src/proto/server/response.rs

+ 39
- 0
src/proto/server/response.rs View File

@ -122,6 +122,10 @@ impl ProtoEncode for ServerResponse {
encoder.encode_u32(CODE_PARENT_SPEED_RATIO)?; encoder.encode_u32(CODE_PARENT_SPEED_RATIO)?;
response.encode(encoder)?; response.encode(encoder)?;
}, },
ServerResponse::PeerAddressResponse(ref response) => {
encoder.encode_u32(CODE_PEER_ADDRESS)?;
response.encode(encoder)?;
},
_ => { _ => {
unimplemented!(); unimplemented!();
}, },
@ -154,6 +158,10 @@ impl ProtoDecode for ServerResponse {
let response = ParentSpeedRatioResponse::decode(decoder)?; let response = ParentSpeedRatioResponse::decode(decoder)?;
ServerResponse::ParentSpeedRatioResponse(response) ServerResponse::ParentSpeedRatioResponse(response)
}, },
CODE_PEER_ADDRESS => {
let response = PeerAddressResponse::decode(decoder)?;
ServerResponse::PeerAddressResponse(response)
},
_ => { _ => {
return Err(DecodeError::UnknownCodeError(code)); return Err(DecodeError::UnknownCodeError(code));
}, },
@ -443,6 +451,28 @@ impl ReadFromPacket for PeerAddressResponse {
} }
} }
impl ProtoEncode for PeerAddressResponse {
fn encode(&self, encoder: &mut ProtoEncoder) -> Result<(), io::Error> {
encoder.encode_string(&self.username)?;
encoder.encode_ipv4_addr(self.ip)?;
encoder.encode_u16(self.port)
}
}
impl ProtoDecode for PeerAddressResponse {
fn decode(decoder: &mut ProtoDecoder) -> Result<Self, DecodeError> {
let username = decoder.decode_string()?;
let ip = decoder.decode_ipv4_addr()?;
let port = decoder.decode_u16()?;
Ok(Self {
username: username,
ip: ip,
port: port,
})
}
}
/*==================* /*==================*
* PRIVILEGED USERS * * PRIVILEGED USERS *
*==================*/ *==================*/
@ -887,4 +917,13 @@ mod tests {
value: 1337, value: 1337,
})) }))
} }
#[test]
fn roundtrip_peer_address() {
roundtrip(ServerResponse::PeerAddressResponse(PeerAddressResponse {
username: "alice".to_string(),
ip: net::Ipv4Addr::new(127, 0, 0, 1),
port: 1337,
}))
}
} }

Loading…
Cancel
Save