// generic-message = start-line // *(message-header CRLF) // CRLF // [ message-body ] const char* parse_generic_message(unsigned char** p) { if (parse_start_line(p)) return ERR; while (0 != (char)**p) { if (parse_message_header(p)) break; if (parse_crlf(p)) return ERR; } if (parse_crlf(p)) return ERR; return parse_message_body(p); }
http_request_t *parse_http_request(http_parser_t *parser, const char *data, size_t len) { if (!parser || !data || !len) return NULL; parser->data = data; parser->len = len; parser->parse_ptr = (char*)data; parse_method(parser); parse_char(parser, ' '); parse_absolute_path(parser); parse_params(parser); parse_char(parser, ' '); parse_http_version(parser); parse_crlf(parser); while (parse_message_header(parser) == 0) ; return &parser->req; }