From 3914231a023e36881c2a760a3d8973ffdd2a18ad Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Tue, 10 Nov 2009 20:29:39 +0100
Subject: More Client refactoring.


diff --git a/Swiften/Client/Client.cpp b/Swiften/Client/Client.cpp
index adda6af..9fb4ca0 100644
--- a/Swiften/Client/Client.cpp
+++ b/Swiften/Client/Client.cpp
@@ -49,12 +49,12 @@ void Client::handleConnectionConnectFinished(bool error) {
 	else {
 		assert(!sessionStream_);
 		sessionStream_ = boost::shared_ptr<BasicSessionStream>(new BasicSessionStream(connection_, &payloadParserFactories_, &payloadSerializers_, tlsLayerFactory_));
-		sessionStream_->initialize();
 		if (!certificate_.isEmpty()) {
 			sessionStream_->setTLSCertificate(PKCS12Certificate(certificate_, password_));
 		}
-		//sessionStream_->onDataRead.connect(boost::bind(&Client::handleDataRead, this, _1));
-		//sessionStream_->onDataWritten.connect(boost::bind(&Client::handleDataWritten, this, _1));
+		sessionStream_->onDataRead.connect(boost::bind(&Client::handleDataRead, shared_from_this(), _1));
+		sessionStream_->onDataWritten.connect(boost::bind(&Client::handleDataWritten, shared_from_this(), _1));
+		sessionStream_->initialize();
 
 		session_ = boost::shared_ptr<ClientSession>(new ClientSession(jid_, sessionStream_));
 		session_->onInitialized.connect(boost::bind(boost::ref(onConnected)));
@@ -164,12 +164,12 @@ void Client::handleNeedCredentials() {
 	session_->sendCredentials(password_);
 }
 
-void Client::handleDataRead(const ByteArray& data) {
-	onDataRead(String(data.getData(), data.getSize()));
+void Client::handleDataRead(const String& data) {
+  onDataRead(data);
 }
 
-void Client::handleDataWritten(const ByteArray& data) {
-	onDataWritten(String(data.getData(), data.getSize()));
+void Client::handleDataWritten(const String& data) {
+  onDataWritten(data);
 }
 
 }
diff --git a/Swiften/Client/Client.h b/Swiften/Client/Client.h
index 27c2458..16127dd 100644
--- a/Swiften/Client/Client.h
+++ b/Swiften/Client/Client.h
@@ -53,8 +53,8 @@ namespace Swift {
 			void handleElement(boost::shared_ptr<Element>);
 			void handleSessionFinished(boost::shared_ptr<Error>);
 			void handleNeedCredentials();
-			void handleDataRead(const ByteArray&);
-			void handleDataWritten(const ByteArray&);
+			void handleDataRead(const String&);
+			void handleDataWritten(const String&);
 
 			void reset();
 
diff --git a/Swiften/Client/ClientSession.h b/Swiften/Client/ClientSession.h
index 1b01a66..e09861b 100644
--- a/Swiften/Client/ClientSession.h
+++ b/Swiften/Client/ClientSession.h
@@ -66,9 +66,9 @@ namespace Swift {
 			void sendStreamHeader();
 			void sendSessionStart();
 
-			virtual void handleElement(boost::shared_ptr<Element>);
-			virtual void handleStreamStart(const ProtocolHeader&);
-			virtual void handleStreamError(boost::shared_ptr<Swift::Error>);
+			void handleElement(boost::shared_ptr<Element>);
+			void handleStreamStart(const ProtocolHeader&);
+			void handleStreamError(boost::shared_ptr<Swift::Error>);
 
 			void handleTLSEncrypted();
 
diff --git a/Swiften/Session/BasicSessionStream.cpp b/Swiften/Session/BasicSessionStream.cpp
index 115dc7c..8b14367 100644
--- a/Swiften/Session/BasicSessionStream.cpp
+++ b/Swiften/Session/BasicSessionStream.cpp
@@ -1,5 +1,3 @@
-// TODO: Send out better errors
-
 #include "Swiften/Session/BasicSessionStream.h"
 
 #include <boost/bind.hpp>
@@ -23,6 +21,8 @@ void BasicSessionStream::initialize() {
 	xmppLayer->onElement.connect(boost::bind(&BasicSessionStream::handleElementReceived, shared_from_this(), _1));
 	xmppLayer->onError.connect(boost::bind(
       &BasicSessionStream::handleXMPPError, shared_from_this()));
+  xmppLayer->onDataRead.connect(boost::bind(&BasicSessionStream::handleDataRead, shared_from_this(), _1));
+  xmppLayer->onWriteData.connect(boost::bind(&BasicSessionStream::handleDataWritten, shared_from_this(), _1));
 
 	connection->onDisconnected.connect(boost::bind(&BasicSessionStream::handleConnectionError, shared_from_this(), _1));
 	connectionLayer = boost::shared_ptr<ConnectionLayer>(
@@ -64,7 +64,7 @@ void BasicSessionStream::addTLSEncryption() {
 	assert(available);
 	tlsLayer = tlsLayerFactory->createTLSLayer();
 	if (hasTLSCertificate() && !tlsLayer->setClientCertificate(getTLSCertificate())) {
-		onError(boost::shared_ptr<Error>(new Error()));
+		onError(boost::shared_ptr<Error>(new Error(Error::InvalidTLSCertificateError)));
 	}
 	else {
 		streamStack->addLayer(tlsLayer);
@@ -101,7 +101,7 @@ void BasicSessionStream::handleElementReceived(boost::shared_ptr<Element> elemen
 
 void BasicSessionStream::handleXMPPError() {
 	available = false;
-	onError(boost::shared_ptr<Error>(new Error()));
+	onError(boost::shared_ptr<Error>(new Error(Error::ParseError)));
 }
 
 void BasicSessionStream::handleTLSConnected() {
@@ -110,12 +110,20 @@ void BasicSessionStream::handleTLSConnected() {
 
 void BasicSessionStream::handleTLSError() {
 	available = false;
-	onError(boost::shared_ptr<Error>(new Error()));
+	onError(boost::shared_ptr<Error>(new Error(Error::TLSError)));
 }
 
 void BasicSessionStream::handleConnectionError(const boost::optional<Connection::Error>&) {
 	available = false;
-	onError(boost::shared_ptr<Error>(new Error()));
+	onError(boost::shared_ptr<Error>(new Error(Error::ConnectionError)));
+}
+
+void BasicSessionStream::handleDataRead(const ByteArray& data) {
+	onDataRead(String(data.getData(), data.getSize()));
+}
+
+void BasicSessionStream::handleDataWritten(const ByteArray& data) {
+	onDataWritten(String(data.getData(), data.getSize()));
 }
 
 };
diff --git a/Swiften/Session/BasicSessionStream.h b/Swiften/Session/BasicSessionStream.h
index 5fe0b4c..0cb50eb 100644
--- a/Swiften/Session/BasicSessionStream.h
+++ b/Swiften/Session/BasicSessionStream.h
@@ -50,6 +50,8 @@ namespace Swift {
       void handleTLSError();
 			void handleStreamStartReceived(const ProtocolHeader&);
 			void handleElementReceived(boost::shared_ptr<Element>);
+      void handleDataRead(const ByteArray& data);
+      void handleDataWritten(const ByteArray& data);
 
     private:
 			bool available;
diff --git a/Swiften/Session/SessionStream.h b/Swiften/Session/SessionStream.h
index b2444f5..6bba237 100644
--- a/Swiften/Session/SessionStream.h
+++ b/Swiften/Session/SessionStream.h
@@ -13,7 +13,16 @@ namespace Swift {
 		public:
 			class Error : public Swift::Error {
 				public:
-					Error() {}
+					enum Type {
+						ParseError,
+						TLSError,
+						InvalidTLSCertificateError,
+						ConnectionError
+					};
+
+					Error(Type type) : type(type) {}
+
+					Type type;
 			};
 
 			virtual ~SessionStream();
@@ -43,6 +52,8 @@ namespace Swift {
 			boost::signal<void (boost::shared_ptr<Element>)> onElementReceived;
 			boost::signal<void (boost::shared_ptr<Error>)> onError;
 			boost::signal<void ()> onTLSEncrypted;
+			boost::signal<void (const String&)> onDataRead;
+			boost::signal<void (const String&)> onDataWritten;
 
 		protected:
 			const PKCS12Certificate& getTLSCertificate() const {
-- 
cgit v0.10.2-6-g49f6