1
0

HttpParser.h 1.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849
  1. #ifndef HTTP_PARSER_H_
  2. #define HTTP_PARSER_H_
  3. #include "hexport.h"
  4. #include "HttpMessage.h"
  5. class HV_EXPORT HttpParser {
  6. public:
  7. http_version version;
  8. http_session_type type;
  9. static HttpParser* New(http_session_type type = HTTP_CLIENT, http_version version = HTTP_V1);
  10. virtual ~HttpParser() {}
  11. virtual int GetSendData(char** data, size_t* len) = 0;
  12. virtual int FeedRecvData(const char* data, size_t len) = 0;
  13. // Http1Parser: http_parser_state
  14. // Http2Parser: http2_session_state
  15. virtual int GetState() = 0;
  16. // Http1Parser: GetState() != HP_MESSAGE_COMPLETE
  17. // Http2Parser: GetState() == HSS_WANT_RECV
  18. virtual bool WantRecv() = 0;
  19. // Http1Parser: GetState() == HP_MESSAGE_COMPLETE
  20. // Http2Parser: GetState() == HSS_WANT_SEND
  21. virtual bool WantSend() = 0;
  22. // IsComplete: Is recved HttpRequest or HttpResponse complete?
  23. // Http1Parser: GetState() == HP_MESSAGE_COMPLETE
  24. // Http2Parser: (state == HSS_RECV_HEADERS || state == HSS_RECV_DATA) && stream_closed
  25. virtual bool IsComplete() = 0;
  26. // client
  27. // SubmitRequest -> while(GetSendData) {send} -> InitResponse -> do {recv -> FeedRecvData} while(WantRecv)
  28. virtual int SubmitRequest(HttpRequest* req) = 0;
  29. virtual int InitResponse(HttpResponse* res) = 0;
  30. // server
  31. // InitRequest -> do {recv -> FeedRecvData} while(WantRecv) -> SubmitResponse -> while(GetSendData) {send}
  32. virtual int InitRequest(HttpRequest* req) = 0;
  33. virtual int SubmitResponse(HttpResponse* res) = 0;
  34. virtual int GetError() = 0;
  35. virtual const char* StrError(int error) = 0;
  36. };
  37. #endif // HTTP_PARSER_H_