aboutsummaryrefslogtreecommitdiff
path: root/src/protocol/message
diff options
context:
space:
mode:
Diffstat (limited to 'src/protocol/message')
-rw-r--r--src/protocol/message/handshake.rs22
-rw-r--r--src/protocol/message/handshake/types.rs31
2 files changed, 25 insertions, 28 deletions
diff --git a/src/protocol/message/handshake.rs b/src/protocol/message/handshake.rs
index 918c424..b346d8e 100644
--- a/src/protocol/message/handshake.rs
+++ b/src/protocol/message/handshake.rs
@@ -46,7 +46,7 @@ pub struct ClientInitReject {
impl HandshakeSerialize for ClientInitReject {
fn serialize(&self) -> Vec<u8> {
let mut values: VariantMap = VariantMap::with_capacity(2);
- values.insert("MsgProtocol::Primitive".to_string(), Variant::String("ClientInitReject".to_string()));
+ values.insert("MsgType".to_string(), Variant::String("ClientInitReject".to_string()));
values.insert("ErrorString".to_string(), Variant::String(self.error_string.clone()));
return HandshakeSerialize::serialize(&values);
}
@@ -66,19 +66,19 @@ impl HandshakeDeserialize for ClientInitReject {
pub struct ClientInitAck {
pub core_features: u32, // Flags of supported legacy features
pub core_configured: bool, // If the core has already been configured
- pub backend_info: VariantList, // List of VariantMaps of info on available backends
- pub authenticator_info: VariantList, // List of VariantMaps of info on available authenticators
+ pub storage_backends: VariantList, // List of VariantMaps of info on available backends
+ pub authenticators: VariantList, // List of VariantMaps of info on available authenticators
pub feature_list: StringList, // List of supported extended features
}
impl HandshakeSerialize for ClientInitAck {
fn serialize(&self) -> Vec<u8> {
let mut values: VariantMap = VariantMap::with_capacity(2);
- values.insert("MsgProtocol::Primitive".to_string(), Variant::String("ClientInitAck".to_string()));
+ values.insert("MsgType".to_string(), Variant::String("ClientInitAck".to_string()));
values.insert("CoreFeatures".to_string(), Variant::u32(self.core_features));
- values.insert("CoreConfigured".to_string(), Variant::bool(self.core_configured));
- values.insert("BackendInfo".to_string(), Variant::VariantList(self.backend_info.clone()));
- values.insert("AuthenticatorInfo".to_string(), Variant::VariantList(self.authenticator_info.clone()));
+ values.insert("Configured".to_string(), Variant::bool(self.core_configured));
+ values.insert("StorageBackends".to_string(), Variant::VariantList(self.storage_backends.clone()));
+ values.insert("Authenticators".to_string(), Variant::VariantList(self.authenticators.clone()));
values.insert("FeatureList".to_string(), Variant::StringList(self.feature_list.clone()));
return HandshakeSerialize::serialize(&values);
}
@@ -89,10 +89,10 @@ impl HandshakeDeserialize for ClientInitAck {
let (len, values): (usize, VariantMap) = HandshakeDeserialize::parse(b);
return (len, Self {
- core_features: match_variant!(values, Variant::u32, "CoreFeatures"),
- core_configured: match_variant!(values, Variant::bool, "CoreConfigured"),
- backend_info: match_variant!(values, Variant::VariantList, "BackendInfo"),
- authenticator_info: match_variant!(values, Variant::VariantList, "AuthenticatorInfo"),
+ core_features: 0x00008000,
+ core_configured: match_variant!(values, Variant::bool, "Configured"),
+ storage_backends: match_variant!(values, Variant::VariantList, "StorageBackends"),
+ authenticators: match_variant!(values, Variant::VariantList, "Authenticators"),
feature_list: match_variant!(values, Variant::StringList, "FeatureList")
});
}
diff --git a/src/protocol/message/handshake/types.rs b/src/protocol/message/handshake/types.rs
index d6ea346..dadd058 100644
--- a/src/protocol/message/handshake/types.rs
+++ b/src/protocol/message/handshake/types.rs
@@ -1,6 +1,5 @@
use std::io::Read;
use std::vec::Vec;
-use std::net::TcpStream;
use std::convert::TryInto;
use std::collections::HashMap;
@@ -19,10 +18,9 @@ pub trait HandshakeDeserialize {
}
pub trait HandshakeQRead {
- fn read(stream: &mut std::net::TcpStream, buf: &mut [u8]) -> usize;
+ fn read<T: Read>(stream: &mut T, buf: &mut [u8]) -> usize;
}
-
pub type VariantMap = HashMap<String, Variant>;
impl HandshakeSerialize for VariantMap {
@@ -38,8 +36,7 @@ impl HandshakeSerialize for VariantMap {
util::insert_bytes(0, &mut res, &mut [0, 0, 0, 10]);
let len: i32 = res.len().try_into().unwrap();
- util::insert_bytes(0, &mut res, &mut ((len + 4).to_be_bytes()));
- println!("len: {:?}", len + 4);
+ util::insert_bytes(0, &mut res, &mut ((len).to_be_bytes()));
return res;
}
@@ -54,15 +51,17 @@ impl HandshakeDeserialize for VariantMap {
let ulen: usize = len as usize;
loop {
if (pos) >= ulen { break; }
- let (nlen, name) = Variant::parse(&b[(pos)..]);
+ let (nlen, name) = Variant::parse(&b[pos..]);
pos += nlen;
- let (vlen, value) = Variant::parse(&b[(pos)..]);
+ let (vlen, value) = Variant::parse(&b[pos..]);
pos += vlen;
- if let Variant::StringUTF8(x) = name {
- map.insert(x, value);
- }
+ match name {
+ Variant::String(x) => map.insert(x, value),
+ Variant::StringUTF8(x) => map.insert(x, value),
+ _ => panic!()
+ };
}
return (pos, map);
@@ -70,21 +69,19 @@ impl HandshakeDeserialize for VariantMap {
}
impl HandshakeQRead for VariantMap {
- fn read(mut s: &mut TcpStream, b: &mut [u8]) -> usize {
+ fn read<T: Read>(s: &mut T, b: &mut [u8]) -> usize {
s.read(&mut b[0..4]).unwrap();
let (_, len) = i32::parse(&b[0..4]);
- println!("len: {:?}", len);
// Read the 00 00 00 0a VariantType bytes and discard
- let mut tbuf = [0; 4];
- s.read(&mut tbuf).unwrap();
+ s.read(&mut b[4..8]).unwrap();
- let mut pos = 4;
+ let mut pos = 8;
let len: usize = len as usize;
loop {
if pos >= (len - 4) { break; }
- pos += Variant::read(&mut s, &mut b[pos..]);
- pos += Variant::read(&mut s, &mut b[(pos+4..)]);
+ pos += Variant::read(s, &mut b[pos..]);
+ pos += Variant::read(s, &mut b[pos..]);
}
return pos;