From d58321ebba16651bb693538d6936d9d34476cea8 Mon Sep 17 00:00:00 2001 From: Emmanuel Gil Peyrot Date: Sat, 7 Sep 2019 16:32:03 +0200 Subject: [PATCH] Add a new CSI parser (XEP-0352). --- ChangeLog | 1 + src/csi.rs | 59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/lib.rs | 3 +++ src/ns.rs | 3 +++ 4 files changed, 66 insertions(+) create mode 100644 src/csi.rs diff --git a/ChangeLog b/ChangeLog index 372ebdd..825c7a4 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,6 +1,7 @@ Version NEXT: DATE Emmanuel Gil Peyrot * New parsers/serialisers: + - Client State Indication (XEP-0352) - OpenPGP for XMPP (XEP-0373) * Breaking changes: - Presence constructors now take Into and assume Some. diff --git a/src/csi.rs b/src/csi.rs new file mode 100644 index 0000000..0465f94 --- /dev/null +++ b/src/csi.rs @@ -0,0 +1,59 @@ +// Copyright (c) 2019 Emmanuel Gil Peyrot +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +generate_empty_element!( + /// Stream:feature sent by the server to advertise it supports CSI. + Feature, "csi", CSI +); + +generate_empty_element!( + /// Client indicates it is inactive. + Inactive, "inactive", CSI +); + +generate_empty_element!( + /// Client indicates it is active again. + Active, "active", CSI +); + +#[cfg(test)] +mod tests { + use super::*; + use minidom::Element; + use std::convert::TryFrom; + use crate::ns; + + #[test] + fn test_size() { + assert_size!(Feature, 0); + assert_size!(Inactive, 0); + assert_size!(Active, 0); + } + + #[test] + fn parsing() { + let elem: Element = "".parse().unwrap(); + Feature::try_from(elem).unwrap(); + + let elem: Element = "".parse().unwrap(); + Inactive::try_from(elem).unwrap(); + + let elem: Element = "".parse().unwrap(); + Active::try_from(elem).unwrap(); + } + + #[test] + fn serialising() { + let elem: Element = Feature.into(); + assert!(elem.is("csi", ns::CSI)); + + let elem: Element = Inactive.into(); + assert!(elem.is("inactive", ns::CSI)); + + let elem: Element = Active.into(); + assert!(elem.is("active", ns::CSI)); + } +} diff --git a/src/lib.rs b/src/lib.rs index ea09f2f..da1af26 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -177,6 +177,9 @@ pub mod idle; /// XEP-0320: Use of DTLS-SRTP in Jingle Sessions pub mod jingle_dtls_srtp; +/// XEP-0352: Client State Indication +pub mod csi; + /// XEP-0353: Jingle Message Initiation pub mod jingle_message; diff --git a/src/ns.rs b/src/ns.rs index e5242b2..f594125 100644 --- a/src/ns.rs +++ b/src/ns.rs @@ -182,6 +182,9 @@ pub const IDLE: &str = "urn:xmpp:idle:1"; /// XEP-0320: Use of DTLS-SRTP in Jingle Sessions pub const JINGLE_DTLS: &str = "urn:xmpp:jingle:apps:dtls:0"; +/// XEP-0352: Client State Indication +pub const CSI: &str = "urn:xmpp:csi:0"; + /// XEP-0353: Jingle Message Initiation pub const JINGLE_MESSAGE: &str = "urn:xmpp:jingle-message:0";