Mercurial > dovecot > core-2.2
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 |
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 |