http-response-parser.c revision bcb4e51a409d94ae670de96afb8483a4f7855294
bcb4e51a409d94ae670de96afb8483a4f7855294Stephan Bosch/* Copyright (c) 2013-2018 Dovecot authors, see the included COPYING file */
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainenhttp_response_parser_init(struct istream *input,
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainen /* FIXME: implement status line limit */
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainen if ((flags & HTTP_RESPONSE_PARSE_FLAG_STRICT) != 0)
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainen parser = i_new(struct http_response_parser, 1);
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainenvoid http_response_parser_deinit(struct http_response_parser **_parser)
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainen struct http_response_parser *parser = *_parser;
0ddff4c8aefa66f7e19eddc6d61cd040fb803321Timo Sirainenhttp_response_parser_restart(struct http_response_parser *parser)
3efdcb59492bd1e0602340a4204003a32b34654aTimo Sirainen http_message_parser_restart(&parser->parser, NULL);
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainenstatic int http_response_parse_status(struct http_response_parser *parser)
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainen const size_t size = parser->parser.end - parser->parser.cur;
3efdcb59492bd1e0602340a4204003a32b34654aTimo Sirainen /* status-code = 3DIGIT
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainen if (!i_isdigit(p[0]) || !i_isdigit(p[1]) || !i_isdigit(p[2]))
906520ee2cece20c875835697db08cd5e29b919bTimo Sirainen (p[0] - '0')*100 + (p[1] - '0')*10 + (p[2] - '0');
f877ee033a0737100c2f661a7ca4c559ea2ddb8aTimo Sirainenstatic int http_response_parse_reason(struct http_response_parser *parser)
if (!quote_open) {
if (quote_open) {
if (quote_open)
int ret;
if (ret < 0)
return ret;
if (ret < 0)
return ret;
i_unreached();
const unsigned char *begin;
int ret;
if (ret > 0)
if (ret < 0) {
return (http_date_parse
const char *hdrval;
int ret;
return ret;
return ret;
return ret;