|
|
@ -47,12 +47,14 @@ impl ProtoDecode for Message { |
|
|
CODE_PIERCE_FIREWALL => {
|
|
|
CODE_PIERCE_FIREWALL => {
|
|
|
let val = decoder.decode_u32()?;
|
|
|
let val = decoder.decode_u32()?;
|
|
|
Message::PierceFirewall(val)
|
|
|
Message::PierceFirewall(val)
|
|
|
}
|
|
|
|
|
|
|
|
|
},
|
|
|
CODE_PEER_INIT => {
|
|
|
CODE_PEER_INIT => {
|
|
|
let peer_init = PeerInit::decode(decoder)?;
|
|
|
let peer_init = PeerInit::decode(decoder)?;
|
|
|
Message::PeerInit(peer_init)
|
|
|
Message::PeerInit(peer_init)
|
|
|
}
|
|
|
|
|
|
code => Message::Unknown(code),
|
|
|
|
|
|
|
|
|
},
|
|
|
|
|
|
_ => {
|
|
|
|
|
|
return Err(DecodeError::UnknownCodeError(code));
|
|
|
|
|
|
},
|
|
|
};
|
|
|
};
|
|
|
Ok(message)
|
|
|
Ok(message)
|
|
|
}
|
|
|
}
|
|
|
@ -64,11 +66,11 @@ impl ProtoEncode for Message { |
|
|
Message::PierceFirewall(token) => {
|
|
|
Message::PierceFirewall(token) => {
|
|
|
encoder.encode_u32(CODE_PIERCE_FIREWALL)?;
|
|
|
encoder.encode_u32(CODE_PIERCE_FIREWALL)?;
|
|
|
encoder.encode_u32(token)?;
|
|
|
encoder.encode_u32(token)?;
|
|
|
}
|
|
|
|
|
|
|
|
|
},
|
|
|
Message::PeerInit(ref request) => {
|
|
|
Message::PeerInit(ref request) => {
|
|
|
encoder.encode_u32(CODE_PEER_INIT)?;
|
|
|
encoder.encode_u32(CODE_PEER_INIT)?;
|
|
|
request.encode(encoder)?;
|
|
|
request.encode(encoder)?;
|
|
|
}
|
|
|
|
|
|
|
|
|
},
|
|
|
Message::Unknown(_) => unreachable!(),
|
|
|
Message::Unknown(_) => unreachable!(),
|
|
|
}
|
|
|
}
|
|
|
Ok(())
|
|
|
Ok(())
|
|
|
@ -166,6 +168,16 @@ mod tests { |
|
|
assert_eq!(output, input);
|
|
|
assert_eq!(output, input);
|
|
|
}
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
|
|
|
#[should_panic]
|
|
|
|
|
|
fn invalid_code() {
|
|
|
|
|
|
let mut bytes = BytesMut::new();
|
|
|
|
|
|
ProtoEncoder::new(&mut bytes).encode_u32(1337).unwrap();
|
|
|
|
|
|
|
|
|
|
|
|
let mut cursor = io::Cursor::new(bytes);
|
|
|
|
|
|
Message::decode(&mut ProtoDecoder::new(&mut cursor)).unwrap();
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
#[test]
|
|
|
#[test]
|
|
|
fn roundtrip_pierce_firewall() {
|
|
|
fn roundtrip_pierce_firewall() {
|
|
|
roundtrip(Message::PierceFirewall(1337))
|
|
|
roundtrip(Message::PierceFirewall(1337))
|
|
|
|