UsenetSearch/include/usenetsearch/SSLConnection.h

40 lines
891 B
C++

#pragma once
#include <memory>
#include <openssl/ssl.h>
#include "usenetsearch/IoSocket.h"
#include "usenetsearch/TcpConnection.h"
namespace usenetsearch {
struct SSLException: public UsenetSearchException
{
SSLException(int errorCode, const std::string& message):
UsenetSearchException(errorCode, message){}
virtual ~SSLException() = default;
};
class SSLConnection : public IoSocket
{
enum class SSLReturnState{ RETRY, SUCCESS };
std::shared_ptr<SSL> m_ssl;
std::shared_ptr<SSL_CTX> m_sslContext;
std::unique_ptr<TcpConnection> m_tcpConnection;
SSLReturnState CheckSSLReturn(int ret);
public:
SSLConnection(std::unique_ptr<TcpConnection> connection);
void Connect();
void Disconnect();
virtual std::string Read(size_t amount) override;
virtual void Write(const std::string& data) override;
};
} // namespace usenetsearch