diff --git a/include/Swiften/TLS/OpenSSL/OpenSSLServerContext.h b/include/Swiften/TLS/OpenSSL/OpenSSLServerContext.h new file mode 100644 index 0000000000000000000000000000000000000000..9d556e6f4ef1f00d23402ec94fe2d8abfc49f99c --- /dev/null +++ b/include/Swiften/TLS/OpenSSL/OpenSSLServerContext.h @@ -0,0 +1,53 @@ +/* + * Copyright (c) 2010 Remko Tronçon + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#pragma once + +#include +#include "Swiften/Base/boost_bsignals.h" +#include + +#include "Swiften/TLS/TLSServerContext.h" +#include "Swiften/Base/ByteArray.h" + +namespace Swift { + class PKCS12Certificate; + + class OpenSSLServerContext : public TLSServerContext, boost::noncopyable { + public: + OpenSSLServerContext(); + ~OpenSSLServerContext(); + + void connect(); + bool setServerCertificate(const PKCS12Certificate& cert); + + void handleDataFromNetwork(const SafeByteArray&); + void handleDataFromApplication(const SafeByteArray&); + + Certificate::ref getPeerCertificate() const; + boost::shared_ptr getPeerCertificateVerificationError() const; + + virtual ByteArray getFinishMessage() const; + + private: + static void ensureLibraryInitialized(); + + static CertificateVerificationError::Type getVerificationErrorTypeForResult(int); + + void doConnect(); + void sendPendingDataToNetwork(); + void sendPendingDataToApplication(); + + private: + enum State { Start, Connecting, Connected, Error }; + + State state_; + SSL_CTX* context_; + SSL* handle_; + BIO* readBIO_; + BIO* writeBIO_; + }; +}