diff options
Diffstat (limited to 'Swiften/TLS/OpenSSL/OpenSSLContext.h')
| -rw-r--r-- | Swiften/TLS/OpenSSL/OpenSSLContext.h | 49 | 
1 files changed, 34 insertions, 15 deletions
| diff --git a/Swiften/TLS/OpenSSL/OpenSSLContext.h b/Swiften/TLS/OpenSSL/OpenSSLContext.h index e75b3c9..49ada51 100644 --- a/Swiften/TLS/OpenSSL/OpenSSLContext.h +++ b/Swiften/TLS/OpenSSL/OpenSSLContext.h @@ -1,11 +1,13 @@  /* - * Copyright (c) 2010-2016 Isode Limited. + * Copyright (c) 2010-2018 Isode Limited.   * All rights reserved.   * See the COPYING file for more information.   */  #pragma once +#include <memory> +  #include <boost/noncopyable.hpp>  #include <boost/signals2.hpp> @@ -15,23 +17,40 @@  #include <Swiften/TLS/CertificateWithKey.h>  #include <Swiften/TLS/TLSContext.h> -namespace Swift { +namespace std { +    template<> +    class default_delete<SSL_CTX> { +    public: +        void operator()(SSL_CTX *ptr) { +            SSL_CTX_free(ptr); +        } +    }; +    template<> +    class default_delete<SSL> { +    public: +        void operator()(SSL *ptr) { +            SSL_free(ptr); +        } +    }; +} + +namespace Swift {      class OpenSSLContext : public TLSContext, boost::noncopyable {          public:              OpenSSLContext(); -            virtual ~OpenSSLContext(); +            virtual ~OpenSSLContext() override final; -            void connect(); -            bool setClientCertificate(CertificateWithKey::ref cert); +            void connect() override final; +            bool setClientCertificate(CertificateWithKey::ref cert) override final; -            void handleDataFromNetwork(const SafeByteArray&); -            void handleDataFromApplication(const SafeByteArray&); +            void handleDataFromNetwork(const SafeByteArray&) override final; +            void handleDataFromApplication(const SafeByteArray&) override final; -            std::vector<Certificate::ref> getPeerCertificateChain() const; -            std::shared_ptr<CertificateVerificationError> getPeerCertificateVerificationError() const; +            std::vector<Certificate::ref> getPeerCertificateChain() const override final; +            std::shared_ptr<CertificateVerificationError> getPeerCertificateVerificationError() const override final; -            virtual ByteArray getFinishMessage() const; +            virtual ByteArray getFinishMessage() const override final;          private:              static void ensureLibraryInitialized(); @@ -43,12 +62,12 @@ namespace Swift {              void sendPendingDataToApplication();          private: -            enum State { Start, Connecting, Connected, Error }; +            enum class State { Start, Connecting, Connected, Error };              State state_; -            SSL_CTX* context_; -            SSL* handle_; -            BIO* readBIO_; -            BIO* writeBIO_; +            std::unique_ptr<SSL_CTX> context_; +            std::unique_ptr<SSL> handle_; +            BIO* readBIO_ = nullptr; +            BIO* writeBIO_ = nullptr;      };  } | 
 Swift
 Swift