From: Stephan Bosch Date: Mon, 19 Feb 2018 12:24:57 +0000 (+0100) Subject: lib-http: response parser: Record input stream offset for the start of the last parse... X-Git-Tag: 2.3.9~2222 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=be90d5399e65511d3161fa5f2063b048a2ee8264;p=thirdparty%2Fdovecot%2Fcore.git lib-http: response parser: Record input stream offset for the start of the last parsed response. --- diff --git a/src/lib-http/http-response-parser.c b/src/lib-http/http-response-parser.c index 959afdbdb0..a53cf3749d 100644 --- a/src/lib-http/http-response-parser.c +++ b/src/lib-http/http-response-parser.c @@ -28,6 +28,8 @@ struct http_response_parser { unsigned int response_status; const char *response_reason; + + uoff_t response_offset; }; struct http_response_parser * @@ -63,6 +65,7 @@ http_response_parser_restart(struct http_response_parser *parser) http_message_parser_restart(&parser->parser, NULL); parser->response_status = 0; parser->response_reason = NULL; + parser->response_offset = (uoff_t)-1; } static int http_response_parse_status(struct http_response_parser *parser) @@ -152,6 +155,8 @@ static int http_response_parse(struct http_response_parser *parser) switch (parser->state) { case HTTP_RESPONSE_PARSE_STATE_INIT: parser->state = HTTP_RESPONSE_PARSE_STATE_VERSION; + parser->response_offset = _parser->input->v_offset + + (_parser->cur - _parser->begin); /* fall through */ case HTTP_RESPONSE_PARSE_STATE_VERSION: if ((ret=http_message_parse_version(_parser)) <= 0) { @@ -301,6 +306,11 @@ http_response_parse_retry_after(const char *hdrval, time_t resp_time, ((unsigned char *)hdrval, strlen(hdrval), retry_after_r) ? 0 : -1); } +uoff_t http_response_parser_get_last_offset(struct http_response_parser *parser) +{ + return parser->response_offset; +} + int http_response_parse_next(struct http_response_parser *parser, enum http_response_payload_type payload_type, struct http_response *response, const char **error_r) diff --git a/src/lib-http/http-response-parser.h b/src/lib-http/http-response-parser.h index 6bcdeba9cc..877704840d 100644 --- a/src/lib-http/http-response-parser.h +++ b/src/lib-http/http-response-parser.h @@ -17,6 +17,8 @@ http_response_parser_init(struct istream *input, enum http_response_parse_flags flags) ATTR_NULL(2); void http_response_parser_deinit(struct http_response_parser **_parser); +uoff_t http_response_parser_get_last_offset(struct http_response_parser *parser); + int http_response_parse_next(struct http_response_parser *parser, enum http_response_payload_type payload_type, struct http_response *response, const char **error_r);