MCPcopy Create free account
hub / github.com/apache/brpc / http_parser_execute

Function http_parser_execute

src/brpc/details/http_parser.cpp:690–2122  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

688}
689
690size_t http_parser_execute (http_parser *parser,
691 const http_parser_settings *settings,
692 const char *data,
693 size_t len)
694{
695 char c, ch;
696 int8_t unhex_val;
697 const char *p = data;
698 const char *header_field_mark = 0;
699 const char *header_value_mark = 0;
700 const char *url_mark = 0;
701 const char *body_mark = 0;
702 const char *status_mark = 0;
703 const unsigned int lenient = parser->lenient_http_headers;
704 const unsigned int allow_chunked_length = parser->allow_chunked_length;
705
706 /* We're in an error state. Don't bother doing anything. */
707 if (HTTP_PARSER_ERRNO(parser) != HPE_OK) {
708 return 0;
709 }
710
711 if (len == 0) {
712 switch (parser->state) {
713 case s_body_identity_eof:
714 /* Use of CALLBACK_NOTIFY() here would erroneously return 1 byte read if
715 * we got paused.
716 */
717 CALLBACK_NOTIFY_NOADVANCE(message_complete);
718 return 0;
719
720 case s_dead:
721 case s_start_req_or_res:
722 case s_start_res:
723 case s_start_req:
724 return 0;
725
726 default:
727 SET_ERRNO(HPE_INVALID_EOF_STATE);
728 return 1;
729 }
730 }
731
732
733 if (parser->state == s_header_field)
734 header_field_mark = data;
735 if (parser->state == s_header_value)
736 header_value_mark = data;
737 switch (parser->state) {
738 case s_req_path:
739 case s_req_scheme:
740 case s_req_scheme_slash:
741 case s_req_scheme_slash_slash:
742 case s_req_server_start:
743 case s_req_server:
744 case s_req_server_with_at:
745 case s_req_query_string_start:
746 case s_req_query_string:
747 case s_req_fragment_start:

Callers 4

TEST_FFunction · 0.85
LLVMFuzzerTestOneInputFunction · 0.85
ParseFromArrayMethod · 0.85
ParseFromIOBufMethod · 0.85

Calls 3

parse_url_charFunction · 0.85
http_message_needs_eofFunction · 0.85
on_headers_completeMethod · 0.80

Tested by 1

TEST_FFunction · 0.68