#pragma once #include #include "ehs/EHS.h" #include "ehs/Str.h" #include "TCP.h" #include "Request.h" #include "Response.h" typedef struct ssl_ctx_st SSL_CTX; typedef struct ssl_st SSL; namespace ehs { /// A class for handling the HTTP(S) TCP socket layer. class EHS_LIB_IO SSL : public TCP { private: bool server; SSL_CTX* ctx; ::SSL* sslHdl; X509 *cert; EVP_PKEY* pkey; public: ~SSL() override; SSL(); SSL(const IP &type, const bool &server); SSL(TCP&& tcp) noexcept; SSL(const TCP& tcp); SSL(const SSL& ssl); SSL& operator=(const SSL& ssl); void Initialize() override; void Release() override; void Bind(const Str_8& address, unsigned short port) override; void Listen() override; SSL* Accept() override; void Connect(const Str_8& address, const UInt_16 port) override; UInt_64 Send(const Byte* const buffer, const UInt_32 size) override; UInt_64 Receive(Byte* const buffer, const UInt_32 size) override; void UseCertificate(const Char_8* data, const UInt_32 &size); void UsePrivateKey(const Char_8* data, const UInt_32 &size); bool IsValid(); }; }