nxt_http.h (1113:15480b895603) nxt_http.h (1131:ec7d924d8dfb)
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#ifndef _NXT_HTTP_H_INCLUDED_
8#define _NXT_HTTP_H_INCLUDED_
9
10
11typedef enum {
12 NXT_HTTP_INVALID = 0,
13
1
2/*
3 * Copyright (C) Igor Sysoev
4 * Copyright (C) NGINX, Inc.
5 */
6
7#ifndef _NXT_HTTP_H_INCLUDED_
8#define _NXT_HTTP_H_INCLUDED_
9
10
11typedef enum {
12 NXT_HTTP_INVALID = 0,
13
14 NXT_HTTP_CONTINUE = 100,
15 NXT_HTTP_SWITCHING_PROTOCOLS = 101,
16
14 NXT_HTTP_OK = 200,
15 NXT_HTTP_NO_CONTENT = 204,
16
17 NXT_HTTP_MULTIPLE_CHOICES = 300,
18 NXT_HTTP_MOVED_PERMANENTLY = 301,
19 NXT_HTTP_FOUND = 302,
20 NXT_HTTP_SEE_OTHER = 303,
21 NXT_HTTP_NOT_MODIFIED = 304,
22
23 NXT_HTTP_BAD_REQUEST = 400,
24 NXT_HTTP_NOT_FOUND = 404,
25 NXT_HTTP_REQUEST_TIMEOUT = 408,
26 NXT_HTTP_LENGTH_REQUIRED = 411,
27 NXT_HTTP_PAYLOAD_TOO_LARGE = 413,
28 NXT_HTTP_URI_TOO_LONG = 414,
17 NXT_HTTP_OK = 200,
18 NXT_HTTP_NO_CONTENT = 204,
19
20 NXT_HTTP_MULTIPLE_CHOICES = 300,
21 NXT_HTTP_MOVED_PERMANENTLY = 301,
22 NXT_HTTP_FOUND = 302,
23 NXT_HTTP_SEE_OTHER = 303,
24 NXT_HTTP_NOT_MODIFIED = 304,
25
26 NXT_HTTP_BAD_REQUEST = 400,
27 NXT_HTTP_NOT_FOUND = 404,
28 NXT_HTTP_REQUEST_TIMEOUT = 408,
29 NXT_HTTP_LENGTH_REQUIRED = 411,
30 NXT_HTTP_PAYLOAD_TOO_LARGE = 413,
31 NXT_HTTP_URI_TOO_LONG = 414,
32 NXT_HTTP_UPGRADE_REQUIRED = 426,
29 NXT_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
30
31 NXT_HTTP_TO_HTTPS = 497,
32
33 NXT_HTTP_INTERNAL_SERVER_ERROR = 500,
34 NXT_HTTP_NOT_IMPLEMENTED = 501,
35 NXT_HTTP_BAD_GATEWAY = 502,
36 NXT_HTTP_SERVICE_UNAVAILABLE = 503,

--- 19 unchanged lines hidden (view full) ---

56typedef struct {
57 nxt_work_handler_t ready_handler;
58 nxt_work_handler_t error_handler;
59} nxt_http_request_state_t;
60
61
62typedef struct nxt_h1proto_s nxt_h1proto_t;
63
33 NXT_HTTP_REQUEST_HEADER_FIELDS_TOO_LARGE = 431,
34
35 NXT_HTTP_TO_HTTPS = 497,
36
37 NXT_HTTP_INTERNAL_SERVER_ERROR = 500,
38 NXT_HTTP_NOT_IMPLEMENTED = 501,
39 NXT_HTTP_BAD_GATEWAY = 502,
40 NXT_HTTP_SERVICE_UNAVAILABLE = 503,

--- 19 unchanged lines hidden (view full) ---

60typedef struct {
61 nxt_work_handler_t ready_handler;
62 nxt_work_handler_t error_handler;
63} nxt_http_request_state_t;
64
65
66typedef struct nxt_h1proto_s nxt_h1proto_t;
67
68struct nxt_h1p_websocket_timer_s {
69 nxt_timer_t timer;
70 nxt_h1proto_t *h1p;
71 nxt_msec_t keepalive_interval;
72};
73
74
64typedef union {
65 void *any;
66 nxt_h1proto_t *h1;
67} nxt_http_proto_t;
68
69
70#define nxt_http_field_name_set(_field, _name) \
71 do { \

--- 22 unchanged lines hidden (view full) ---

94
95struct nxt_http_request_s {
96 nxt_http_proto_t proto;
97 nxt_socket_conf_joint_t *conf;
98
99 nxt_mp_t *mem_pool;
100
101 nxt_buf_t *body;
75typedef union {
76 void *any;
77 nxt_h1proto_t *h1;
78} nxt_http_proto_t;
79
80
81#define nxt_http_field_name_set(_field, _name) \
82 do { \

--- 22 unchanged lines hidden (view full) ---

105
106struct nxt_http_request_s {
107 nxt_http_proto_t proto;
108 nxt_socket_conf_joint_t *conf;
109
110 nxt_mp_t *mem_pool;
111
112 nxt_buf_t *body;
113 nxt_buf_t *ws_frame;
102 nxt_buf_t *out;
103 const nxt_http_request_state_t *state;
104
105 nxt_str_t host;
106 nxt_str_t server_name;
107 nxt_str_t target;
108 nxt_str_t version;
109 nxt_str_t *method;

--- 12 unchanged lines hidden (view full) ---

122
123 nxt_sockaddr_t *remote;
124 nxt_sockaddr_t *local;
125 void *tls;
126
127 nxt_timer_t timer;
128 void *timer_data;
129
114 nxt_buf_t *out;
115 const nxt_http_request_state_t *state;
116
117 nxt_str_t host;
118 nxt_str_t server_name;
119 nxt_str_t target;
120 nxt_str_t version;
121 nxt_str_t *method;

--- 12 unchanged lines hidden (view full) ---

134
135 nxt_sockaddr_t *remote;
136 nxt_sockaddr_t *local;
137 void *tls;
138
139 nxt_timer_t timer;
140 void *timer_data;
141
142 void *req_rpc_data;
143
130 nxt_buf_t *last;
131
132 nxt_http_response_t resp;
133
134 nxt_http_status_t status:16;
135
136 uint8_t pass_count; /* 8 bits */
137 nxt_http_protocol_t protocol:8; /* 2 bits */
138 uint8_t logged; /* 1 bit */
139 uint8_t header_sent; /* 1 bit */
140 uint8_t error; /* 1 bit */
144 nxt_buf_t *last;
145
146 nxt_http_response_t resp;
147
148 nxt_http_status_t status:16;
149
150 uint8_t pass_count; /* 8 bits */
151 nxt_http_protocol_t protocol:8; /* 2 bits */
152 uint8_t logged; /* 1 bit */
153 uint8_t header_sent; /* 1 bit */
154 uint8_t error; /* 1 bit */
155 uint8_t websocket_handshake; /* 1 bit */
141};
142
143
144typedef struct nxt_http_route_s nxt_http_route_t;
145
146
147struct nxt_http_pass_s {
148 nxt_http_pass_t *(*handler)(nxt_task_t *task,

--- 12 unchanged lines hidden (view full) ---

161 void (*body_read)(nxt_task_t *task, nxt_http_request_t *r);
162 void (*local_addr)(nxt_task_t *task, nxt_http_request_t *r);
163 void (*header_send)(nxt_task_t *task, nxt_http_request_t *r);
164 void (*send)(nxt_task_t *task, nxt_http_request_t *r, nxt_buf_t *out);
165 nxt_off_t (*body_bytes_sent)(nxt_task_t *task, nxt_http_proto_t proto);
166 void (*discard)(nxt_task_t *task, nxt_http_request_t *r, nxt_buf_t *last);
167 void (*close)(nxt_task_t *task, nxt_http_proto_t proto,
168 nxt_socket_conf_joint_t *joint);
156};
157
158
159typedef struct nxt_http_route_s nxt_http_route_t;
160
161
162struct nxt_http_pass_s {
163 nxt_http_pass_t *(*handler)(nxt_task_t *task,

--- 12 unchanged lines hidden (view full) ---

176 void (*body_read)(nxt_task_t *task, nxt_http_request_t *r);
177 void (*local_addr)(nxt_task_t *task, nxt_http_request_t *r);
178 void (*header_send)(nxt_task_t *task, nxt_http_request_t *r);
179 void (*send)(nxt_task_t *task, nxt_http_request_t *r, nxt_buf_t *out);
180 nxt_off_t (*body_bytes_sent)(nxt_task_t *task, nxt_http_proto_t proto);
181 void (*discard)(nxt_task_t *task, nxt_http_request_t *r, nxt_buf_t *last);
182 void (*close)(nxt_task_t *task, nxt_http_proto_t proto,
183 nxt_socket_conf_joint_t *joint);
184 void (*ws_frame_start)(nxt_task_t *task, nxt_http_request_t *r,
185 nxt_buf_t *ws_frame);
169} nxt_http_proto_table_t;
170
171
172nxt_int_t nxt_http_init(nxt_task_t *task, nxt_runtime_t *rt);
173nxt_int_t nxt_h1p_init(nxt_task_t *task, nxt_runtime_t *rt);
174nxt_int_t nxt_http_response_hash_init(nxt_task_t *task, nxt_runtime_t *rt);
175
176void nxt_http_conn_init(nxt_task_t *task, void *obj, void *data);
177nxt_http_request_t *nxt_http_request_create(nxt_task_t *task);
178void nxt_http_request_error(nxt_task_t *task, nxt_http_request_t *r,
179 nxt_http_status_t status);
180void nxt_http_request_read_body(nxt_task_t *task, nxt_http_request_t *r);
181void nxt_http_request_header_send(nxt_task_t *task, nxt_http_request_t *r);
186} nxt_http_proto_table_t;
187
188
189nxt_int_t nxt_http_init(nxt_task_t *task, nxt_runtime_t *rt);
190nxt_int_t nxt_h1p_init(nxt_task_t *task, nxt_runtime_t *rt);
191nxt_int_t nxt_http_response_hash_init(nxt_task_t *task, nxt_runtime_t *rt);
192
193void nxt_http_conn_init(nxt_task_t *task, void *obj, void *data);
194nxt_http_request_t *nxt_http_request_create(nxt_task_t *task);
195void nxt_http_request_error(nxt_task_t *task, nxt_http_request_t *r,
196 nxt_http_status_t status);
197void nxt_http_request_read_body(nxt_task_t *task, nxt_http_request_t *r);
198void nxt_http_request_header_send(nxt_task_t *task, nxt_http_request_t *r);
199void nxt_http_request_ws_frame_start(nxt_task_t *task, nxt_http_request_t *r,
200 nxt_buf_t *ws_frame);
182void nxt_http_request_send(nxt_task_t *task, nxt_http_request_t *r,
183 nxt_buf_t *out);
184nxt_buf_t *nxt_http_buf_mem(nxt_task_t *task, nxt_http_request_t *r,
185 size_t size);
186nxt_buf_t *nxt_http_buf_last(nxt_http_request_t *r);
187void nxt_http_request_error_handler(nxt_task_t *task, void *obj, void *data);
201void nxt_http_request_send(nxt_task_t *task, nxt_http_request_t *r,
202 nxt_buf_t *out);
203nxt_buf_t *nxt_http_buf_mem(nxt_task_t *task, nxt_http_request_t *r,
204 size_t size);
205nxt_buf_t *nxt_http_buf_last(nxt_http_request_t *r);
206void nxt_http_request_error_handler(nxt_task_t *task, void *obj, void *data);
207void nxt_http_request_close_handler(nxt_task_t *task, void *obj, void *data);
188
189nxt_int_t nxt_http_request_host(void *ctx, nxt_http_field_t *field,
190 uintptr_t data);
191nxt_int_t nxt_http_request_field(void *ctx, nxt_http_field_t *field,
192 uintptr_t offset);
193nxt_int_t nxt_http_request_content_length(void *ctx, nxt_http_field_t *field,
194 uintptr_t data);
195

--- 11 unchanged lines hidden (view full) ---

207 nxt_http_request_t *r, nxt_http_pass_t *pass);
208
209extern nxt_time_string_t nxt_http_date_cache;
210
211extern nxt_lvlhsh_t nxt_response_fields_hash;
212
213extern const nxt_http_proto_table_t nxt_http_proto[];
214
208
209nxt_int_t nxt_http_request_host(void *ctx, nxt_http_field_t *field,
210 uintptr_t data);
211nxt_int_t nxt_http_request_field(void *ctx, nxt_http_field_t *field,
212 uintptr_t offset);
213nxt_int_t nxt_http_request_content_length(void *ctx, nxt_http_field_t *field,
214 uintptr_t data);
215

--- 11 unchanged lines hidden (view full) ---

227 nxt_http_request_t *r, nxt_http_pass_t *pass);
228
229extern nxt_time_string_t nxt_http_date_cache;
230
231extern nxt_lvlhsh_t nxt_response_fields_hash;
232
233extern const nxt_http_proto_table_t nxt_http_proto[];
234
235void nxt_h1p_websocket_first_frame_start(nxt_task_t *task,
236 nxt_http_request_t *r, nxt_buf_t *ws_frame);
237void nxt_h1p_websocket_frame_start(nxt_task_t *task, nxt_http_request_t *r,
238 nxt_buf_t *ws_frame);
239void nxt_h1p_complete_buffers(nxt_task_t *task, nxt_h1proto_t *h1p);
240nxt_msec_t nxt_h1p_conn_request_timer_value(nxt_conn_t *c, uintptr_t data);
215
241
242extern const nxt_conn_state_t nxt_h1p_idle_close_state;
243
216#endif /* _NXT_HTTP_H_INCLUDED_ */
244#endif /* _NXT_HTTP_H_INCLUDED_ */