changeset 19744:2ca3b2969ad8

lib-http: request parser: Added support for explicitly finishing payload of previous request.
author Stephan Bosch <stephan@rename-it.nl>
date Wed, 10 Feb 2016 22:17:07 +0100
parents 26c805d628f8
children b445fef19092
files src/lib-http/http-request-parser.c src/lib-http/http-request-parser.h
diffstat 2 files changed, 26 insertions(+), 7 deletions(-) [+]
line wrap: on
line diff
--- a/src/lib-http/http-request-parser.c	Wed Feb 10 22:15:12 2016 -0700
+++ b/src/lib-http/http-request-parser.c	Wed Feb 10 22:17:07 2016 +0100
@@ -333,7 +333,8 @@
 	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;
@@ -480,12 +481,11 @@
 	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;
@@ -498,8 +498,22 @@
 			*error_code_r = http_request_parser_message_error(parser);
 			*error_r = parser->parser.error;
 		}
+	}
+	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:
 		
--- a/src/lib-http/http-request-parser.h	Wed Feb 10 22:15:12 2016 -0700
+++ b/src/lib-http/http-request-parser.h	Wed Feb 10 22:17:07 2016 +0100
@@ -22,6 +22,11 @@
 	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);