summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2012-03-23 11:54:03 (GMT)
committerKevin Smith <git@kismith.co.uk>2012-03-23 11:54:03 (GMT)
commit846c4b9d2e7ec3214a3b13bdbbce77f70fede515 (patch)
tree579bf6be3e266c8e28a7469e7547ac88fa9af3fc /Swiften/Client
parent8ccdfd958ba1e7afbeb8c5893c12f09046cb8892 (diff)
downloadswift-846c4b9d2e7ec3214a3b13bdbbce77f70fede515.zip
swift-846c4b9d2e7ec3214a3b13bdbbce77f70fede515.tar.bz2
Allow TLS errors to bubble further up the stack
Diffstat (limited to 'Swiften/Client')
-rw-r--r--Swiften/Client/ClientError.h3
-rw-r--r--Swiften/Client/CoreClient.cpp23
-rw-r--r--Swiften/Client/UnitTest/ClientSessionTest.cpp4
3 files changed, 22 insertions, 8 deletions
diff --git a/Swiften/Client/ClientError.h b/Swiften/Client/ClientError.h
index 2f2d2af..a4dc040 100644
--- a/Swiften/Client/ClientError.h
+++ b/Swiften/Client/ClientError.h
@@ -28,6 +28,9 @@ namespace Swift {
ClientCertificateLoadError,
ClientCertificateError,
+ // Certifate on smartcard was removed
+ CertificateCardRemoved,
+
// Certificate verification errors
UnknownCertificateError,
CertificateExpiredError,
diff --git a/Swiften/Client/CoreClient.cpp b/Swiften/Client/CoreClient.cpp
index 14481c6..45d80aa 100644
--- a/Swiften/Client/CoreClient.cpp
+++ b/Swiften/Client/CoreClient.cpp
@@ -15,6 +15,7 @@
#include <Swiften/Base/Algorithm.h>
#include <Swiften/Client/ClientSession.h>
#include <Swiften/TLS/CertificateVerificationError.h>
+#include <Swiften/TLS/TLSError.h>
#include <Swiften/Network/ChainedConnector.h>
#include <Swiften/Network/NetworkFactories.h>
#include <Swiften/Network/ProxyProvider.h>
@@ -217,21 +218,31 @@ void CoreClient::handleSessionFinished(boost::shared_ptr<Error> error) {
break;
}
}
- else if (boost::shared_ptr<SessionStream::Error> actualError = boost::dynamic_pointer_cast<SessionStream::Error>(error)) {
+ else if (boost::shared_ptr<TLSError> actualError = boost::dynamic_pointer_cast<TLSError>(error)) {
+ switch(actualError->getType()) {
+ case TLSError::CertificateCardRemoved:
+ clientError = ClientError(ClientError::CertificateCardRemoved);
+ break;
+ default:
+ clientError = ClientError(ClientError::TLSError);
+ break;
+ }
+ }
+ else if (boost::shared_ptr<SessionStream::SessionStreamError> actualError = boost::dynamic_pointer_cast<SessionStream::SessionStreamError>(error)) {
switch(actualError->type) {
- case SessionStream::Error::ParseError:
+ case SessionStream::SessionStreamError::ParseError:
clientError = ClientError(ClientError::XMLError);
break;
- case SessionStream::Error::TLSError:
+ case SessionStream::SessionStreamError::TLSError:
clientError = ClientError(ClientError::TLSError);
break;
- case SessionStream::Error::InvalidTLSCertificateError:
+ case SessionStream::SessionStreamError::InvalidTLSCertificateError:
clientError = ClientError(ClientError::ClientCertificateLoadError);
break;
- case SessionStream::Error::ConnectionReadError:
+ case SessionStream::SessionStreamError::ConnectionReadError:
clientError = ClientError(ClientError::ConnectionReadError);
break;
- case SessionStream::Error::ConnectionWriteError:
+ case SessionStream::SessionStreamError::ConnectionWriteError:
clientError = ClientError(ClientError::ConnectionWriteError);
break;
}
diff --git a/Swiften/Client/UnitTest/ClientSessionTest.cpp b/Swiften/Client/UnitTest/ClientSessionTest.cpp
index a6d5a3a..6793643 100644
--- a/Swiften/Client/UnitTest/ClientSessionTest.cpp
+++ b/Swiften/Client/UnitTest/ClientSessionTest.cpp
@@ -420,11 +420,11 @@ class ClientSessionTest : public CppUnit::TestFixture {
}
void breakConnection() {
- onClosed(boost::make_shared<SessionStream::Error>(SessionStream::Error::ConnectionReadError));
+ onClosed(boost::make_shared<SessionStream::SessionStreamError>(SessionStream::SessionStreamError::ConnectionReadError));
}
void breakTLS() {
- onClosed(boost::make_shared<SessionStream::Error>(SessionStream::Error::TLSError));
+ onClosed(boost::make_shared<SessionStream::SessionStreamError>(SessionStream::SessionStreamError::TLSError));
}