From ac45f360be049242a89ae80258e4ea8350f909ba Mon Sep 17 00:00:00 2001
From: Mili Verma <mili.verma@isode.com>
Date: Tue, 23 Jun 2015 14:27:08 +0100
Subject: Pass an optional error code

This patch creates and passes on an optional boost::system::error_code variable
which contains more error info which can be displayed in case of an error.

Test-information:
Tested using WIP code on Windows.

Change-Id: I285b8aec5e9c00d3a8e0d8cc0d5e7b4c5d94c099

diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index c6b6dfc..95094f2 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -662,6 +662,10 @@ void MainController::handleDisconnected(const boost::optional<ClientError>& erro
 			}
 		}
 
+		if (!message.empty() && error->getErrorCode()) {
+			message = str(format(QT_TRANSLATE_NOOP("", "%1% (%2%)")) % message % error->getErrorCode()->message());
+		}
+
 		if (forceReconnectAfterCertificateTrust && settings_->getSetting(SettingConstants::FORGET_PASSWORDS)) {
 			forceReconnectAfterCertificateTrust = false;
 			forceSignout = true;
diff --git a/Swiften/Client/ClientError.h b/Swiften/Client/ClientError.h
index 5277a0e..19de42b 100644
--- a/Swiften/Client/ClientError.h
+++ b/Swiften/Client/ClientError.h
@@ -1,11 +1,14 @@
 /*
- * Copyright (c) 2010 Isode Limited.
+ * Copyright (c) 2010-2015 Isode Limited.
  * All rights reserved.
  * See the COPYING file for more information.
  */
 
 #pragma once
 
+#include <boost/shared_ptr.hpp>
+#include <boost/system/system_error.hpp>
+
 namespace Swift {
 	class ClientError {
 		public:
@@ -51,7 +54,12 @@ namespace Swift {
 
 			Type getType() const { return type_; }
 
+			void setErrorCode(boost::shared_ptr<boost::system::error_code> errorCode) { errorCode_ = errorCode; }
+
+			boost::shared_ptr<boost::system::error_code> getErrorCode() const { return errorCode_; }
+
 		private:
 			Type type_;
+			boost::shared_ptr<boost::system::error_code> errorCode_;
 	};
 }
diff --git a/Swiften/Client/ClientSession.h b/Swiften/Client/ClientSession.h
index 61de014..9bbc3f2 100644
--- a/Swiften/Client/ClientSession.h
+++ b/Swiften/Client/ClientSession.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2014 Isode Limited.
+ * Copyright (c) 2010-2015 Isode Limited.
  * All rights reserved.
  * See the COPYING file for more information.
  */
@@ -57,6 +57,7 @@ namespace Swift {
 					TLSError,
 					StreamError
 				} type;
+				boost::shared_ptr<boost::system::error_code> errorCode;
 				Error(Type type) : type(type) {}
 			};
 
diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp
index c91e5c5..baebd4a 100644
--- a/Swiften/Client/CoreClient.cpp
+++ b/Swiften/Client/CoreClient.cpp
@@ -259,6 +259,7 @@ void CoreClient::handleSessionFinished(boost::shared_ptr<Error> error) {
 					clientError = ClientError(ClientError::StreamError);
 					break;
 			}
+			clientError.setErrorCode(actualError->errorCode);
 		}
 		else if (boost::shared_ptr<TLSError> actualError = boost::dynamic_pointer_cast<TLSError>(error)) {
 			switch(actualError->getType()) {
-- 
cgit v0.10.2-6-g49f6