MCPcopy Create free account
hub / github.com/boostorg/beast / http_parser_execute

Function http_parser_execute

test/bench/parser/nodejs-parser/http_parser.c:634–2090  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

632}
633
634size_t http_parser_execute (http_parser *parser,
635 const http_parser_settings *settings,
636 const char *data,
637 size_t len)
638{
639 char c, ch;
640 int8_t unhex_val;
641 const char *p = data;
642 const char *header_field_mark = 0;
643 const char *header_value_mark = 0;
644 const char *url_mark = 0;
645 const char *body_mark = 0;
646 const char *status_mark = 0;
647 enum state p_state = (enum state) parser->state;
648 const unsigned int lenient = parser->lenient_http_headers;
649
650 /* We're in an error state. Don't bother doing anything. */
651 if (HTTP_PARSER_ERRNO(parser) != HPE_OK) {
652 return 0;
653 }
654
655 if (len == 0) {
656 switch (CURRENT_STATE()) {
657 case s_body_identity_eof:
658 /* Use of CALLBACK_NOTIFY() here would erroneously return 1 byte read if
659 * we got paused.
660 */
661 CALLBACK_NOTIFY_NOADVANCE(message_complete);
662 return 0;
663
664 case s_dead:
665 case s_start_req_or_res:
666 case s_start_res:
667 case s_start_req:
668 return 0;
669
670 default:
671 SET_ERRNO(HPE_INVALID_EOF_STATE);
672 return 1;
673 }
674 }
675
676
677 if (CURRENT_STATE() == s_header_field)
678 header_field_mark = data;
679 if (CURRENT_STATE() == s_header_value)
680 header_value_mark = data;
681 switch (CURRENT_STATE()) {
682 case s_req_path:
683 case s_req_schema:
684 case s_req_schema_slash:
685 case s_req_schema_slash_slash:
686 case s_req_server_start:
687 case s_req_server:
688 case s_req_server_with_at:
689 case s_req_query_string_start:
690 case s_req_query_string:
691 case s_req_fragment_start:

Callers 2

writeMethod · 0.85
write_eofMethod · 0.85

Calls 3

parse_url_charFunction · 0.85
http_message_needs_eofFunction · 0.85
on_headers_completeMethod · 0.80

Tested by

no test coverage detected