From d2625df30861a4caa984031a6990d19dfebc3367 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Tue, 14 Jul 2009 21:33:05 +0200
Subject: Make all Connection instances shared_ptrs.


diff --git a/Swiften/Client/Session.cpp b/Swiften/Client/Session.cpp
index 1ae97d6..087880f 100644
--- a/Swiften/Client/Session.cpp
+++ b/Swiften/Client/Session.cpp
@@ -31,7 +31,6 @@ Session::Session(const JID& jid, ConnectionFactory* connectionFactory, TLSLayerF
 		payloadSerializers_(payloadSerializers),
 		state_(Initial), 
 		error_(NoError),
-		connection_(0),
 		xmppLayer_(0), 
 		tlsLayer_(0),
 		connectionLayer_(0), 
@@ -46,7 +45,6 @@ Session::~Session() {
 	delete connectionLayer_;
 	delete tlsLayer_;
 	delete xmppLayer_;
-	delete connection_;
 }
 
 void Session::start() {
diff --git a/Swiften/Client/Session.h b/Swiften/Client/Session.h
index 516cb5a..72b57bd 100644
--- a/Swiften/Client/Session.h
+++ b/Swiften/Client/Session.h
@@ -112,7 +112,7 @@ namespace Swift {
 			PayloadSerializerCollection* payloadSerializers_;
 			State state_;
 			SessionError error_;
-			Connection* connection_;
+			boost::shared_ptr<Connection> connection_;
 			XMPPLayer* xmppLayer_;
 			TLSLayer* tlsLayer_;
 			ConnectionLayer* connectionLayer_;
diff --git a/Swiften/Client/UnitTest/SessionTest.cpp b/Swiften/Client/UnitTest/SessionTest.cpp
index da05a06..f7f1db0 100644
--- a/Swiften/Client/UnitTest/SessionTest.cpp
+++ b/Swiften/Client/UnitTest/SessionTest.cpp
@@ -428,7 +428,7 @@ class SessionTest : public CppUnit::TestFixture {
 	private:
 		struct MockConnection;
 
-		MockConnection* getMockServer() const {
+		boost::shared_ptr<MockConnection> getMockServer() const {
 			CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(connectionFactory_->connections_.size()));
 			return connectionFactory_->connections_[0];
 		}
@@ -689,15 +689,15 @@ class SessionTest : public CppUnit::TestFixture {
 
 		struct MockConnectionFactory : public ConnectionFactory {
 			MockConnectionFactory() : fail_(false) {}
-			MockConnection* createConnection() {
-				MockConnection* result = new MockConnection(fail_);
+			boost::shared_ptr<Connection> createConnection() {
+				boost::shared_ptr<MockConnection> result(new MockConnection(fail_));
 				connections_.push_back(result);
 				return result;
 			}
 			void setCreateFailingConnections() {
 				fail_ = true;
 			}
-			std::vector<MockConnection*> connections_;
+			std::vector<boost::shared_ptr<MockConnection> > connections_;
 			bool fail_;
 		};
 
diff --git a/Swiften/Network/BoostConnectionFactory.cpp b/Swiften/Network/BoostConnectionFactory.cpp
index a1bef15..3f62730 100644
--- a/Swiften/Network/BoostConnectionFactory.cpp
+++ b/Swiften/Network/BoostConnectionFactory.cpp
@@ -1,12 +1,13 @@
 #include "Swiften/Network/BoostConnectionFactory.h"
+#include "Swiften/Network/BoostConnection.h"
 
 namespace Swift {
 
 BoostConnectionFactory::BoostConnectionFactory(boost::asio::io_service* ioService) : ioService(ioService) {
 }
 
-BoostConnection* BoostConnectionFactory::createConnection() {
-	return new BoostConnection(ioService);
+boost::shared_ptr<Connection> BoostConnectionFactory::createConnection() {
+	return boost::shared_ptr<Connection>(new BoostConnection(ioService));
 }
 
 }
diff --git a/Swiften/Network/BoostConnectionFactory.h b/Swiften/Network/BoostConnectionFactory.h
index d15770d..5695c6c 100644
--- a/Swiften/Network/BoostConnectionFactory.h
+++ b/Swiften/Network/BoostConnectionFactory.h
@@ -1,5 +1,4 @@
-#ifndef SWIFTEN_BoostConnectionFactory_H
-#define SWIFTEN_BoostConnectionFactory_H
+#pragma once
 
 #include <boost/asio.hpp>
 
@@ -13,11 +12,9 @@ namespace Swift {
 		public:
 			BoostConnectionFactory(boost::asio::io_service*);
 
-			virtual BoostConnection* createConnection();
+			virtual boost::shared_ptr<Connection> createConnection();
 
 		private:
 			boost::asio::io_service* ioService;
 	};
 }
-
-#endif
diff --git a/Swiften/Network/ConnectionFactory.h b/Swiften/Network/ConnectionFactory.h
index ef4eec9..e78f6ab 100644
--- a/Swiften/Network/ConnectionFactory.h
+++ b/Swiften/Network/ConnectionFactory.h
@@ -1,5 +1,6 @@
-#ifndef SWIFTEN_ConnectionFactory_H
-#define SWIFTEN_ConnectionFactory_H
+#pragma once
+
+#include <boost/shared_ptr.hpp>
 
 namespace Swift {
 	class Connection;
@@ -8,8 +9,6 @@ namespace Swift {
 		public:
 			virtual ~ConnectionFactory();
 
-			virtual Connection* createConnection() = 0;
+			virtual boost::shared_ptr<Connection> createConnection() = 0;
 	};
 }
-
-#endif
diff --git a/Swiften/QA/NetworkTest/BoostConnectionTest.cpp b/Swiften/QA/NetworkTest/BoostConnectionTest.cpp
index 6090a97..d29739e 100644
--- a/Swiften/QA/NetworkTest/BoostConnectionTest.cpp
+++ b/Swiften/QA/NetworkTest/BoostConnectionTest.cpp
@@ -1,5 +1,6 @@
 #include <cppunit/extensions/HelperMacros.h>
 #include <cppunit/extensions/TestFactoryRegistry.h>
+#include <boost/shared_ptr.hpp>
 
 #include "Swiften/Base/String.h"
 #include "Swiften/Base/sleep.h"
@@ -31,14 +32,14 @@ class BoostConnectionTest : public CppUnit::TestFixture {
 		void testDestructor() {
 			{
 				std::string domain("el-tramo.be");
-				std::auto_ptr<BoostConnection> testling(new BoostConnection(&boostIOServiceThread_->getIOService()));
+				boost::shared_ptr<BoostConnection> testling(new BoostConnection(&boostIOServiceThread_->getIOService()));
 				testling->connect(domain);
 			}
 		}
 
 		void testDestructor_PendingEvents() {
 			{
-				std::auto_ptr<BoostConnection> testling(new BoostConnection(&boostIOServiceThread_->getIOService()));
+				boost::shared_ptr<BoostConnection> testling(new BoostConnection(&boostIOServiceThread_->getIOService()));
 				testling->connect("el-tramo.be");
 				while (!eventLoop_->hasEvents()) {
 					Swift::sleep(10);
diff --git a/Swiften/Server/ServerFromClientSession.cpp b/Swiften/Server/ServerFromClientSession.cpp
index 612e667..6d4aba1 100644
--- a/Swiften/Server/ServerFromClientSession.cpp
+++ b/Swiften/Server/ServerFromClientSession.cpp
@@ -42,7 +42,7 @@ ServerFromClientSession::ServerFromClientSession(
 			boost::bind(boost::ref(onDataRead), _1));
 	xmppLayer_->onWriteData.connect(
 			boost::bind(boost::ref(onDataWritten), _1));
-	connectionLayer_ = new ConnectionLayer(connection_.get());
+	connectionLayer_ = new ConnectionLayer(connection_);
 	streamStack_ = new StreamStack(xmppLayer_, connectionLayer_);
 }
 
diff --git a/Swiften/StreamStack/ConnectionLayer.h b/Swiften/StreamStack/ConnectionLayer.h
index 99873a0..7688f78 100644
--- a/Swiften/StreamStack/ConnectionLayer.h
+++ b/Swiften/StreamStack/ConnectionLayer.h
@@ -1,7 +1,7 @@
-#ifndef SWIFTEN_CONNECTIONLAYER_H
-#define SWIFTEN_CONNECTIONLAYER_H
+#pragma once
 
 #include <boost/signal.hpp>
+#include <boost/shared_ptr.hpp>
 
 #include "Swiften/StreamStack/LowLayer.h"
 #include "Swiften/Network/Connection.h"
@@ -9,17 +9,15 @@
 namespace Swift {
 	class ConnectionLayer : public LowLayer {
 		public:
-			ConnectionLayer(Connection* connection) : connection_(connection) {
-				connection_->onDataRead.connect(onDataRead);
+			ConnectionLayer(boost::shared_ptr<Connection> connection) : connection(connection) {
+				connection->onDataRead.connect(onDataRead);
 			}
 
 			void writeData(const ByteArray& data) {
-				connection_->write(data);
+				connection->write(data);
 			}
 
 		private:
-			Connection* connection_;
+			boost::shared_ptr<Connection> connection;
 	};
 }
-
-#endif
-- 
cgit v0.10.2-6-g49f6