4
#include "http-header.h"
8
#define HTTP_REQUEST_DEFAULT_MAX_TARGET_LENGTH (8 * 1024)
9
#define HTTP_REQUEST_DEFAULT_MAX_HEADER_SIZE (200 * 1024)
10
#define HTTP_REQUEST_DEFAULT_MAX_HEADER_FIELD_SIZE (8 * 1024)
11
#define HTTP_REQUEST_DEFAULT_MAX_HEADER_FIELDS 50
12
#define HTTP_REQUEST_DEFAULT_MAX_PAYLOAD_SIZE (1 * 1024 * 1024)
14
struct http_request_limits {
15
uoff_t max_target_length;
16
uoff_t max_payload_size;
18
struct http_header_limits header;
21
enum http_request_target_format {
22
HTTP_REQUEST_TARGET_FORMAT_ORIGIN = 0,
23
HTTP_REQUEST_TARGET_FORMAT_ABSOLUTE,
24
HTTP_REQUEST_TARGET_FORMAT_AUTHORITY,
25
HTTP_REQUEST_TARGET_FORMAT_ASTERISK
28
struct http_request_target {
29
enum http_request_target_format format;
36
const char *target_raw;
37
struct http_request_target target;
39
unsigned char version_major;
40
unsigned char version_minor;
43
const struct http_header *header;
44
struct istream *payload;
46
ARRAY_TYPE(const_string) connection_options;
48
unsigned int connection_close:1;
49
unsigned int expect_100_continue:1;
53
http_request_method_is(const struct http_request *req, const char *method)
55
if (req->method == NULL)
58
return (strcmp(req->method, method) == 0);
61
static inline const struct http_header_field *
62
http_request_header_find(const struct http_request *req, const char *name)
64
return http_header_field_find(req->header, name);
67
static inline const char *
68
http_request_header_get(const struct http_request *req, const char *name)
70
return http_header_field_get(req->header, name);
73
static inline const ARRAY_TYPE(http_header_field) *
74
http_request_header_get_fields(const struct http_request *req)
76
return http_header_get_fields(req->header);
79
bool http_request_has_connection_option(const struct http_request *req,
81
int http_request_get_payload_size(const struct http_request *req,