summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften')
-rw-r--r--Swiften/Serializer/GenericStanzaSerializer.h2
-rw-r--r--Swiften/Serializer/IQSerializer.h9
-rw-r--r--Swiften/Serializer/MessageSerializer.cpp6
-rw-r--r--Swiften/Serializer/MessageSerializer.h6
-rw-r--r--Swiften/Serializer/PresenceSerializer.cpp9
-rw-r--r--Swiften/Serializer/PresenceSerializer.h7
-rw-r--r--Swiften/Serializer/StanzaSerializer.cpp11
-rw-r--r--Swiften/Serializer/StanzaSerializer.h5
-rw-r--r--Swiften/Serializer/UnitTest/XMPPSerializerTest.cpp4
-rw-r--r--Swiften/Serializer/XMPPSerializer.cpp8
-rw-r--r--Swiften/Serializer/XMPPSerializer.h2
-rw-r--r--Swiften/Session/BOSHSessionStream.cpp2
-rw-r--r--Swiften/StreamStack/XMPPLayer.cpp6
-rw-r--r--Swiften/StreamStack/XMPPLayer.h4
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_;
};
}