Browse Source

Implement Proto{De,En}code for ConnectToPeerResponse.

wip
Titouan Rigoudy 7 years ago
parent
commit
db32e8a9e5
1 changed files with 73 additions and 4 deletions
  1. +73
    -4
      src/proto/server/response.rs

+ 73
- 4
src/proto/server/response.rs View File

@ -102,22 +102,31 @@ impl ReadFromPacket for ServerResponse {
impl ProtoEncode for ServerResponse { impl ProtoEncode for ServerResponse {
fn encode(&self, encoder: &mut ProtoEncoder) -> Result<(), io::Error> { fn encode(&self, encoder: &mut ProtoEncoder) -> Result<(), io::Error> {
match *self { match *self {
ServerResponse::ConnectToPeerResponse(ref response) => {
encoder.encode_u32(CODE_CONNECT_TO_PEER)?;
response.encode(encoder)?;
},
_ => { _ => {
unimplemented!(); unimplemented!();
}, },
}
};
Ok(())
} }
} }
impl ProtoDecode for ServerResponse { impl ProtoDecode for ServerResponse {
fn decode(decoder: &mut ProtoDecoder) -> Result<Self, DecodeError> { fn decode(decoder: &mut ProtoDecoder) -> Result<Self, DecodeError> {
let code = decoder.decode_u32()?; let code = decoder.decode_u32()?;
let request = match code {
let response = match code {
CODE_CONNECT_TO_PEER => {
let response = ConnectToPeerResponse::decode(decoder)?;
ServerResponse::ConnectToPeerResponse(response)
},
_ => { _ => {
return Err(DecodeError::UnknownCodeError(code)); return Err(DecodeError::UnknownCodeError(code));
}, },
}; };
Ok(request)
Ok(response)
} }
} }
@ -125,7 +134,7 @@ impl ProtoDecode for ServerResponse {
* CONNECT TO PEER * * CONNECT TO PEER *
*=================*/ *=================*/
#[derive(Debug)]
#[derive(Debug, Eq, PartialEq)]
pub struct ConnectToPeerResponse { pub struct ConnectToPeerResponse {
pub user_name: String, pub user_name: String,
pub connection_type: String, pub connection_type: String,
@ -155,6 +164,37 @@ impl ReadFromPacket for ConnectToPeerResponse {
} }
} }
impl ProtoEncode for ConnectToPeerResponse {
fn encode(&self, encoder: &mut ProtoEncoder) -> Result<(), io::Error> {
encoder.encode_string(&self.user_name)?;
encoder.encode_string(&self.connection_type)?;
encoder.encode_ipv4_addr(self.ip)?;
encoder.encode_u16(self.port)?;
encoder.encode_u32(self.token)?;
encoder.encode_bool(self.is_privileged)
}
}
impl ProtoDecode for ConnectToPeerResponse {
fn decode(decoder: &mut ProtoDecoder) -> Result<Self, DecodeError> {
let user_name = decoder.decode_string()?;
let connection_type = decoder.decode_string()?;
let ip = decoder.decode_ipv4_addr()?;
let port = decoder.decode_u16()?;
let token = decoder.decode_u32()?;
let is_privileged = decoder.decode_bool()?;
Ok(ConnectToPeerResponse {
user_name: user_name,
connection_type: connection_type,
ip: ip,
port: port,
token: token,
is_privileged: is_privileged,
})
}
}
/*=============* /*=============*
* FILE SEARCH * * FILE SEARCH *
*=============*/ *=============*/
@ -653,3 +693,32 @@ impl ReadFromPacket for WishlistIntervalResponse {
Ok(WishlistIntervalResponse { seconds: seconds }) Ok(WishlistIntervalResponse { seconds: seconds })
} }
} }
/*=======*
* TESTS *
*=======*/
#[cfg(test)]
mod tests {
use std::io;
use std::net;
use bytes::BytesMut;
use proto::{DecodeError, ProtoDecode, ProtoDecoder, ProtoEncode, ProtoEncoder};
use proto::codec::tests::roundtrip;
use super::*;
#[test]
fn roundtrip_connect_to_peer() {
roundtrip(ConnectToPeerResponse {
user_name: "alice".to_string(),
connection_type: "P".to_string(),
ip: net::Ipv4Addr::new(192, 168, 254, 1),
port: 1337,
token: 42,
is_privileged: true,
})
}
}

Loading…
Cancel
Save