#pragma once #include #include #include #include #include "ssl/forward.h" #include #include struct ssl_ctx_st; typedef ssl_ctx_st SSL_CTX; namespace panda { namespace unievent { struct SslContext { static excepted create (string cert_file, string key_file, const SSL_METHOD* = nullptr); SslContext () noexcept : ctx(nullptr) {} SslContext (SSL_CTX*) noexcept; SslContext (const SslContext& other) noexcept : SslContext(other.ctx) {} SslContext (SslContext&& other) noexcept : ctx(nullptr) { std::swap(ctx, other.ctx); } ~SslContext (); inline operator SSL_CTX* () const noexcept { return ctx; } inline operator bool () const noexcept { return ctx; } bool operator==(const SslContext& other) const noexcept { return ctx == other.ctx; } SslContext& operator=(const SslContext& other) noexcept; SslContext& operator=(SslContext&& other) noexcept { std::swap(ctx, other.ctx); return *this; } static SslContext attach(SSL_CTX* value) noexcept; void retain () const noexcept; void release () const noexcept; void reset () noexcept; SSL_CTX* ctx = nullptr; }; }}