annotate src/lib-http/http-request-parser.h @ 23017:c1d36f2575c7 default tip

lib-imap: Fix "Don't accept strings with NULs" cherry-pick
author Timo Sirainen <timo.sirainen@open-xchange.com>
date Thu, 29 Aug 2019 09:55:25 +0300
parents 36a38929734d
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
16604
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
1 #ifndef HTTP_REQUEST_PARSER_H
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
2 #define HTTP_REQUEST_PARSER_H
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
3
16744
dca140149d80 lib-http: Unified http-request.h and http-response.h headers.
Stephan Bosch <stephan@rename-it.nl>
parents: 16743
diff changeset
4 #include "http-request.h"
16749
28e5d58e49dc lib-http: Adjusted message and request parsers to return an error code.
Stephan Bosch <stephan@rename-it.nl>
parents: 16745
diff changeset
5
28e5d58e49dc lib-http: Adjusted message and request parsers to return an error code.
Stephan Bosch <stephan@rename-it.nl>
parents: 16745
diff changeset
6 enum http_request_parse_error {
16751
7c7e3aa13de7 lib-http: Implemented limits on request method and target length.
Stephan Bosch <stephan@rename-it.nl>
parents: 16749
diff changeset
7 HTTP_REQUEST_PARSE_ERROR_NONE = 0, /* no error */
7c7e3aa13de7 lib-http: Implemented limits on request method and target length.
Stephan Bosch <stephan@rename-it.nl>
parents: 16749
diff changeset
8 HTTP_REQUEST_PARSE_ERROR_BROKEN_STREAM, /* stream error */
7c7e3aa13de7 lib-http: Implemented limits on request method and target length.
Stephan Bosch <stephan@rename-it.nl>
parents: 16749
diff changeset
9 HTTP_REQUEST_PARSE_ERROR_BROKEN_REQUEST, /* unrecoverable generic error */
7c7e3aa13de7 lib-http: Implemented limits on request method and target length.
Stephan Bosch <stephan@rename-it.nl>
parents: 16749
diff changeset
10 HTTP_REQUEST_PARSE_ERROR_BAD_REQUEST, /* recoverable generic error */
7c7e3aa13de7 lib-http: Implemented limits on request method and target length.
Stephan Bosch <stephan@rename-it.nl>
parents: 16749
diff changeset
11 HTTP_REQUEST_PARSE_ERROR_NOT_IMPLEMENTED, /* used unimplemented feature
7c7e3aa13de7 lib-http: Implemented limits on request method and target length.
Stephan Bosch <stephan@rename-it.nl>
parents: 16749
diff changeset
12 (recoverable) */
16753
9da90cf29d91 lib-http: Added support for parsing Expect: header (currently only accepts `100-continue').
Stephan Bosch <stephan@rename-it.nl>
parents: 16752
diff changeset
13 HTTP_REQUEST_PARSE_ERROR_EXPECTATION_FAILED, /* unknown item in Expect:
9da90cf29d91 lib-http: Added support for parsing Expect: header (currently only accepts `100-continue').
Stephan Bosch <stephan@rename-it.nl>
parents: 16752
diff changeset
14 header (recoverable) */
16751
7c7e3aa13de7 lib-http: Implemented limits on request method and target length.
Stephan Bosch <stephan@rename-it.nl>
parents: 16749
diff changeset
15 HTTP_REQUEST_PARSE_ERROR_METHOD_TOO_LONG, /* method too long (fatal) */
7c7e3aa13de7 lib-http: Implemented limits on request method and target length.
Stephan Bosch <stephan@rename-it.nl>
parents: 16749
diff changeset
16 HTTP_REQUEST_PARSE_ERROR_TARGET_TOO_LONG, /* target too long (fatal) */
7c7e3aa13de7 lib-http: Implemented limits on request method and target length.
Stephan Bosch <stephan@rename-it.nl>
parents: 16749
diff changeset
17 HTTP_REQUEST_PARSE_ERROR_PAYLOAD_TOO_LARGE /* payload too large (fatal) */
16749
28e5d58e49dc lib-http: Adjusted message and request parsers to return an error code.
Stephan Bosch <stephan@rename-it.nl>
parents: 16745
diff changeset
18 };
16604
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
19
22389
36a38929734d lib-http: Restructured the header, message, request, and response parsers to have an extensible and consistent API using flags.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19744
diff changeset
20 enum http_request_parse_flags {
36a38929734d lib-http: Restructured the header, message, request, and response parsers to have an extensible and consistent API using flags.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19744
diff changeset
21 /* Strictly adhere to the HTTP protocol specification */
36a38929734d lib-http: Restructured the header, message, request, and response parsers to have an extensible and consistent API using flags.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19744
diff changeset
22 HTTP_REQUEST_PARSE_FLAG_STRICT = BIT(0)
36a38929734d lib-http: Restructured the header, message, request, and response parsers to have an extensible and consistent API using flags.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19744
diff changeset
23 };
36a38929734d lib-http: Restructured the header, message, request, and response parsers to have an extensible and consistent API using flags.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19744
diff changeset
24
16604
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
25 struct http_request_parser *
16745
572b9a9031e7 lib-http: Implemented limits on overall HTTP header size, size of individual header fields and the number of fields in the header.
Stephan Bosch <stephan@rename-it.nl>
parents: 16744
diff changeset
26 http_request_parser_init(struct istream *input,
22389
36a38929734d lib-http: Restructured the header, message, request, and response parsers to have an extensible and consistent API using flags.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19744
diff changeset
27 const struct http_request_limits *limits,
36a38929734d lib-http: Restructured the header, message, request, and response parsers to have an extensible and consistent API using flags.
Stephan Bosch <stephan.bosch@dovecot.fi>
parents: 19744
diff changeset
28 enum http_request_parse_flags flags) ATTR_NULL(2);
16604
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
29 void http_request_parser_deinit(struct http_request_parser **_parser);
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
30
19744
2ca3b2969ad8 lib-http: request parser: Added support for explicitly finishing payload of previous request.
Stephan Bosch <stephan@rename-it.nl>
parents: 16753
diff changeset
31 int http_request_parse_finish_payload(
2ca3b2969ad8 lib-http: request parser: Added support for explicitly finishing payload of previous request.
Stephan Bosch <stephan@rename-it.nl>
parents: 16753
diff changeset
32 struct http_request_parser *parser,
2ca3b2969ad8 lib-http: request parser: Added support for explicitly finishing payload of previous request.
Stephan Bosch <stephan@rename-it.nl>
parents: 16753
diff changeset
33 enum http_request_parse_error *error_code_r,
2ca3b2969ad8 lib-http: request parser: Added support for explicitly finishing payload of previous request.
Stephan Bosch <stephan@rename-it.nl>
parents: 16753
diff changeset
34 const char **error_r);
2ca3b2969ad8 lib-http: request parser: Added support for explicitly finishing payload of previous request.
Stephan Bosch <stephan@rename-it.nl>
parents: 16753
diff changeset
35
16604
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
36 int http_request_parse_next(struct http_request_parser *parser,
16741
b172c130df9b lib-http: Adjusted message parser to accept pool from caller.
Stephan Bosch <stephan@rename-it.nl>
parents: 16740
diff changeset
37 pool_t pool, struct http_request *request,
16749
28e5d58e49dc lib-http: Adjusted message and request parsers to return an error code.
Stephan Bosch <stephan@rename-it.nl>
parents: 16745
diff changeset
38 enum http_request_parse_error *error_code_r, const char **error_r);
16604
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
39
16752
e53f5173fa2d lib-http: http-request-parser: Added function to test whether payload from previous request is still being parsed.
Stephan Bosch <stephan@rename-it.nl>
parents: 16751
diff changeset
40 bool http_request_parser_pending_payload(struct http_request_parser *parser);
e53f5173fa2d lib-http: http-request-parser: Added function to test whether payload from previous request is still being parsed.
Stephan Bosch <stephan@rename-it.nl>
parents: 16751
diff changeset
41
16604
c55bd41133a2 lib-http: Implemented http-request-parser for HTTP servers.
Timo Sirainen <tss@iki.fi>
parents:
diff changeset
42 #endif