diff options
Diffstat (limited to 'src/message')
| -rw-r--r-- | src/message/handshake/clientinitack.rs | 4 | ||||
| -rw-r--r-- | src/message/handshake/clientloginack.rs | 2 | ||||
| -rw-r--r-- | src/message/handshake/mod.rs | 2 | ||||
| -rw-r--r-- | src/message/handshake/types.rs | 49 |
4 files changed, 54 insertions, 3 deletions
diff --git a/src/message/handshake/clientinitack.rs b/src/message/handshake/clientinitack.rs index f881113..a259f9c 100644 --- a/src/message/handshake/clientinitack.rs +++ b/src/message/handshake/clientinitack.rs @@ -13,6 +13,8 @@ pub struct ClientInitAck { /// List of VariantMaps of info on available backends pub storage_backends: VariantList, /// List of VariantMaps of info on available authenticators + #[cfg(feature = "authenticators")] + #[cfg_attr(docsrs, doc(cfg(feature = "authenticators")))] pub authenticators: VariantList, /// List of supported extended features pub feature_list: Vec<String>, @@ -34,6 +36,7 @@ impl HandshakeSerialize for ClientInitAck { "StorageBackends".to_string(), Variant::VariantList(self.storage_backends.clone()), ); + #[cfg(feature = "authenticators")] values.insert( "Authenticators".to_string(), Variant::VariantList(self.authenticators.clone()), @@ -56,6 +59,7 @@ impl From<VariantMap> for ClientInitAck { input.get("StorageBackends").unwrap(), Variant::VariantList ), + #[cfg(feature = "authenticators")] authenticators: match_variant!( input.get("Authenticators").unwrap(), Variant::VariantList diff --git a/src/message/handshake/clientloginack.rs b/src/message/handshake/clientloginack.rs index e385a81..72dd6ac 100644 --- a/src/message/handshake/clientloginack.rs +++ b/src/message/handshake/clientloginack.rs @@ -24,7 +24,7 @@ impl HandshakeDeserialize for ClientLoginAck { fn parse(b: &[u8]) -> Result<(usize, Self), Error> { let (len, values): (usize, VariantMap) = HandshakeDeserialize::parse(b)?; - let msgtype = match_variant!(&values["MsgType"], Variant::StringUTF8); + let msgtype = match_variant!(&values["MsgType"], Variant::ByteArray); if msgtype == "ClientLogin" { return Ok((len, Self {})); diff --git a/src/message/handshake/mod.rs b/src/message/handshake/mod.rs index 9885012..c180c5e 100644 --- a/src/message/handshake/mod.rs +++ b/src/message/handshake/mod.rs @@ -5,6 +5,7 @@ mod clientlogin; mod clientloginack; mod clientloginreject; mod connack; +mod features; mod init; mod protocol; mod sessioninit; @@ -17,6 +18,7 @@ pub use clientlogin::*; pub use clientloginack::*; pub use clientloginreject::*; pub use connack::*; +pub use features::*; pub use init::*; pub use protocol::*; pub use sessioninit::*; diff --git a/src/message/handshake/types.rs b/src/message/handshake/types.rs index 04e1dd0..24d847b 100644 --- a/src/message/handshake/types.rs +++ b/src/message/handshake/types.rs @@ -6,9 +6,9 @@ use failure::Error; use crate::error::ProtocolError; use crate::primitive::Variant; +use crate::util; use crate::Deserialize; use crate::Serialize; -use crate::util; use crate::primitive::VariantMap; use crate::{HandshakeDeserialize, HandshakeSerialize}; @@ -46,7 +46,7 @@ impl HandshakeDeserialize for VariantMap { match name { Variant::String(x) => map.insert(x, value), - Variant::StringUTF8(x) => map.insert(x, value), + Variant::ByteArray(x) => map.insert(x, value), _ => bail!(ProtocolError::WrongVariant), }; } @@ -54,3 +54,48 @@ impl HandshakeDeserialize for VariantMap { return Ok((pos, map)); } } + +#[test] +pub fn serialize_variantmap() { + let mut test_variantmap = VariantMap::new(); + test_variantmap.insert("Configured".to_string(), Variant::bool(true)); + let bytes = [ + 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 0, 20, 0, 67, 0, 111, 0, 110, 0, 102, 0, 105, 0, 103, 0, + 117, 0, 114, 0, 101, 0, 100, 0, 0, 0, 1, 0, 1, + ] + .to_vec(); + assert_eq!( + HandshakeSerialize::serialize(&test_variantmap).unwrap(), + bytes + ); +} + +#[test] +pub fn deserialize_variantmap() { + let test_bytes: &[u8] = &[ + 0, 0, 0, 2, 0, 0, 0, 10, 0, 0, 0, 0, 20, 0, 67, 0, 111, 0, 110, 0, 102, 0, 105, 0, 103, 0, + 117, 0, 114, 0, 101, 0, 100, 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, + ]; + let mut test_variantmap = VariantMap::new(); + test_variantmap.insert("Configured".to_string(), Variant::bool(true)); + + let (len, res): (usize, VariantMap) = HandshakeDeserialize::parse(test_bytes).unwrap(); + + assert_eq!(len, 39); + assert_eq!(res, test_variantmap); +} + +#[test] +pub fn deserialize_variantmap_utf8() { + let test_bytes: &[u8] = &[ + 0, 0, 0, 2, 0, 0, 0, 12, 0, 0, 0, 0, 10, 67, 111, 110, 102, 105, 103, 117, 114, 101, 100, + 0, 0, 0, 1, 0, 1, 0, 0, 0, 1, + ]; + let mut test_variantmap = VariantMap::new(); + test_variantmap.insert("Configured".to_string(), Variant::bool(true)); + + let (len, res): (usize, VariantMap) = HandshakeDeserialize::parse(test_bytes).unwrap(); + + assert_eq!(len, 29); + assert_eq!(res, test_variantmap); +} |
