diff options
Diffstat (limited to 'Swiften')
-rw-r--r-- | Swiften/Serializer/GenericStanzaSerializer.h | 2 | ||||
-rw-r--r-- | Swiften/Serializer/IQSerializer.h | 9 | ||||
-rw-r--r-- | Swiften/Serializer/MessageSerializer.cpp | 6 | ||||
-rw-r--r-- | Swiften/Serializer/MessageSerializer.h | 6 | ||||
-rw-r--r-- | Swiften/Serializer/PresenceSerializer.cpp | 9 | ||||
-rw-r--r-- | Swiften/Serializer/PresenceSerializer.h | 7 | ||||
-rw-r--r-- | Swiften/Serializer/StanzaSerializer.cpp | 11 | ||||
-rw-r--r-- | Swiften/Serializer/StanzaSerializer.h | 5 | ||||
-rw-r--r-- | Swiften/Serializer/UnitTest/XMPPSerializerTest.cpp | 4 | ||||
-rw-r--r-- | Swiften/Serializer/XMPPSerializer.cpp | 8 | ||||
-rw-r--r-- | Swiften/Serializer/XMPPSerializer.h | 2 | ||||
-rw-r--r-- | Swiften/Session/BOSHSessionStream.cpp | 2 | ||||
-rw-r--r-- | Swiften/StreamStack/XMPPLayer.cpp | 6 | ||||
-rw-r--r-- | Swiften/StreamStack/XMPPLayer.h | 4 |
14 files changed, 51 insertions, 30 deletions
diff --git a/Swiften/Serializer/GenericStanzaSerializer.h b/Swiften/Serializer/GenericStanzaSerializer.h index a85d3ba..e8f3787 100644 --- a/Swiften/Serializer/GenericStanzaSerializer.h +++ b/Swiften/Serializer/GenericStanzaSerializer.h @@ -9,13 +9,13 @@ #include <Swiften/Serializer/StanzaSerializer.h> namespace Swift { template<typename STANZA_TYPE> class GenericStanzaSerializer : public StanzaSerializer { public: - GenericStanzaSerializer(const std::string& tag, PayloadSerializerCollection* payloadSerializers) : StanzaSerializer(tag, payloadSerializers) {} + GenericStanzaSerializer(const std::string& tag, PayloadSerializerCollection* payloadSerializers, const boost::optional<std::string>& explicitNS = boost::optional<std::string>()) : StanzaSerializer(tag, payloadSerializers, explicitNS) {} virtual bool canSerialize(boost::shared_ptr<ToplevelElement> element) const { return dynamic_cast<STANZA_TYPE*>(element.get()) != 0; } virtual void setStanzaSpecificAttributes( diff --git a/Swiften/Serializer/IQSerializer.h b/Swiften/Serializer/IQSerializer.h index 76a9cb7..7ebafa0 100644 --- a/Swiften/Serializer/IQSerializer.h +++ b/Swiften/Serializer/IQSerializer.h @@ -1,23 +1,26 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #pragma once #include <Swiften/Serializer/GenericStanzaSerializer.h> #include <Swiften/Elements/IQ.h> #include <Swiften/Serializer/XML/XMLElement.h> +#include <boost/optional.hpp> + namespace Swift { class IQSerializer : public GenericStanzaSerializer<IQ> { public: - IQSerializer(PayloadSerializerCollection* payloadSerializers) : - GenericStanzaSerializer<IQ>("iq", payloadSerializers) {} + IQSerializer(PayloadSerializerCollection* payloadSerializers, const boost::optional<std::string>& explicitNS = boost::optional<std::string>()) : + GenericStanzaSerializer<IQ>("iq", payloadSerializers, explicitNS) { + } private: virtual void setStanzaSpecificAttributesGeneric( boost::shared_ptr<IQ> iq, XMLElement& element) const { switch (iq->getType()) { diff --git a/Swiften/Serializer/MessageSerializer.cpp b/Swiften/Serializer/MessageSerializer.cpp index c221680..f944f9b 100644 --- a/Swiften/Serializer/MessageSerializer.cpp +++ b/Swiften/Serializer/MessageSerializer.cpp @@ -1,19 +1,19 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #include <Swiften/Serializer/MessageSerializer.h> #include <Swiften/Serializer/XML/XMLElement.h> namespace Swift { -MessageSerializer::MessageSerializer(PayloadSerializerCollection* payloadSerializers) : - GenericStanzaSerializer<Message>("message", payloadSerializers) { +MessageSerializer::MessageSerializer(PayloadSerializerCollection* payloadSerializers, const boost::optional<std::string>& explicitNS) : + GenericStanzaSerializer<Message>("message", payloadSerializers, explicitNS) { } void MessageSerializer::setStanzaSpecificAttributesGeneric( boost::shared_ptr<Message> message, XMLElement& element) const { if (message->getType() == Message::Chat) { diff --git a/Swiften/Serializer/MessageSerializer.h b/Swiften/Serializer/MessageSerializer.h index 8e9e941..dd8ca21 100644 --- a/Swiften/Serializer/MessageSerializer.h +++ b/Swiften/Serializer/MessageSerializer.h @@ -1,23 +1,25 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #pragma once #include <Swiften/Serializer/GenericStanzaSerializer.h> #include <Swiften/Elements/Message.h> +#include <boost/optional.hpp> + namespace Swift { class XMLElement; class MessageSerializer : public GenericStanzaSerializer<Message> { public: - MessageSerializer(PayloadSerializerCollection* payloadSerializers); + MessageSerializer(PayloadSerializerCollection* payloadSerializers, const boost::optional<std::string>& explitNS = boost::optional<std::string>()); private: void setStanzaSpecificAttributesGeneric( boost::shared_ptr<Message> message, XMLElement& element) const; }; diff --git a/Swiften/Serializer/PresenceSerializer.cpp b/Swiften/Serializer/PresenceSerializer.cpp index 20eda4b..a192bb5 100644 --- a/Swiften/Serializer/PresenceSerializer.cpp +++ b/Swiften/Serializer/PresenceSerializer.cpp @@ -1,21 +1,22 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #include <Swiften/Serializer/PresenceSerializer.h> #include <Swiften/Serializer/XML/XMLElement.h> - +#include <Swiften/Base/Log.h> #include <boost/shared_ptr.hpp> namespace Swift { -PresenceSerializer::PresenceSerializer(PayloadSerializerCollection* payloadSerializers) : - GenericStanzaSerializer<Presence>("presence", payloadSerializers) { +PresenceSerializer::PresenceSerializer(PayloadSerializerCollection* payloadSerializers, const boost::optional<std::string>& explicitNS) : + GenericStanzaSerializer<Presence>("presence", payloadSerializers, explicitNS) { + } void PresenceSerializer::setStanzaSpecificAttributesGeneric( boost::shared_ptr<Presence> presence, XMLElement& element) const { switch (presence->getType()) { diff --git a/Swiften/Serializer/PresenceSerializer.h b/Swiften/Serializer/PresenceSerializer.h index e5d9f30..b3ed721 100644 --- a/Swiften/Serializer/PresenceSerializer.h +++ b/Swiften/Serializer/PresenceSerializer.h @@ -1,21 +1,24 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #pragma once #include <Swiften/Serializer/GenericStanzaSerializer.h> #include <Swiften/Elements/Presence.h> +#include <boost/optional.hpp> + namespace Swift { class PresenceSerializer : public GenericStanzaSerializer<Presence> { public: - PresenceSerializer(PayloadSerializerCollection* payloadSerializers); + PresenceSerializer(PayloadSerializerCollection* payloadSerializers, const boost::optional<std::string>& explicitNS = boost::optional<std::string>()); + ~PresenceSerializer() {} private: virtual void setStanzaSpecificAttributesGeneric( boost::shared_ptr<Presence> presence, XMLElement& element) const; }; diff --git a/Swiften/Serializer/StanzaSerializer.cpp b/Swiften/Serializer/StanzaSerializer.cpp index 358e4b8..d097bbf 100644 --- a/Swiften/Serializer/StanzaSerializer.cpp +++ b/Swiften/Serializer/StanzaSerializer.cpp @@ -16,23 +16,28 @@ #include <Swiften/Serializer/PayloadSerializer.h> #include <Swiften/Serializer/PayloadSerializerCollection.h> #include <Swiften/Elements/Stanza.h> namespace Swift { -StanzaSerializer::StanzaSerializer(const std::string& tag, PayloadSerializerCollection* payloadSerializers) : tag_(tag), payloadSerializers_(payloadSerializers) { +StanzaSerializer::StanzaSerializer(const std::string& tag, PayloadSerializerCollection* payloadSerializers, const boost::optional<std::string>& explicitNS) : tag_(tag), payloadSerializers_(payloadSerializers), explicitDefaultNS_(explicitNS) { } SafeByteArray StanzaSerializer::serialize(boost::shared_ptr<ToplevelElement> element) const { - return serialize(element, ""); + if (explicitDefaultNS_) { + return serialize(element, explicitDefaultNS_.get()); + } + else { + return serialize(element, ""); + } } SafeByteArray StanzaSerializer::serialize(boost::shared_ptr<ToplevelElement> element, const std::string& xmlns) const { boost::shared_ptr<Stanza> stanza(boost::dynamic_pointer_cast<Stanza>(element)); - XMLElement stanzaElement(tag_, xmlns); + XMLElement stanzaElement(tag_, explicitDefaultNS_ ? explicitDefaultNS_.get() : xmlns); if (stanza->getFrom().isValid()) { stanzaElement.setAttribute("from", stanza->getFrom()); } if (stanza->getTo().isValid()) { stanzaElement.setAttribute("to", stanza->getTo()); } diff --git a/Swiften/Serializer/StanzaSerializer.h b/Swiften/Serializer/StanzaSerializer.h index 6b46670..766b58c 100644 --- a/Swiften/Serializer/StanzaSerializer.h +++ b/Swiften/Serializer/StanzaSerializer.h @@ -5,25 +5,28 @@ */ #pragma once #include <Swiften/Elements/Stanza.h> #include <Swiften/Serializer/ElementSerializer.h> + #include <string> +#include <boost/optional.hpp> namespace Swift { class PayloadSerializerCollection; class XMLElement; class StanzaSerializer : public ElementSerializer { public: - StanzaSerializer(const std::string& tag, PayloadSerializerCollection* payloadSerializers); + StanzaSerializer(const std::string& tag, PayloadSerializerCollection* payloadSerializers, const boost::optional<std::string>& explicitNS = boost::optional<std::string>()); virtual SafeByteArray serialize(boost::shared_ptr<ToplevelElement> element) const; virtual SafeByteArray serialize(boost::shared_ptr<ToplevelElement> element, const std::string& xmlns) const; virtual void setStanzaSpecificAttributes(boost::shared_ptr<ToplevelElement>, XMLElement&) const = 0; private: std::string tag_; PayloadSerializerCollection* payloadSerializers_; + boost::optional<std::string> explicitDefaultNS_; }; } diff --git a/Swiften/Serializer/UnitTest/XMPPSerializerTest.cpp b/Swiften/Serializer/UnitTest/XMPPSerializerTest.cpp index c0ab841..83daf36 100644 --- a/Swiften/Serializer/UnitTest/XMPPSerializerTest.cpp +++ b/Swiften/Serializer/UnitTest/XMPPSerializerTest.cpp @@ -1,8 +1,8 @@ /* - * Copyright (c) 2010 Remko Tronçon + * Copyright (c) 2010-2014 Remko Tronçon * Licensed under the GNU General Public License v3. * See Documentation/Licenses/GPLv3.txt for more information. */ #include <cppunit/extensions/HelperMacros.h> #include <cppunit/extensions/TestFactoryRegistry.h> @@ -62,13 +62,13 @@ class XMPPSerializerTest : public CppUnit::TestFixture { CPPUNIT_ASSERT_EQUAL(std::string("<?xml version=\"1.0\"?><stream:stream xmlns=\"jabber:server\" xmlns:stream=\"http://etherx.jabber.org/streams\" from=\"bla@foo.com\" to=\"foo.com\" id=\"myid\" version=\"0.99\">"), testling->serializeHeader(protocolHeader)); } private: XMPPSerializer* createSerializer(StreamType type) { - return new XMPPSerializer(payloadSerializerCollection, type); + return new XMPPSerializer(payloadSerializerCollection, type, false); } private: PayloadSerializerCollection* payloadSerializerCollection; }; diff --git a/Swiften/Serializer/XMPPSerializer.cpp b/Swiften/Serializer/XMPPSerializer.cpp index e3f43cd..1fb79e4 100644 --- a/Swiften/Serializer/XMPPSerializer.cpp +++ b/Swiften/Serializer/XMPPSerializer.cpp @@ -36,16 +36,16 @@ #include <Swiften/Serializer/PresenceSerializer.h> #include <Swiften/Serializer/IQSerializer.h> #include <Swiften/Serializer/ComponentHandshakeSerializer.h> namespace Swift { -XMPPSerializer::XMPPSerializer(PayloadSerializerCollection* payloadSerializers, StreamType type) : type_(type) { - serializers_.push_back(boost::make_shared<PresenceSerializer>(payloadSerializers)); - serializers_.push_back(boost::make_shared<IQSerializer>(payloadSerializers)); - serializers_.push_back(boost::make_shared<MessageSerializer>(payloadSerializers)); +XMPPSerializer::XMPPSerializer(PayloadSerializerCollection* payloadSerializers, StreamType type, bool setExplictNSonTopLevelElements) : type_(type) { + serializers_.push_back(boost::make_shared<PresenceSerializer>(payloadSerializers, setExplictNSonTopLevelElements ? getDefaultNamespace() : boost::optional<std::string>())); + serializers_.push_back(boost::make_shared<IQSerializer>(payloadSerializers, setExplictNSonTopLevelElements ? getDefaultNamespace() : boost::optional<std::string>())); + serializers_.push_back(boost::make_shared<MessageSerializer>(payloadSerializers, setExplictNSonTopLevelElements ? getDefaultNamespace() : boost::optional<std::string>())); serializers_.push_back(boost::make_shared<CompressRequestSerializer>()); serializers_.push_back(boost::make_shared<CompressFailureSerializer>()); serializers_.push_back(boost::make_shared<AuthRequestSerializer>()); serializers_.push_back(boost::make_shared<AuthFailureSerializer>()); serializers_.push_back(boost::make_shared<AuthSuccessSerializer>()); serializers_.push_back(boost::make_shared<AuthChallengeSerializer>()); diff --git a/Swiften/Serializer/XMPPSerializer.h b/Swiften/Serializer/XMPPSerializer.h index cbcdccb..d1aa386 100644 --- a/Swiften/Serializer/XMPPSerializer.h +++ b/Swiften/Serializer/XMPPSerializer.h @@ -19,13 +19,13 @@ namespace Swift { class PayloadSerializerCollection; class CompressRequestSerializer; class ProtocolHeader; class SWIFTEN_API XMPPSerializer { public: - XMPPSerializer(PayloadSerializerCollection*, StreamType type); + XMPPSerializer(PayloadSerializerCollection*, StreamType type, bool setExplictNSonTopLevelElements); std::string serializeHeader(const ProtocolHeader&) const; SafeByteArray serializeElement(boost::shared_ptr<ToplevelElement> stanza) const; std::string serializeFooter() const; private: diff --git a/Swiften/Session/BOSHSessionStream.cpp b/Swiften/Session/BOSHSessionStream.cpp index 8cdbdb0..63e35b8 100644 --- a/Swiften/Session/BOSHSessionStream.cpp +++ b/Swiften/Session/BOSHSessionStream.cpp @@ -53,13 +53,13 @@ BOSHSessionStream::BOSHSessionStream( connectionPool->onSessionTerminated.connect(boost::bind(&BOSHSessionStream::handlePoolSessionTerminated, this, _1)); connectionPool->onSessionStarted.connect(boost::bind(&BOSHSessionStream::handlePoolSessionStarted, this)); connectionPool->onXMPPDataRead.connect(boost::bind(&BOSHSessionStream::handlePoolXMPPDataRead, this, _1)); connectionPool->onBOSHDataRead.connect(boost::bind(&BOSHSessionStream::handlePoolBOSHDataRead, this, _1)); connectionPool->onBOSHDataWritten.connect(boost::bind(&BOSHSessionStream::handlePoolBOSHDataWritten, this, _1)); - xmppLayer = new XMPPLayer(payloadParserFactories, payloadSerializers, xmlParserFactory, ClientStreamType); + xmppLayer = new XMPPLayer(payloadParserFactories, payloadSerializers, xmlParserFactory, ClientStreamType, true); xmppLayer->onStreamStart.connect(boost::bind(&BOSHSessionStream::handleStreamStartReceived, this, _1)); xmppLayer->onElement.connect(boost::bind(&BOSHSessionStream::handleElementReceived, this, _1)); xmppLayer->onError.connect(boost::bind(&BOSHSessionStream::handleXMPPError, this)); xmppLayer->onWriteData.connect(boost::bind(&BOSHSessionStream::handleXMPPLayerDataWritten, this, _1)); available = true; diff --git a/Swiften/StreamStack/XMPPLayer.cpp b/Swiften/StreamStack/XMPPLayer.cpp index 59418a2..1f06b06 100644 --- a/Swiften/StreamStack/XMPPLayer.cpp +++ b/Swiften/StreamStack/XMPPLayer.cpp @@ -12,20 +12,22 @@ namespace Swift { XMPPLayer::XMPPLayer( PayloadParserFactoryCollection* payloadParserFactories, PayloadSerializerCollection* payloadSerializers, XMLParserFactory* xmlParserFactory, - StreamType streamType) : + StreamType streamType, + bool setExplictNSonTopLevelElements) : payloadParserFactories_(payloadParserFactories), payloadSerializers_(payloadSerializers), xmlParserFactory_(xmlParserFactory), + setExplictNSonTopLevelElements_(setExplictNSonTopLevelElements), resetParserAfterParse_(false), inParser_(false) { xmppParser_ = new XMPPParser(this, payloadParserFactories_, xmlParserFactory); - xmppSerializer_ = new XMPPSerializer(payloadSerializers_, streamType); + xmppSerializer_ = new XMPPSerializer(payloadSerializers_, streamType, setExplictNSonTopLevelElements); } XMPPLayer::~XMPPLayer() { delete xmppSerializer_; delete xmppParser_; } diff --git a/Swiften/StreamStack/XMPPLayer.h b/Swiften/StreamStack/XMPPLayer.h index bb0e498..13266e4 100644 --- a/Swiften/StreamStack/XMPPLayer.h +++ b/Swiften/StreamStack/XMPPLayer.h @@ -30,13 +30,14 @@ namespace Swift { friend class BOSHSessionStream; public: XMPPLayer( PayloadParserFactoryCollection* payloadParserFactories, PayloadSerializerCollection* payloadSerializers, XMLParserFactory* xmlParserFactory, - StreamType streamType); + StreamType streamType, + bool setExplictNSonTopLevelElements = false); ~XMPPLayer(); void writeHeader(const ProtocolHeader& header); void writeFooter(); void writeElement(boost::shared_ptr<ToplevelElement>); void writeData(const std::string& data); @@ -64,10 +65,11 @@ namespace Swift { private: PayloadParserFactoryCollection* payloadParserFactories_; XMPPParser* xmppParser_; PayloadSerializerCollection* payloadSerializers_; XMLParserFactory* xmlParserFactory_; XMPPSerializer* xmppSerializer_; + bool setExplictNSonTopLevelElements_; bool resetParserAfterParse_; bool inParser_; }; } |