diff --git a/parsers/ChangeLog b/parsers/ChangeLog index 8c667c32ef1aca8c4cb29611c5f2bf34d69e178d..2f621a29768b16b4d8dfc8e66b8aa20252e07e17 100644 --- a/parsers/ChangeLog +++ b/parsers/ChangeLog @@ -30,6 +30,8 @@ XXXX-YY-ZZ RELEASER - SASL Channel-Binding Type Capability (XEP-0440) - Stream Limits Advertisement (XEP-0478) - RFC 6120 stream errors + * Improvements: + - Add support for ` in XEP-0198 feature advertisment Version 0.21.0: 2024-07-25 Emmanuel Gil Peyrot diff --git a/parsers/src/sasl2.rs b/parsers/src/sasl2.rs index e3f3c404beb3f29f9ff2a231903ef1180ee25b96..af7722ca8fa4b7907345bd6d9849eb7fd96c1539 100644 --- a/parsers/src/sasl2.rs +++ b/parsers/src/sasl2.rs @@ -268,7 +268,7 @@ mod tests { let inline = auth.inline.unwrap(); assert_eq!(inline.bind2.unwrap().inline_features.len(), 0); - assert_eq!(inline.sm.unwrap(), StreamManagement); + assert_eq!(inline.sm.unwrap(), StreamManagement { optional: None }); assert_eq!(inline.payloads.len(), 0); } diff --git a/parsers/src/sm.rs b/parsers/src/sm.rs index 59fbb955fd37193ac5ed6d97bfc5ef93d5ef616a..97f94cf7961b1fb17ddf0464fc46195a1cd287a6 100644 --- a/parsers/src/sm.rs +++ b/parsers/src/sm.rs @@ -140,11 +140,22 @@ pub struct Resumed { pub previd: StreamId, } +/// Marker whose presence indicates that negotiating stream management is +/// optional. +#[derive(FromXml, AsXml, PartialEq, Debug, Clone)] +#[xml(namespace = ns::SM, name = "optional")] +pub struct Optional; + // TODO: add support for optional and required. /// Represents availability of Stream Management in ``. #[derive(FromXml, AsXml, PartialEq, Debug, Clone)] #[xml(namespace = ns::SM, name = "sm")] -pub struct StreamManagement; +pub struct StreamManagement { + // TODO: replace with #[xml(flag)] once we have it. + /// `` flag. + #[xml(child(default))] + pub optional: Option, +} #[cfg(test)] mod tests { @@ -163,7 +174,8 @@ mod tests { assert_size!(R, 0); assert_size!(Resume, 16); assert_size!(Resumed, 16); - assert_size!(StreamManagement, 0); + assert_size!(StreamManagement, 1); + assert_size!(Optional, 0); } #[cfg(target_pointer_width = "64")] @@ -178,7 +190,8 @@ mod tests { assert_size!(R, 0); assert_size!(Resume, 32); assert_size!(Resumed, 32); - assert_size!(StreamManagement, 0); + assert_size!(StreamManagement, 1); + assert_size!(Optional, 0); } #[test]