disco: Split query and result.

This commit is contained in:
Emmanuel Gil Peyrot 2017-07-20 17:39:59 +01:00
commit 76a46559b8
4 changed files with 78 additions and 44 deletions

View file

@ -6,7 +6,7 @@
use std::convert::TryFrom;
use disco::{Feature, Identity, Disco};
use disco::{Feature, Identity, DiscoInfoResult, DiscoInfoQuery};
use data_forms::DataForm;
use hashes::{Hash, Algo};
@ -106,7 +106,7 @@ fn compute_extensions(extensions: &[DataForm]) -> Vec<u8> {
})
}
pub fn compute_disco(disco: &Disco) -> Vec<u8> {
pub fn compute_disco(disco: &DiscoInfoResult) -> Vec<u8> {
let features_string = compute_features(&disco.features);
let identities_string = compute_identities(&disco.identities);
let extensions_string = compute_extensions(&disco.extensions);
@ -172,12 +172,9 @@ pub fn hash_ecaps2(data: &[u8], algo: Algo) -> Result<Hash, String> {
})
}
pub fn query_ecaps2(hash: Hash) -> Disco {
Disco {
pub fn query_ecaps2(hash: Hash) -> DiscoInfoQuery {
DiscoInfoQuery {
node: Some(format!("{}#{}.{}", ns::ECAPS2, String::from(hash.algo), base64::encode(&hash.hash))),
identities: vec!(),
features: vec!(),
extensions: vec!(),
}
}
@ -211,7 +208,7 @@ mod tests {
#[test]
fn test_simple() {
let elem: Element = "<query xmlns='http://jabber.org/protocol/disco#info'><identity category='client' type='pc'/><feature var='http://jabber.org/protocol/disco#info'/></query>".parse().unwrap();
let disco = Disco::try_from(elem).unwrap();
let disco = DiscoInfoResult::try_from(elem).unwrap();
let ecaps2 = ecaps2::compute_disco(&disco);
assert_eq!(ecaps2.len(), 54);
}
@ -274,7 +271,7 @@ mod tests {
105, 109, 101, 31, 28, 99, 108, 105, 101, 110, 116, 31, 109, 111,
98, 105, 108, 101, 31, 31, 66, 111, 109, 98, 117, 115, 77, 111,
100, 31, 30, 28, 28];
let disco = Disco::try_from(elem).unwrap();
let disco = DiscoInfoResult::try_from(elem).unwrap();
let ecaps2 = ecaps2::compute_disco(&disco);
assert_eq!(ecaps2.len(), 0x1d9);
assert_eq!(ecaps2, expected);
@ -446,7 +443,7 @@ mod tests {
111, 110, 31, 48, 46, 49, 49, 46, 49, 45, 115, 118, 110, 45, 50,
48, 49, 49, 49, 50, 49, 54, 45, 109, 111, 100, 32, 40, 84, 99, 108,
47, 84, 107, 32, 56, 46,54, 98, 50, 41, 31, 30, 29, 28];
let disco = Disco::try_from(elem).unwrap();
let disco = DiscoInfoResult::try_from(elem).unwrap();
let ecaps2 = ecaps2::compute_disco(&disco);
assert_eq!(ecaps2.len(), 0x543);
assert_eq!(ecaps2, expected);