diff options
-rw-r--r-- | Swiften/Elements/StreamFeatures.h | 11 | ||||
-rw-r--r-- | Swiften/Parser/StreamFeaturesParser.cpp | 3 | ||||
-rw-r--r-- | Swiften/Parser/UnitTest/StreamFeaturesParserTest.cpp | 2 | ||||
-rw-r--r-- | Swiften/Serializer/StreamFeaturesSerializer.cpp | 3 | ||||
-rw-r--r-- | Swiften/Serializer/UnitTest/StreamFeaturesSerializerTest.cpp | 2 |
5 files changed, 20 insertions, 1 deletions
diff --git a/Swiften/Elements/StreamFeatures.h b/Swiften/Elements/StreamFeatures.h index ec27014..d8a6af7 100644 --- a/Swiften/Elements/StreamFeatures.h +++ b/Swiften/Elements/StreamFeatures.h @@ -17,7 +17,7 @@ namespace Swift { class StreamFeatures : public Element { public: - StreamFeatures() : hasStartTLS_(false), hasResourceBind_(false), hasSession_(false) {} + StreamFeatures() : hasStartTLS_(false), hasResourceBind_(false), hasSession_(false), hasStreamManagement_(false) {} void setHasStartTLS() { hasStartTLS_ = true; @@ -71,12 +71,21 @@ namespace Swift { return !authenticationMechanisms_.empty(); } + bool hasStreamManagement() const { + return hasStreamManagement_; + } + + void setHasStreamManagement() { + hasStreamManagement_ = true; + } + private: bool hasStartTLS_; std::vector<String> compressionMethods_; std::vector<String> authenticationMechanisms_; bool hasResourceBind_; bool hasSession_; + bool hasStreamManagement_; }; } diff --git a/Swiften/Parser/StreamFeaturesParser.cpp b/Swiften/Parser/StreamFeaturesParser.cpp index f9e5b05..02e70be 100644 --- a/Swiften/Parser/StreamFeaturesParser.cpp +++ b/Swiften/Parser/StreamFeaturesParser.cpp @@ -22,6 +22,9 @@ void StreamFeaturesParser::handleStartElement(const String& element, const Strin else if (element == "bind" && ns == "urn:ietf:params:xml:ns:xmpp-bind") { getElementGeneric()->setHasResourceBind(); } + else if (element == "sm" && ns == "urn:xmpp:sm:2") { + getElementGeneric()->setHasStreamManagement(); + } else if (element == "mechanisms" && ns == "urn:ietf:params:xml:ns:xmpp-sasl") { inMechanisms_ = true; } diff --git a/Swiften/Parser/UnitTest/StreamFeaturesParserTest.cpp b/Swiften/Parser/UnitTest/StreamFeaturesParserTest.cpp index 1c6fa50..7f5a398 100644 --- a/Swiften/Parser/UnitTest/StreamFeaturesParserTest.cpp +++ b/Swiften/Parser/UnitTest/StreamFeaturesParserTest.cpp @@ -38,6 +38,7 @@ class StreamFeaturesParserTest : public CppUnit::TestFixture "<mechanism>PLAIN</mechanism>" "</mechanisms>" "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"/>" + "<sm xmlns='urn:xmpp:sm:2'/>" "<session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/>" "</stream:features>")); @@ -50,6 +51,7 @@ class StreamFeaturesParserTest : public CppUnit::TestFixture CPPUNIT_ASSERT(element->hasAuthenticationMechanisms()); CPPUNIT_ASSERT(element->hasAuthenticationMechanism("DIGEST-MD5")); CPPUNIT_ASSERT(element->hasAuthenticationMechanism("PLAIN")); + CPPUNIT_ASSERT(element->hasStreamManagement()); } void testParse_Empty() { diff --git a/Swiften/Serializer/StreamFeaturesSerializer.cpp b/Swiften/Serializer/StreamFeaturesSerializer.cpp index 540a8d1..ec21983 100644 --- a/Swiften/Serializer/StreamFeaturesSerializer.cpp +++ b/Swiften/Serializer/StreamFeaturesSerializer.cpp @@ -46,6 +46,9 @@ String StreamFeaturesSerializer::serialize(boost::shared_ptr<Element> element) if (streamFeatures->hasSession()) { streamFeaturesElement.addNode(boost::shared_ptr<XMLElement>(new XMLElement("session", "urn:ietf:params:xml:ns:xmpp-session"))); } + if (streamFeatures->hasStreamManagement()) { + streamFeaturesElement.addNode(boost::shared_ptr<XMLElement>(new XMLElement("sm", "urn:xmpp:sm:2"))); + } return streamFeaturesElement.serialize(); } diff --git a/Swiften/Serializer/UnitTest/StreamFeaturesSerializerTest.cpp b/Swiften/Serializer/UnitTest/StreamFeaturesSerializerTest.cpp index 81eeacb..bd39bd8 100644 --- a/Swiften/Serializer/UnitTest/StreamFeaturesSerializerTest.cpp +++ b/Swiften/Serializer/UnitTest/StreamFeaturesSerializerTest.cpp @@ -31,6 +31,7 @@ class StreamFeaturesSerializerTest : public CppUnit::TestFixture streamFeatures->addAuthenticationMechanism("PLAIN"); streamFeatures->setHasResourceBind(); streamFeatures->setHasSession(); + streamFeatures->setHasStreamManagement(); CPPUNIT_ASSERT_EQUAL(String( "<stream:features>" @@ -45,6 +46,7 @@ class StreamFeaturesSerializerTest : public CppUnit::TestFixture "</mechanisms>" "<bind xmlns=\"urn:ietf:params:xml:ns:xmpp-bind\"/>" "<session xmlns=\"urn:ietf:params:xml:ns:xmpp-session\"/>" + "<sm xmlns=\"urn:xmpp:sm:2\"/>" "</stream:features>"), testling.serialize(streamFeatures)); } }; |