diff options
Diffstat (limited to 'Swiften/StreamStack')
| -rw-r--r-- | Swiften/StreamStack/CompressionLayer.h | 20 | ||||
| -rw-r--r-- | Swiften/StreamStack/ConnectionLayer.cpp | 21 | ||||
| -rw-r--r-- | Swiften/StreamStack/ConnectionLayer.h | 17 | ||||
| -rw-r--r-- | Swiften/StreamStack/HighLayer.cpp | 2 | ||||
| -rw-r--r-- | Swiften/StreamStack/HighLayer.h | 6 | ||||
| -rw-r--r-- | Swiften/StreamStack/LowLayer.cpp | 2 | ||||
| -rw-r--r-- | Swiften/StreamStack/LowLayer.h | 6 | ||||
| -rw-r--r-- | Swiften/StreamStack/SConscript | 1 | ||||
| -rw-r--r-- | Swiften/StreamStack/StreamLayer.h | 4 | ||||
| -rw-r--r-- | Swiften/StreamStack/StreamStack.cpp | 10 | ||||
| -rw-r--r-- | Swiften/StreamStack/StreamStack.h | 9 | ||||
| -rw-r--r-- | Swiften/StreamStack/TLSLayer.cpp | 10 | ||||
| -rw-r--r-- | Swiften/StreamStack/TLSLayer.h | 14 | ||||
| -rw-r--r-- | Swiften/StreamStack/UnitTest/StreamStackTest.cpp | 60 | ||||
| -rw-r--r-- | Swiften/StreamStack/UnitTest/XMPPLayerTest.cpp | 30 | ||||
| -rw-r--r-- | Swiften/StreamStack/WhitespacePingLayer.cpp | 12 | ||||
| -rw-r--r-- | Swiften/StreamStack/WhitespacePingLayer.h | 6 | ||||
| -rw-r--r-- | Swiften/StreamStack/XMPPLayer.cpp | 25 | ||||
| -rw-r--r-- | Swiften/StreamStack/XMPPLayer.h | 18 | 
19 files changed, 146 insertions, 127 deletions
diff --git a/Swiften/StreamStack/CompressionLayer.h b/Swiften/StreamStack/CompressionLayer.h index b8293a8..783cfca 100644 --- a/Swiften/StreamStack/CompressionLayer.h +++ b/Swiften/StreamStack/CompressionLayer.h @@ -7,13 +7,13 @@  #pragma once  #include <boost/noncopyable.hpp> -#include "Swiften/Base/boost_bsignals.h" +#include <Swiften/Base/boost_bsignals.h> -#include "Swiften/Base/ByteArray.h" -#include "Swiften/StreamStack/StreamLayer.h" -#include "Swiften/Compress/ZLibException.h" -#include "Swiften/Compress/ZLibCompressor.h" -#include "Swiften/Compress/ZLibDecompressor.h" +#include <Swiften/Base/SafeByteArray.h> +#include <Swiften/StreamStack/StreamLayer.h> +#include <Swiften/Compress/ZLibException.h> +#include <Swiften/Compress/ZLibCompressor.h> +#include <Swiften/Compress/ZLibDecompressor.h>  namespace Swift {  	class ZLibCompressor; @@ -23,20 +23,20 @@ namespace Swift {  		public:  			CompressionLayer() {} -			virtual void writeData(const ByteArray& data) { +			virtual void writeData(const SafeByteArray& data) {  				try {  					writeDataToChildLayer(compressor_.process(data));  				} -				catch (const ZLibException& e) { +				catch (const ZLibException&) {  					onError();  				}  			} -			virtual void handleDataRead(const ByteArray& data) { +			virtual void handleDataRead(const SafeByteArray& data) {  				try {  					writeDataToParentLayer(decompressor_.process(data));  				} -				catch (const ZLibException& e) { +				catch (const ZLibException&) {  					onError();  				}  			} diff --git a/Swiften/StreamStack/ConnectionLayer.cpp b/Swiften/StreamStack/ConnectionLayer.cpp new file mode 100644 index 0000000..00b4289 --- /dev/null +++ b/Swiften/StreamStack/ConnectionLayer.cpp @@ -0,0 +1,21 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include <Swiften/StreamStack/ConnectionLayer.h> +#include <boost/bind.hpp> + +namespace Swift { + +ConnectionLayer::ConnectionLayer(boost::shared_ptr<Connection> connection) : connection(connection) { +	connection->onDataRead.connect(boost::bind(&ConnectionLayer::writeDataToParentLayer, this, _1)); +} + +ConnectionLayer::~ConnectionLayer() { +	connection->onDataRead.disconnect(boost::bind(&ConnectionLayer::writeDataToParentLayer, this, _1)); +} + + +} diff --git a/Swiften/StreamStack/ConnectionLayer.h b/Swiften/StreamStack/ConnectionLayer.h index 0da0900..8ccd33c 100644 --- a/Swiften/StreamStack/ConnectionLayer.h +++ b/Swiften/StreamStack/ConnectionLayer.h @@ -6,25 +6,18 @@  #pragma once -#include "Swiften/Base/boost_bsignals.h"  #include <boost/shared_ptr.hpp> -#include <boost/bind.hpp> -#include "Swiften/StreamStack/LowLayer.h" -#include "Swiften/Network/Connection.h" +#include <Swiften/StreamStack/LowLayer.h> +#include <Swiften/Network/Connection.h>  namespace Swift {  	class ConnectionLayer : public LowLayer {  		public: -			ConnectionLayer(boost::shared_ptr<Connection> connection) : connection(connection) { -				connection->onDataRead.connect(boost::bind(&ConnectionLayer::writeDataToParentLayer, this, _1)); -			} - -			~ConnectionLayer() { -				connection->onDataRead.disconnect(boost::bind(&ConnectionLayer::writeDataToParentLayer, this, _1)); -			} +			ConnectionLayer(boost::shared_ptr<Connection> connection); +			~ConnectionLayer(); -			void writeData(const ByteArray& data) { +			void writeData(const SafeByteArray& data) {  				connection->write(data);  			} diff --git a/Swiften/StreamStack/HighLayer.cpp b/Swiften/StreamStack/HighLayer.cpp index 7203b7f..dc17c2a 100644 --- a/Swiften/StreamStack/HighLayer.cpp +++ b/Swiften/StreamStack/HighLayer.cpp @@ -18,7 +18,7 @@ HighLayer::HighLayer() : childLayer(NULL) {  HighLayer::~HighLayer() {  } -void HighLayer::writeDataToChildLayer(const ByteArray& data) { +void HighLayer::writeDataToChildLayer(const SafeByteArray& data) {  	assert(childLayer);  	childLayer->writeData(data);  } diff --git a/Swiften/StreamStack/HighLayer.h b/Swiften/StreamStack/HighLayer.h index ca983f9..06b1d25 100644 --- a/Swiften/StreamStack/HighLayer.h +++ b/Swiften/StreamStack/HighLayer.h @@ -6,7 +6,7 @@  #pragma once -#include "Swiften/Base/ByteArray.h" +#include <Swiften/Base/SafeByteArray.h>  namespace Swift {  	class LowLayer; @@ -18,7 +18,7 @@ namespace Swift {  			HighLayer();  			virtual ~HighLayer(); -			virtual void handleDataRead(const ByteArray& data) = 0; +			virtual void handleDataRead(const SafeByteArray& data) = 0;  		protected:  			LowLayer* getChildLayer() { @@ -29,7 +29,7 @@ namespace Swift {  				this->childLayer = childLayer;  			} -			void writeDataToChildLayer(const ByteArray& data); +			void writeDataToChildLayer(const SafeByteArray& data);  		private:  			LowLayer* childLayer; diff --git a/Swiften/StreamStack/LowLayer.cpp b/Swiften/StreamStack/LowLayer.cpp index ed93cd2..ff4ca17 100644 --- a/Swiften/StreamStack/LowLayer.cpp +++ b/Swiften/StreamStack/LowLayer.cpp @@ -18,7 +18,7 @@ LowLayer::LowLayer() : parentLayer(NULL) {  LowLayer::~LowLayer() {  } -void LowLayer::writeDataToParentLayer(const ByteArray& data) { +void LowLayer::writeDataToParentLayer(const SafeByteArray& data) {  	assert(parentLayer);  	parentLayer->handleDataRead(data);  } diff --git a/Swiften/StreamStack/LowLayer.h b/Swiften/StreamStack/LowLayer.h index 1f9645a..00960ea 100644 --- a/Swiften/StreamStack/LowLayer.h +++ b/Swiften/StreamStack/LowLayer.h @@ -6,7 +6,7 @@  #pragma once -#include "Swiften/Base/ByteArray.h" +#include <Swiften/Base/SafeByteArray.h>  namespace Swift {  	class HighLayer; @@ -18,7 +18,7 @@ namespace Swift {  			LowLayer();  			virtual ~LowLayer(); -			virtual void writeData(const ByteArray& data) = 0; +			virtual void writeData(const SafeByteArray& data) = 0;  		protected:  			HighLayer* getParentLayer() { @@ -29,7 +29,7 @@ namespace Swift {  				this->parentLayer = parentLayer;  			} -			void writeDataToParentLayer(const ByteArray& data); +			void writeDataToParentLayer(const SafeByteArray& data);  		private:  			HighLayer* parentLayer; diff --git a/Swiften/StreamStack/SConscript b/Swiften/StreamStack/SConscript index 022c695..06fcc03 100644 --- a/Swiften/StreamStack/SConscript +++ b/Swiften/StreamStack/SConscript @@ -6,6 +6,7 @@ sources = [  		"HighLayer.cpp",  		"LowLayer.cpp",  		"StreamStack.cpp", +		"ConnectionLayer.cpp",  		"TLSLayer.cpp",  		"WhitespacePingLayer.cpp",  		"XMPPLayer.cpp", diff --git a/Swiften/StreamStack/StreamLayer.h b/Swiften/StreamStack/StreamLayer.h index bcc5d79..09bb5b3 100644 --- a/Swiften/StreamStack/StreamLayer.h +++ b/Swiften/StreamStack/StreamLayer.h @@ -6,8 +6,8 @@  #pragma once -#include "Swiften/StreamStack/LowLayer.h" -#include "Swiften/StreamStack/HighLayer.h" +#include <Swiften/StreamStack/LowLayer.h> +#include <Swiften/StreamStack/HighLayer.h>  namespace Swift {  	class StreamLayer : public LowLayer, public HighLayer { diff --git a/Swiften/StreamStack/StreamStack.cpp b/Swiften/StreamStack/StreamStack.cpp index 2a30768..78409f7 100644 --- a/Swiften/StreamStack/StreamStack.cpp +++ b/Swiften/StreamStack/StreamStack.cpp @@ -4,14 +4,14 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#include "Swiften/StreamStack/StreamStack.h" +#include <Swiften/StreamStack/StreamStack.h>  #include <boost/bind.hpp> -#include "Swiften/Base/foreach.h" -#include "Swiften/StreamStack/XMPPLayer.h" -#include "Swiften/StreamStack/LowLayer.h" -#include "Swiften/StreamStack/StreamLayer.h" +#include <Swiften/Base/foreach.h> +#include <Swiften/StreamStack/XMPPLayer.h> +#include <Swiften/StreamStack/LowLayer.h> +#include <Swiften/StreamStack/StreamLayer.h>  namespace Swift { diff --git a/Swiften/StreamStack/StreamStack.h b/Swiften/StreamStack/StreamStack.h index 562245e..30e17ce 100644 --- a/Swiften/StreamStack/StreamStack.h +++ b/Swiften/StreamStack/StreamStack.h @@ -7,11 +7,10 @@  #pragma once  #include <boost/shared_ptr.hpp> -#include "Swiften/Base/boost_bsignals.h" +#include <Swiften/Base/boost_bsignals.h>  #include <vector> -#include "Swiften/Elements/Stanza.h" -#include "Swiften/Base/foreach.h" +#include <Swiften/Elements/Stanza.h>  namespace Swift {  	class XMPPLayer; @@ -30,8 +29,8 @@ namespace Swift {  			}  			template<typename T> T* getLayer() { -				foreach(StreamLayer* streamLayer, layers_) { -					T* layer = dynamic_cast<T*>(streamLayer); +				for (size_t i = 0; i < layers_.size(); ++i) { +					T* layer = dynamic_cast<T*>(layers_[i]);  					if (layer) {  						return layer;  					} diff --git a/Swiften/StreamStack/TLSLayer.cpp b/Swiften/StreamStack/TLSLayer.cpp index 8a6c008..6f2223d 100644 --- a/Swiften/StreamStack/TLSLayer.cpp +++ b/Swiften/StreamStack/TLSLayer.cpp @@ -4,12 +4,12 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#include "Swiften/StreamStack/TLSLayer.h" +#include <Swiften/StreamStack/TLSLayer.h>  #include <boost/bind.hpp> -#include "Swiften/TLS/TLSContextFactory.h" -#include "Swiften/TLS/TLSContext.h" +#include <Swiften/TLS/TLSContextFactory.h> +#include <Swiften/TLS/TLSContext.h>  namespace Swift { @@ -29,11 +29,11 @@ void TLSLayer::connect() {  	context->connect();  } -void TLSLayer::writeData(const ByteArray& data) { +void TLSLayer::writeData(const SafeByteArray& data) {  	context->handleDataFromApplication(data);  } -void TLSLayer::handleDataRead(const ByteArray& data) { +void TLSLayer::handleDataRead(const SafeByteArray& data) {  	context->handleDataFromNetwork(data);  } diff --git a/Swiften/StreamStack/TLSLayer.h b/Swiften/StreamStack/TLSLayer.h index 22e9aef..a8693d5 100644 --- a/Swiften/StreamStack/TLSLayer.h +++ b/Swiften/StreamStack/TLSLayer.h @@ -4,12 +4,12 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#include "Swiften/Base/boost_bsignals.h" +#include <Swiften/Base/boost_bsignals.h> -#include "Swiften/Base/ByteArray.h" -#include "Swiften/StreamStack/StreamLayer.h" -#include "Swiften/TLS/Certificate.h" -#include "Swiften/TLS/CertificateVerificationError.h" +#include <Swiften/Base/SafeByteArray.h> +#include <Swiften/StreamStack/StreamLayer.h> +#include <Swiften/TLS/Certificate.h> +#include <Swiften/TLS/CertificateVerificationError.h>  namespace Swift {  	class TLSContext; @@ -27,8 +27,8 @@ namespace Swift {  			Certificate::ref getPeerCertificate() const;  			boost::shared_ptr<CertificateVerificationError> getPeerCertificateVerificationError() const; -			void writeData(const ByteArray& data); -			void handleDataRead(const ByteArray& data); +			void writeData(const SafeByteArray& data); +			void handleDataRead(const SafeByteArray& data);  			TLSContext* getContext() const {  				return context; diff --git a/Swiften/StreamStack/UnitTest/StreamStackTest.cpp b/Swiften/StreamStack/UnitTest/StreamStackTest.cpp index be16baa..d3c0a7c 100644 --- a/Swiften/StreamStack/UnitTest/StreamStackTest.cpp +++ b/Swiften/StreamStack/UnitTest/StreamStackTest.cpp @@ -4,7 +4,8 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#include "Swiften/Base/ByteArray.h" +#include <Swiften/Base/ByteArray.h> +#include <QA/Checker/IO.h>  #include <vector>  #include <boost/bind.hpp> @@ -12,13 +13,14 @@  #include <cppunit/extensions/HelperMacros.h>  #include <cppunit/extensions/TestFactoryRegistry.h> -#include "Swiften/Base/ByteArray.h" -#include "Swiften/StreamStack/StreamStack.h" -#include "Swiften/StreamStack/LowLayer.h" -#include "Swiften/StreamStack/XMPPLayer.h" -#include "Swiften/StreamStack/StreamLayer.h" -#include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" -#include "Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h" +#include <Swiften/Base/ByteArray.h> +#include <Swiften/Base/Concat.h> +#include <Swiften/StreamStack/StreamStack.h> +#include <Swiften/StreamStack/LowLayer.h> +#include <Swiften/StreamStack/XMPPLayer.h> +#include <Swiften/StreamStack/StreamLayer.h> +#include <Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h> +#include <Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h>  using namespace Swift; @@ -52,38 +54,38 @@ class StreamStackTest : public CppUnit::TestFixture {  			xmppStream_->writeData("foo");  			CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), physicalStream_->data_.size()); -			CPPUNIT_ASSERT_EQUAL(ByteArray("foo"), physicalStream_->data_[0]); +			CPPUNIT_ASSERT_EQUAL(createSafeByteArray("foo"), physicalStream_->data_[0]);  		}  		void testWriteData_OneIntermediateStream() {  			StreamStack testling(xmppStream_, physicalStream_); -			std::auto_ptr<MyStreamLayer> xStream(new MyStreamLayer("X")); +			boost::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("X"));  			testling.addLayer(xStream.get());  			xmppStream_->writeData("foo");  			CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), physicalStream_->data_.size()); -			CPPUNIT_ASSERT_EQUAL(ByteArray("Xfoo"), physicalStream_->data_[0]); +			CPPUNIT_ASSERT_EQUAL(createSafeByteArray("Xfoo"), physicalStream_->data_[0]);  		}  		void testWriteData_TwoIntermediateStreamStack() {  			StreamStack testling(xmppStream_, physicalStream_); -			std::auto_ptr<MyStreamLayer> xStream(new MyStreamLayer("X")); -			std::auto_ptr<MyStreamLayer> yStream(new MyStreamLayer("Y")); +			boost::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("X")); +			boost::shared_ptr<MyStreamLayer> yStream(new MyStreamLayer("Y"));  			testling.addLayer(xStream.get());  			testling.addLayer(yStream.get());  			xmppStream_->writeData("foo");  			CPPUNIT_ASSERT_EQUAL(static_cast<size_t>(1), physicalStream_->data_.size()); -			CPPUNIT_ASSERT_EQUAL(ByteArray("XYfoo"), physicalStream_->data_[0]); +			CPPUNIT_ASSERT_EQUAL(createSafeByteArray("XYfoo"), physicalStream_->data_[0]);  		}  		void testReadData_NoIntermediateStreamStack() {  			StreamStack testling(xmppStream_, physicalStream_);  			xmppStream_->onElement.connect(boost::bind(&StreamStackTest::handleElement, this, _1)); -			physicalStream_->onDataRead(ByteArray("<stream:stream xmlns:stream='http://etherx.jabber.org/streams'><presence/>")); +			physicalStream_->onDataRead(createSafeByteArray("<stream:stream xmlns:stream='http://etherx.jabber.org/streams'><presence/>"));  			CPPUNIT_ASSERT_EQUAL(1, elementsReceived_);  		} @@ -91,10 +93,10 @@ class StreamStackTest : public CppUnit::TestFixture {  		void testReadData_OneIntermediateStream() {  			StreamStack testling(xmppStream_, physicalStream_);  			xmppStream_->onElement.connect(boost::bind(&StreamStackTest::handleElement, this, _1)); -			std::auto_ptr<MyStreamLayer> xStream(new MyStreamLayer("<")); +			boost::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("<"));  			testling.addLayer(xStream.get()); -			physicalStream_->onDataRead(ByteArray("stream:stream xmlns:stream='http://etherx.jabber.org/streams'><presence/>")); +			physicalStream_->onDataRead(createSafeByteArray("stream:stream xmlns:stream='http://etherx.jabber.org/streams'><presence/>"));  			CPPUNIT_ASSERT_EQUAL(1, elementsReceived_);  		} @@ -102,12 +104,12 @@ class StreamStackTest : public CppUnit::TestFixture {  		void testReadData_TwoIntermediateStreamStack() {  			StreamStack testling(xmppStream_, physicalStream_);  			xmppStream_->onElement.connect(boost::bind(&StreamStackTest::handleElement, this, _1)); -			std::auto_ptr<MyStreamLayer> xStream(new MyStreamLayer("s")); -			std::auto_ptr<MyStreamLayer> yStream(new MyStreamLayer("<")); +			boost::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("s")); +			boost::shared_ptr<MyStreamLayer> yStream(new MyStreamLayer("<"));  			testling.addLayer(xStream.get());  			testling.addLayer(yStream.get()); -			physicalStream_->onDataRead(ByteArray("tream:stream xmlns:stream='http://etherx.jabber.org/streams'><presence/>")); +			physicalStream_->onDataRead(createSafeByteArray("tream:stream xmlns:stream='http://etherx.jabber.org/streams'><presence/>"));  			CPPUNIT_ASSERT_EQUAL(1, elementsReceived_);  		} @@ -115,7 +117,7 @@ class StreamStackTest : public CppUnit::TestFixture {  		void testAddLayer_ExistingOnWriteDataSlot() {  			StreamStack testling(xmppStream_, physicalStream_);  			xmppStream_->onWriteData.connect(boost::bind(&StreamStackTest::handleWriteData, this, _1)); -			std::auto_ptr<MyStreamLayer> xStream(new MyStreamLayer("X")); +			boost::shared_ptr<MyStreamLayer> xStream(new MyStreamLayer("X"));  			testling.addLayer(xStream.get());  			xmppStream_->writeData("foo"); @@ -127,7 +129,7 @@ class StreamStackTest : public CppUnit::TestFixture {  			++elementsReceived_;  		} -		void handleWriteData(ByteArray) { +		void handleWriteData(const SafeByteArray&) {  			++dataWriteReceived_;  		} @@ -137,12 +139,12 @@ class StreamStackTest : public CppUnit::TestFixture {  				MyStreamLayer(const std::string& prepend) : prepend_(prepend) {  				} -				virtual void writeData(const ByteArray& data) { -					writeDataToChildLayer(ByteArray(prepend_) + data); +				virtual void writeData(const SafeByteArray& data) { +					writeDataToChildLayer(concat(createSafeByteArray(prepend_), data));  				} -				virtual void handleDataRead(const ByteArray& data) { -					writeDataToParentLayer(ByteArray(prepend_) + data); +				virtual void handleDataRead(const SafeByteArray& data) { +					writeDataToParentLayer(concat(createSafeByteArray(prepend_), data));  				}  			private: @@ -154,15 +156,15 @@ class StreamStackTest : public CppUnit::TestFixture {  				TestLowLayer() {  				} -				virtual void writeData(const ByteArray& data) { +				virtual void writeData(const SafeByteArray& data) {  					data_.push_back(data);  				} -				void onDataRead(const ByteArray& data) { +				void onDataRead(const SafeByteArray& data) {  					writeDataToParentLayer(data);  				} -				std::vector<ByteArray> data_; +				std::vector<SafeByteArray> data_;  		}; diff --git a/Swiften/StreamStack/UnitTest/XMPPLayerTest.cpp b/Swiften/StreamStack/UnitTest/XMPPLayerTest.cpp index 9d5e745..bb0ce61 100644 --- a/Swiften/StreamStack/UnitTest/XMPPLayerTest.cpp +++ b/Swiften/StreamStack/UnitTest/XMPPLayerTest.cpp @@ -9,13 +9,13 @@  #include <cppunit/extensions/HelperMacros.h>  #include <cppunit/extensions/TestFactoryRegistry.h> -#include "Swiften/Elements/ProtocolHeader.h" -#include "Swiften/Elements/Presence.h" -#include "Swiften/Base/ByteArray.h" -#include "Swiften/StreamStack/XMPPLayer.h" -#include "Swiften/StreamStack/LowLayer.h" -#include "Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h" -#include "Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h" +#include <Swiften/Elements/ProtocolHeader.h> +#include <Swiften/Elements/Presence.h> +#include <Swiften/Base/ByteArray.h> +#include <Swiften/StreamStack/XMPPLayer.h> +#include <Swiften/StreamStack/LowLayer.h> +#include <Swiften/Parser/PayloadParsers/FullPayloadParserFactoryCollection.h> +#include <Swiften/Serializer/PayloadSerializers/FullPayloadSerializerCollection.h>  using namespace Swift; @@ -46,7 +46,7 @@ class XMPPLayerTest : public CppUnit::TestFixture {  		void testParseData_Error() {  			testling_->onError.connect(boost::bind(&XMPPLayerTest::handleError, this)); -			testling_->handleDataRead("<iq>"); +			testling_->handleDataRead(createSafeByteArray("<iq>"));  			CPPUNIT_ASSERT_EQUAL(1, errorReceived_);  		} @@ -55,10 +55,10 @@ class XMPPLayerTest : public CppUnit::TestFixture {  			testling_->onElement.connect(boost::bind(&XMPPLayerTest::handleElement, this, _1));  			testling_->onError.connect(boost::bind(&XMPPLayerTest::handleError, this)); -			testling_->handleDataRead("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" >"); +			testling_->handleDataRead(createSafeByteArray("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" >"));  			testling_->resetParser(); -			testling_->handleDataRead("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" >"); -			testling_->handleDataRead("<presence/>"); +			testling_->handleDataRead(createSafeByteArray("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" >")); +			testling_->handleDataRead(createSafeByteArray("<presence/>"));  			CPPUNIT_ASSERT_EQUAL(1, elementsReceived_);  			CPPUNIT_ASSERT_EQUAL(0, errorReceived_); @@ -66,8 +66,8 @@ class XMPPLayerTest : public CppUnit::TestFixture {  		void testResetParser_FromSlot() {  			testling_->onElement.connect(boost::bind(&XMPPLayerTest::handleElementAndReset, this, _1)); -			testling_->handleDataRead("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" ><presence/>"); -			testling_->handleDataRead("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" ><presence/>"); +			testling_->handleDataRead(createSafeByteArray("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" ><presence/>")); +			testling_->handleDataRead(createSafeByteArray("<stream:stream to=\"example.com\" xmlns=\"jabber:client\" xmlns:stream=\"http://etherx.jabber.org/streams\" ><presence/>"));  			CPPUNIT_ASSERT_EQUAL(2, elementsReceived_);  			CPPUNIT_ASSERT_EQUAL(0, errorReceived_); @@ -120,8 +120,8 @@ class XMPPLayerTest : public CppUnit::TestFixture {  		class DummyLowLayer : public LowLayer {  			public: -				virtual void writeData(const ByteArray& data) { -					writtenData += data.toString(); +				virtual void writeData(const SafeByteArray& data) { +					writtenData += byteArrayToString(ByteArray(data.begin(), data.end()));  				}  				std::string writtenData; diff --git a/Swiften/StreamStack/WhitespacePingLayer.cpp b/Swiften/StreamStack/WhitespacePingLayer.cpp index 35efc3c..b14f3a2 100644 --- a/Swiften/StreamStack/WhitespacePingLayer.cpp +++ b/Swiften/StreamStack/WhitespacePingLayer.cpp @@ -4,12 +4,12 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#include "Swiften/StreamStack/WhitespacePingLayer.h" +#include <Swiften/StreamStack/WhitespacePingLayer.h>  #include <boost/bind.hpp> -#include "Swiften/Network/TimerFactory.h" -#include "Swiften/Network/Timer.h" +#include <Swiften/Network/TimerFactory.h> +#include <Swiften/Network/Timer.h>  namespace Swift { @@ -20,17 +20,17 @@ WhitespacePingLayer::WhitespacePingLayer(TimerFactory* timerFactory) : isActive(  	timer->onTick.connect(boost::bind(&WhitespacePingLayer::handleTimerTick, this));  } -void WhitespacePingLayer::writeData(const ByteArray& data) { +void WhitespacePingLayer::writeData(const SafeByteArray& data) {  	writeDataToChildLayer(data);  } -void WhitespacePingLayer::handleDataRead(const ByteArray& data) { +void WhitespacePingLayer::handleDataRead(const SafeByteArray& data) {  	writeDataToParentLayer(data);  }  void WhitespacePingLayer::handleTimerTick() {  	timer->stop(); -	writeDataToChildLayer(" "); +	writeDataToChildLayer(createSafeByteArray(" "));  	timer->start();  } diff --git a/Swiften/StreamStack/WhitespacePingLayer.h b/Swiften/StreamStack/WhitespacePingLayer.h index 0532bbd..1435842 100644 --- a/Swiften/StreamStack/WhitespacePingLayer.h +++ b/Swiften/StreamStack/WhitespacePingLayer.h @@ -9,7 +9,7 @@  #include <boost/noncopyable.hpp>  #include <boost/shared_ptr.hpp> -#include "Swiften/StreamStack/StreamLayer.h" +#include <Swiften/StreamStack/StreamLayer.h>  namespace Swift {  	class Timer; @@ -21,8 +21,8 @@ namespace Swift {  			void setActive();  			void setInactive(); -			void writeData(const ByteArray& data); -			void handleDataRead(const ByteArray& data); +			void writeData(const SafeByteArray& data); +			void handleDataRead(const SafeByteArray& data);  			bool getIsActive() const {  				return isActive; diff --git a/Swiften/StreamStack/XMPPLayer.cpp b/Swiften/StreamStack/XMPPLayer.cpp index 684dfe6..1dcd84f 100644 --- a/Swiften/StreamStack/XMPPLayer.cpp +++ b/Swiften/StreamStack/XMPPLayer.cpp @@ -4,10 +4,10 @@   * See Documentation/Licenses/GPLv3.txt for more information.   */ -#include "Swiften/StreamStack/XMPPLayer.h" -#include "Swiften/Parser/XMPPParser.h" -#include "Swiften/Serializer/XMPPSerializer.h" -#include "Swiften/Elements/ProtocolHeader.h" +#include <Swiften/StreamStack/XMPPLayer.h> +#include <Swiften/Parser/XMPPParser.h> +#include <Swiften/Serializer/XMPPSerializer.h> +#include <Swiften/Elements/ProtocolHeader.h>  namespace Swift { @@ -29,30 +29,33 @@ XMPPLayer::~XMPPLayer() {  }  void XMPPLayer::writeHeader(const ProtocolHeader& header) { -	writeDataInternal(ByteArray(xmppSerializer_->serializeHeader(header))); +	writeDataInternal(createSafeByteArray(xmppSerializer_->serializeHeader(header)));  }  void XMPPLayer::writeFooter() { -	writeDataInternal(ByteArray(xmppSerializer_->serializeFooter())); +	writeDataInternal(createSafeByteArray(xmppSerializer_->serializeFooter()));  }  void XMPPLayer::writeElement(boost::shared_ptr<Element> element) { -	writeDataInternal(ByteArray(xmppSerializer_->serializeElement(element))); +	writeDataInternal(xmppSerializer_->serializeElement(element));  }  void XMPPLayer::writeData(const std::string& data) { -	writeDataInternal(ByteArray(data)); +	writeDataInternal(createSafeByteArray(data));  } -void XMPPLayer::writeDataInternal(const ByteArray& data) { +void XMPPLayer::writeDataInternal(const SafeByteArray& data) {  	onWriteData(data);  	writeDataToChildLayer(data);  } -void XMPPLayer::handleDataRead(const ByteArray& data) { +void XMPPLayer::handleDataRead(const SafeByteArray& data) {  	onDataRead(data);  	inParser_ = true; -	if (!xmppParser_->parse(data.toString())) { +	// FIXME: Converting to unsafe string. Should be ok, since we don't take passwords +	// from the stream in clients. If servers start using this, and require safe storage, +	// we need to fix this. +	if (!xmppParser_->parse(byteArrayToString(ByteArray(data.begin(), data.end())))) {  		inParser_ = false;  		onError();  		return; diff --git a/Swiften/StreamStack/XMPPLayer.h b/Swiften/StreamStack/XMPPLayer.h index 6669cda..54bdd42 100644 --- a/Swiften/StreamStack/XMPPLayer.h +++ b/Swiften/StreamStack/XMPPLayer.h @@ -7,14 +7,14 @@  #pragma once  #include <boost/shared_ptr.hpp> -#include "Swiften/Base/boost_bsignals.h" +#include <Swiften/Base/boost_bsignals.h>  #include <boost/noncopyable.hpp>  #include <Swiften/StreamStack/HighLayer.h> -#include "Swiften/Base/ByteArray.h" -#include "Swiften/Elements/Element.h" -#include "Swiften/Elements/StreamType.h" -#include "Swiften/Parser/XMPPParserClient.h" +#include <Swiften/Base/SafeByteArray.h> +#include <Swiften/Elements/Element.h> +#include <Swiften/Elements/StreamType.h> +#include <Swiften/Parser/XMPPParserClient.h>  namespace Swift {  	class ProtocolHeader; @@ -39,14 +39,14 @@ namespace Swift {  			void resetParser();  		protected: -			void handleDataRead(const ByteArray& data); -			void writeDataInternal(const ByteArray& data); +			void handleDataRead(const SafeByteArray& data); +			void writeDataInternal(const SafeByteArray& data);  		public:  			boost::signal<void (const ProtocolHeader&)> onStreamStart;  			boost::signal<void (boost::shared_ptr<Element>)> onElement; -			boost::signal<void (const ByteArray&)> onWriteData; -			boost::signal<void (const ByteArray&)> onDataRead; +			boost::signal<void (const SafeByteArray&)> onWriteData; +			boost::signal<void (const SafeByteArray&)> onDataRead;  			boost::signal<void ()> onError;  		private:  | 
 Swift