1
0

HttpParser.cpp 3.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. #include "HttpParser.h"
  2. int HttpParser::on_url(http_parser* parser, const char *at, size_t length) {
  3. //printf("on_url:%.*s\n", (int)length, at);
  4. http_parser_userdata* userdata = (http_parser_userdata*)parser->data;
  5. userdata->state = HP_URL;
  6. userdata->url.insert(userdata->url.size(), at, length);
  7. return 0;
  8. }
  9. int HttpParser::on_status(http_parser* parser, const char *at, size_t length) {
  10. //printf("on_status:%.*s\n", (int)length, at);
  11. http_parser_userdata* userdata = (http_parser_userdata*)parser->data;
  12. userdata->state = HP_STATUS;
  13. return 0;
  14. }
  15. int HttpParser::on_header_field(http_parser* parser, const char *at, size_t length) {
  16. //printf("on_header_field:%.*s\n", (int)length, at);
  17. http_parser_userdata* userdata = (http_parser_userdata*)parser->data;
  18. userdata->handle_header();
  19. userdata->state = HP_HEADER_FIELD;
  20. userdata->header_field.insert(userdata->header_field.size(), at, length);
  21. return 0;
  22. }
  23. int HttpParser::on_header_value(http_parser* parser, const char *at, size_t length) {
  24. //printf("on_header_value:%.*s""\n", (int)length, at);
  25. http_parser_userdata* userdata = (http_parser_userdata*)parser->data;
  26. userdata->state = HP_HEADER_VALUE;
  27. userdata->header_value.insert(userdata->header_value.size(), at, length);
  28. return 0;
  29. }
  30. int HttpParser::on_body(http_parser* parser, const char *at, size_t length) {
  31. //printf("on_body:%.*s""\n", (int)length, at);
  32. http_parser_userdata* userdata = (http_parser_userdata*)parser->data;
  33. userdata->state = HP_BODY;
  34. userdata->payload->body.insert(userdata->payload->body.size(), at, length);
  35. return 0;
  36. }
  37. int HttpParser::on_message_begin(http_parser* parser) {
  38. //printf("on_message_begin\n");
  39. http_parser_userdata* userdata = (http_parser_userdata*)parser->data;
  40. userdata->state = HP_MESSAGE_BEGIN;
  41. return 0;
  42. }
  43. int HttpParser::on_headers_complete(http_parser* parser) {
  44. //printf("on_headers_complete\n");
  45. http_parser_userdata* userdata = (http_parser_userdata*)parser->data;
  46. userdata->handle_header();
  47. auto iter = userdata->payload->headers.find("content-type");
  48. if (iter != userdata->payload->headers.end()) {
  49. userdata->payload->content_type = http_content_type_enum(iter->second.c_str());
  50. }
  51. userdata->payload->http_major = parser->http_major;
  52. userdata->payload->http_minor = parser->http_minor;
  53. if (userdata->type == HTTP_REQUEST) {
  54. HttpRequest* req = (HttpRequest*)userdata->payload;
  55. req->method = (http_method)parser->method;
  56. req->url = userdata->url;
  57. }
  58. else if (userdata->type == HTTP_RESPONSE) {
  59. HttpResponse* res = (HttpResponse*)userdata->payload;
  60. res->status_code = (http_status)parser->status_code;
  61. }
  62. userdata->state = HP_HEADERS_COMPLETE;
  63. return 0;
  64. }
  65. int HttpParser::on_message_complete(http_parser* parser) {
  66. //printf("on_message_complete\n");
  67. http_parser_userdata* userdata = (http_parser_userdata*)parser->data;
  68. userdata->state = HP_MESSAGE_COMPLETE;
  69. return 0;
  70. }