1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70
|
/*
* Copyright (c) 2011 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
*/
#pragma once
#include <string>
#include <Swiften/Client/ClientError.h>
namespace Swift {
class SluiftException : public std::exception {
public:
virtual ~SluiftException() throw() {}
SluiftException(const std::string& reason) : reason(reason) {
}
SluiftException(const ClientError& error) {
reason = "Disconnected: ";
switch(error.getType()) {
case ClientError::UnknownError: reason += "Unknown Error"; break;
case ClientError::DomainNameResolveError: reason += "Unable to find server"; break;
case ClientError::ConnectionError: reason += "Error connecting to server"; break;
case ClientError::ConnectionReadError: reason += "Error while receiving server data"; break;
case ClientError::ConnectionWriteError: reason += "Error while sending data to the server"; break;
case ClientError::XMLError: reason += "Error parsing server data"; break;
case ClientError::AuthenticationFailedError: reason += "Login/password invalid"; break;
case ClientError::CompressionFailedError: reason += "Error while compressing stream"; break;
case ClientError::ServerVerificationFailedError: reason += "Server verification failed"; break;
case ClientError::NoSupportedAuthMechanismsError: reason += "Authentication mechanisms not supported"; break;
case ClientError::UnexpectedElementError: reason += "Unexpected response"; break;
case ClientError::ResourceBindError: reason += "Error binding resource"; break;
case ClientError::RevokedError: reason += "Certificate got revoked"; break;
case ClientError::RevocationCheckFailedError: reason += "Failed to do revokation check"; break;
case ClientError::SessionStartError: reason += "Error starting session"; break;
case ClientError::StreamError: reason += "Stream error"; break;
case ClientError::TLSError: reason += "Encryption error"; break;
case ClientError::ClientCertificateLoadError: reason += "Error loading certificate (Invalid password?)"; break;
case ClientError::ClientCertificateError: reason += "Certificate not authorized"; break;
case ClientError::UnknownCertificateError: reason += "Unknown certificate"; break;
case ClientError::CertificateCardRemoved: reason += "Certificate card removed"; break;
case ClientError::CertificateExpiredError: reason += "Certificate has expired"; break;
case ClientError::CertificateNotYetValidError: reason += "Certificate is not yet valid"; break;
case ClientError::CertificateSelfSignedError: reason += "Certificate is self-signed"; break;
case ClientError::CertificateRejectedError: reason += "Certificate has been rejected"; break;
case ClientError::CertificateUntrustedError: reason += "Certificate is not trusted"; break;
case ClientError::InvalidCertificatePurposeError: reason += "Certificate cannot be used for encrypting your connection"; break;
case ClientError::CertificatePathLengthExceededError: reason += "Certificate path length constraint exceeded"; break;
case ClientError::InvalidCertificateSignatureError: reason += "Invalid certificate signature"; break;
case ClientError::InvalidCAError: reason += "Invalid Certificate Authority"; break;
case ClientError::InvalidServerIdentityError: reason += "Certificate does not match the host identity"; break;
}
}
const std::string& getReason() const {
return reason;
}
virtual const char* what() const throw() {
return getReason().c_str();
}
private:
std::string reason;
};
}
|