⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 socketadapters.h

📁 本人收集整理的一份c/c++跨平台网络库
💻 H
字号:
#ifndef UTILS_BASE_SOCKETADAPTERS_H_#define UTILS_BASE_SOCKETADAPTERS_H_#include <map>#include <string>#include "asyncsocket.h"#include "cryptstring.h"#include "logging.h"namespace utils_base {struct HttpAuthContext;///////////////////////////////////////////////////////////////////////////////class BufferedReadAdapter : public AsyncSocketAdapter {public:  BufferedReadAdapter(AsyncSocket* socket, size_t buffer_size);  virtual ~BufferedReadAdapter();  virtual int Send(const void *pv, size_t cb);  virtual int Recv(void *pv, size_t cb);protected:  int DirectSend(const void *pv, size_t cb) { return AsyncSocketAdapter::Send(pv, cb); }  void BufferInput(bool on = true);  virtual void ProcessInput(char * data, size_t& len) = 0;  virtual void OnReadEvent(AsyncSocket * socket);private:  char * buffer_;  size_t buffer_size_, data_len_;  bool buffering_;};///////////////////////////////////////////////////////////////////////////////class AsyncSSLSocket : public BufferedReadAdapter {public:  AsyncSSLSocket(AsyncSocket* socket);  virtual int Connect(const SocketAddress& addr);protected:  virtual void OnConnectEvent(AsyncSocket * socket);  virtual void ProcessInput(char * data, size_t& len);};///////////////////////////////////////////////////////////////////////////////class AsyncHttpsProxySocket : public BufferedReadAdapter {public:  AsyncHttpsProxySocket(AsyncSocket* socket, const std::string& user_agent,    const SocketAddress& proxy,    const std::string& username, const CryptString& password);  virtual ~AsyncHttpsProxySocket();  virtual int Connect(const SocketAddress& addr);  virtual SocketAddress GetRemoteAddress() const;  virtual int Close();protected:  virtual void OnConnectEvent(AsyncSocket * socket);  virtual void OnCloseEvent(AsyncSocket * socket, int err);  virtual void ProcessInput(char * data, size_t& len);  void SendRequest();  void ProcessLine(char * data, size_t len);  void EndResponse();  void Error(int error);private:  SocketAddress proxy_, dest_;  std::string agent_, user_, headers_;  CryptString pass_;  size_t content_length_;  int defer_error_;  bool expect_close_;  enum ProxyState {    PS_LEADER, PS_AUTHENTICATE, PS_SKIP_HEADERS, PS_ERROR_HEADERS,    PS_TUNNEL_HEADERS, PS_SKIP_BODY, PS_TUNNEL, PS_WAIT_CLOSE, PS_ERROR  } state_;  HttpAuthContext * context_;  std::string unknown_mechanisms_;};///////////////////////////////////////////////////////////////////////////////class AsyncSocksProxySocket : public BufferedReadAdapter {public:  AsyncSocksProxySocket(AsyncSocket* socket, const SocketAddress& proxy,    const std::string& username, const CryptString& password);  virtual int Connect(const SocketAddress& addr);  virtual SocketAddress GetRemoteAddress() const;protected:  virtual void OnConnectEvent(AsyncSocket * socket);  virtual void ProcessInput(char * data, size_t& len);  void SendHello();  void SendConnect();  void SendAuth();  void Error(int error);private:  SocketAddress proxy_, dest_;  std::string user_;  CryptString pass_;  enum SocksState { SS_HELLO, SS_AUTH, SS_CONNECT, SS_TUNNEL, SS_ERROR } state_;};///////////////////////////////////////////////////////////////////////////////class LoggingSocketAdapter : public AsyncSocketAdapter {public:  LoggingSocketAdapter(AsyncSocket* socket, LoggingSeverity level,                 const char * label, bool hex_mode = false);  virtual int Send(const void *pv, size_t cb);  virtual int SendTo(const void *pv, size_t cb, const SocketAddress& addr);  virtual int Recv(void *pv, size_t cb);  virtual int RecvFrom(void *pv, size_t cb, SocketAddress *paddr);protected:  virtual void OnConnectEvent(AsyncSocket * socket);  virtual void OnCloseEvent(AsyncSocket * socket, int err);private:  LoggingSeverity level_;  std::string label_;  bool hex_mode_;  LogMultilineState lms_;};///////////////////////////////////////////////////////////////////////////////} // namespace utils_base#endif // UTILS_BASE_SOCKETADAPTERS_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -