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

📄 httpbase.h

📁 本人收集整理的一份c/c++跨平台网络库
💻 H
字号:
#ifndef UTILS_BASE_HTTPBASE_H_#define UTILS_BASE_HTTPBASE_H_#include "httpcommon.h"namespace utils_base {class StreamInterface;//////////////////////////////////////////////////////////////////////// HttpParser//////////////////////////////////////////////////////////////////////class HttpParser {public:  HttpParser();  virtual ~HttpParser();    void reset();  bool process(const char* buffer, size_t len, size_t& read, HttpError& err);  void end_of_input();  void complete(HttpError err);  protected:  bool process_line(const char* line, size_t len, HttpError& err);  // HttpParser Interface  virtual HttpError onHttpRecvLeader(const char* line, size_t len) = 0;  virtual HttpError onHttpRecvHeader(const char* name, size_t nlen,                                     const char* value, size_t vlen) = 0;  virtual HttpError onHttpRecvHeaderComplete(bool chunked, size_t& data_size) = 0;  virtual HttpError onHttpRecvData(const char* data, size_t len, size_t& read) = 0;  virtual void onHttpRecvComplete(HttpError err) = 0;  private:  enum State {    ST_LEADER, ST_HEADERS,    ST_CHUNKSIZE, ST_CHUNKTERM, ST_TRAILERS,    ST_DATA, ST_COMPLETE  } state_;  bool chunked_;  size_t data_size_;};//////////////////////////////////////////////////////////////////////// IHttpNotify//////////////////////////////////////////////////////////////////////enum HttpMode { HM_NONE, HM_CONNECT, HM_RECV, HM_SEND };class IHttpNotify {public:  virtual HttpError onHttpHeaderComplete(bool chunked, size_t& data_size) = 0;  virtual void onHttpComplete(HttpMode mode, HttpError err) = 0;  virtual void onHttpClosed(HttpError err) = 0;};//////////////////////////////////////////////////////////////////////// HttpBase//////////////////////////////////////////////////////////////////////class HttpBase : private HttpParser, public sigslot::has_slots<> {public:  HttpBase();  virtual ~HttpBase();  void notify(IHttpNotify* notify) { notify_ = notify; }  bool attach(StreamInterface* stream);  StreamInterface* stream() { return stream_; }  StreamInterface* detach();  bool isConnected() const;  void send(HttpData* data);  void recv(HttpData* data);  void abort(HttpError err);  HttpMode mode() const { return mode_; }  void set_ignore_data(bool ignore) { ignore_data_ = ignore; }  bool ignore_data() const { return ignore_data_; }protected:  void flush_data();  void queue_headers();  void do_complete(HttpError err = HE_NONE);  void OnEvent(StreamInterface* stream, int events, int error);    // HttpParser Interface  virtual HttpError onHttpRecvLeader(const char* line, size_t len);  virtual HttpError onHttpRecvHeader(const char* name, size_t nlen,                                     const char* value, size_t vlen);  virtual HttpError onHttpRecvHeaderComplete(bool chunked, size_t& data_size);  virtual HttpError onHttpRecvData(const char* data, size_t len, size_t& read);  virtual void onHttpRecvComplete(HttpError err);private:  enum { kBufferSize = 32 * 1024 };  HttpMode mode_;  HttpData* data_;  IHttpNotify* notify_;  StreamInterface* stream_;  char buffer_[kBufferSize];  size_t len_;  bool ignore_data_, chunk_data_;  HttpData::const_iterator header_;};//////////////////////////////////////////////////////////////////////} // namespace utils_base#endif // UTILS_BASE_HTTPBASE_H_

⌨️ 快捷键说明

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