📄 openssladapter.h
字号:
#ifndef UTILS_BASE_OPENSSLADAPTER_H_#define UTILS_BASE_OPENSSLADAPTER_H_#include <string>#include "ssladapter.h"typedef struct ssl_st SSL;typedef struct ssl_ctx_st SSL_CTX;typedef struct x509_store_ctx_st X509_STORE_CTX;namespace utils_base {///////////////////////////////////////////////////////////////////////////////class OpenSSLAdapter : public SSLAdapter {public: OpenSSLAdapter(AsyncSocket* socket); virtual ~OpenSSLAdapter(); virtual int StartSSL(const char* hostname, bool restartable); virtual int Send(const void* pv, size_t cb); virtual int Recv(void* pv, size_t cb); virtual int Close(); // Note that the socket returns ST_CONNECTING while SSL is being negotiated. virtual ConnState GetState() const;protected: virtual void OnConnectEvent(AsyncSocket* socket); virtual void OnReadEvent(AsyncSocket* socket); virtual void OnWriteEvent(AsyncSocket* socket); virtual void OnCloseEvent(AsyncSocket* socket, int err);private: enum SSLState { SSL_NONE, SSL_WAIT, SSL_CONNECTING, SSL_CONNECTED, SSL_ERROR }; int BeginSSL(); int ContinueSSL(); void Error(const char* context, int err, bool signal = true); void Cleanup(); bool SSLPostConnectionCheck(SSL* ssl, const char* host);#if _DEBUG static void SSLInfoCallback(const SSL* s, int where, int ret);#endif // !_DEBUG static int SSLVerifyCallback(int ok, X509_STORE_CTX* store); static SSL_CTX* SetupSSLContext(); SSLState state_; bool ssl_read_needs_write_; bool ssl_write_needs_read_; // If true, socket will retain SSL configuration after Close. bool restartable_; SSL* ssl_; SSL_CTX* ssl_ctx_; std::string ssl_host_name_;};/////////////////////////////////////////////////////////////////////////////} // namespace utils_base#endif // UTILS_BASE_OPENSSLADAPTER_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -