return HTTP_REQUEST_PARSE_ERROR_BROKEN_REQUEST;
}
-bool http_request_parser_pending_payload(struct http_request_parser *parser)
+bool http_request_parser_pending_payload(
+ struct http_request_parser *parser)
{
if (parser->parser.payload == NULL)
return FALSE;
return 0;
}
-int http_request_parse_next(struct http_request_parser *parser,
- pool_t pool, struct http_request *request,
- enum http_request_parse_error *error_code_r, const char **error_r)
+int http_request_parse_finish_payload(
+ struct http_request_parser *parser,
+ enum http_request_parse_error *error_code_r,
+ const char **error_r)
{
- const struct http_header_field *hdr;
- const char *error;
int ret;
*error_code_r = parser->error_code = HTTP_REQUEST_PARSE_ERROR_NONE;
*error_code_r = http_request_parser_message_error(parser);
*error_r = parser->parser.error;
}
- return ret;
}
+ return ret;
+}
+
+int http_request_parse_next(struct http_request_parser *parser,
+ pool_t pool, struct http_request *request,
+ enum http_request_parse_error *error_code_r, const char **error_r)
+{
+ const struct http_header_field *hdr;
+ const char *error;
+ int ret;
+
+ /* initialize and get rid of any payload of previous request */
+ if ((ret=http_request_parse_finish_payload
+ (parser, error_code_r, error_r)) <= 0)
+ return ret;
/* RFC 7230, Section 3:
const struct http_request_limits *limits) ATTR_NULL(2);
void http_request_parser_deinit(struct http_request_parser **_parser);
+int http_request_parse_finish_payload(
+ struct http_request_parser *parser,
+ enum http_request_parse_error *error_code_r,
+ const char **error_r);
+
int http_request_parse_next(struct http_request_parser *parser,
pool_t pool, struct http_request *request,
enum http_request_parse_error *error_code_r, const char **error_r);