summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2010-11-07 14:58:23 (GMT)
committerRemko Tronçon <git@el-tramo.be>2010-11-07 18:04:57 (GMT)
commite2f2e48f6e01739ccaa763ff7f037306131d4e61 (patch)
tree92fefe8ff9255356d849d1eadcad45666bde52e5 /Swiften/Client/ClientSession.cpp
parent832d109bfabc16ef2834790743c1d235b254d781 (diff)
downloadswift-e2f2e48f6e01739ccaa763ff7f037306131d4e61.zip
swift-e2f2e48f6e01739ccaa763ff7f037306131d4e61.tar.bz2
Added security error handling to Swiften.
Diffstat (limited to 'Swiften/Client/ClientSession.cpp')
-rw-r--r--Swiften/Client/ClientSession.cpp19
1 files changed, 19 insertions, 0 deletions
diff --git a/Swiften/Client/ClientSession.cpp b/Swiften/Client/ClientSession.cpp
index 4c2be95..7170a20 100644
--- a/Swiften/Client/ClientSession.cpp
+++ b/Swiften/Client/ClientSession.cpp
@@ -11,6 +11,7 @@
#include <boost/uuid/uuid_io.hpp>
#include <boost/uuid/uuid_generators.hpp>
+#include "Swiften/TLS/SecurityError.h"
#include "Swiften/Elements/ProtocolHeader.h"
#include "Swiften/Elements/StreamFeatures.h"
#include "Swiften/Elements/StartTLSRequest.h"
@@ -322,8 +323,26 @@ void ClientSession::sendCredentials(const String& password) {
stream->writeElement(boost::shared_ptr<AuthRequest>(new AuthRequest(authenticator->getName(), authenticator->getResponse())));
}
+void ClientSession::continueAfterSecurityError() {
+ checkState(WaitingForContinueAfterSecurityError);
+ continueAfterTLSEncrypted();
+}
+
void ClientSession::handleTLSEncrypted() {
checkState(Encrypting);
+
+ Certificate::ref certificate = stream->getPeerCertificate();
+ boost::optional<CertificateVerificationError> verificationError = stream->getPeerCertificateVerificationError();
+ if (verificationError) {
+ state = WaitingForContinueAfterSecurityError;
+ onSecurityError(SecurityError(*verificationError));
+ }
+ else {
+ continueAfterTLSEncrypted();
+ }
+}
+
+void ClientSession::continueAfterTLSEncrypted() {
state = WaitingForStreamStart;
stream->resetXMPPParser();
sendStreamHeader();