Mercurial > hg > nginx-ranges
annotate src/http/ngx_http_request.h @ 522:40fd8d7b82f9
Merge with current.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Sun, 02 Aug 2009 05:44:15 +0400 |
parents | 8fbdd980b527 24b676623d4f |
children | 5f4de8cf0d9d |
rev | line source |
---|---|
0 | 1 |
2 /* | |
3 * Copyright (C) Igor Sysoev | |
4 */ | |
5 | |
6 | |
7 #ifndef _NGX_HTTP_REQUEST_H_INCLUDED_ | |
8 #define _NGX_HTTP_REQUEST_H_INCLUDED_ | |
9 | |
10 | |
200 | 11 #define NGX_HTTP_MAX_URI_CHANGES 10 |
206 | 12 #define NGX_HTTP_MAX_SUBREQUESTS 50 |
465 | 13 #define NGX_HTTP_MAX_CAPTURES 9 |
58 | 14 |
198 | 15 /* must be 2^n */ |
16 #define NGX_HTTP_LC_HEADER_LEN 32 | |
17 | |
58 | 18 |
0 | 19 #define NGX_HTTP_DISCARD_BUFFER_SIZE 4096 |
20 #define NGX_HTTP_LINGERING_BUFFER_SIZE 4096 | |
21 | |
22 | |
23 #define NGX_HTTP_VERSION_9 9 | |
24 #define NGX_HTTP_VERSION_10 1000 | |
25 #define NGX_HTTP_VERSION_11 1001 | |
26 | |
182 | 27 #define NGX_HTTP_UNKNOWN 0x0001 |
28 #define NGX_HTTP_GET 0x0002 | |
29 #define NGX_HTTP_HEAD 0x0004 | |
30 #define NGX_HTTP_POST 0x0008 | |
31 #define NGX_HTTP_PUT 0x0010 | |
32 #define NGX_HTTP_DELETE 0x0020 | |
186 | 33 #define NGX_HTTP_MKCOL 0x0040 |
256 | 34 #define NGX_HTTP_COPY 0x0080 |
35 #define NGX_HTTP_MOVE 0x0100 | |
36 #define NGX_HTTP_OPTIONS 0x0200 | |
37 #define NGX_HTTP_PROPFIND 0x0400 | |
38 #define NGX_HTTP_PROPPATCH 0x0800 | |
39 #define NGX_HTTP_LOCK 0x1000 | |
40 #define NGX_HTTP_UNLOCK 0x2000 | |
294 | 41 #define NGX_HTTP_TRACE 0x4000 |
0 | 42 |
43 #define NGX_HTTP_CONNECTION_CLOSE 1 | |
44 #define NGX_HTTP_CONNECTION_KEEP_ALIVE 2 | |
45 | |
46 | |
47 #define NGX_NONE 1 | |
48 | |
49 | |
50 #define NGX_HTTP_PARSE_HEADER_DONE 1 | |
51 | |
52 #define NGX_HTTP_CLIENT_ERROR 10 | |
53 #define NGX_HTTP_PARSE_INVALID_METHOD 10 | |
54 #define NGX_HTTP_PARSE_INVALID_REQUEST 11 | |
54 | 55 #define NGX_HTTP_PARSE_INVALID_09_METHOD 12 |
0 | 56 |
54 | 57 #define NGX_HTTP_PARSE_INVALID_HEADER 13 |
0 | 58 |
248 | 59 |
122 | 60 #define NGX_HTTP_ZERO_IN_URI 1 |
248 | 61 #define NGX_HTTP_SUBREQUEST_IN_MEMORY 2 |
435 | 62 #define NGX_HTTP_SUBREQUEST_WAITED 4 |
122 | 63 |
0 | 64 |
65 #define NGX_HTTP_OK 200 | |
182 | 66 #define NGX_HTTP_CREATED 201 |
60 | 67 #define NGX_HTTP_NO_CONTENT 204 |
0 | 68 #define NGX_HTTP_PARTIAL_CONTENT 206 |
69 | |
70 #define NGX_HTTP_SPECIAL_RESPONSE 300 | |
71 #define NGX_HTTP_MOVED_PERMANENTLY 301 | |
72 #define NGX_HTTP_MOVED_TEMPORARILY 302 | |
73 #define NGX_HTTP_NOT_MODIFIED 304 | |
74 | |
75 #define NGX_HTTP_BAD_REQUEST 400 | |
52 | 76 #define NGX_HTTP_UNAUTHORIZED 401 |
0 | 77 #define NGX_HTTP_FORBIDDEN 403 |
78 #define NGX_HTTP_NOT_FOUND 404 | |
79 #define NGX_HTTP_NOT_ALLOWED 405 | |
80 #define NGX_HTTP_REQUEST_TIME_OUT 408 | |
186 | 81 #define NGX_HTTP_CONFLICT 409 |
130 | 82 #define NGX_HTTP_LENGTH_REQUIRED 411 |
276 | 83 #define NGX_HTTP_PRECONDITION_FAILED 412 |
0 | 84 #define NGX_HTTP_REQUEST_ENTITY_TOO_LARGE 413 |
85 #define NGX_HTTP_REQUEST_URI_TOO_LARGE 414 | |
186 | 86 #define NGX_HTTP_UNSUPPORTED_MEDIA_TYPE 415 |
0 | 87 #define NGX_HTTP_RANGE_NOT_SATISFIABLE 416 |
88 | |
89 | |
90 /* Our own HTTP codes */ | |
91 | |
136 | 92 /* The special code to close connection without any response */ |
93 #define NGX_HTTP_CLOSE 444 | |
94 | |
196 | 95 #define NGX_HTTP_OWN_CODES 495 |
96 | |
97 #define NGX_HTTPS_CERT_ERROR 495 | |
98 #define NGX_HTTPS_NO_CERT 496 | |
0 | 99 |
100 /* | |
101 * We use the special code for the plain HTTP requests that are sent to | |
126 | 102 * HTTPS port to distinguish it from 4XX in an error page redirection |
0 | 103 */ |
104 #define NGX_HTTP_TO_HTTPS 497 | |
105 | |
162 | 106 /* 498 is the canceled code for the requests with invalid host name */ |
0 | 107 |
108 /* | |
109 * HTTP does not define the code for the case when a client closed | |
110 * the connection while we are processing its request so we introduce | |
111 * own code to log such situation when a client has closed the connection | |
112 * before we even try to send the HTTP header to it | |
113 */ | |
114 #define NGX_HTTP_CLIENT_CLOSED_REQUEST 499 | |
115 | |
116 | |
117 #define NGX_HTTP_INTERNAL_SERVER_ERROR 500 | |
118 #define NGX_HTTP_NOT_IMPLEMENTED 501 | |
119 #define NGX_HTTP_BAD_GATEWAY 502 | |
120 #define NGX_HTTP_SERVICE_UNAVAILABLE 503 | |
121 #define NGX_HTTP_GATEWAY_TIME_OUT 504 | |
186 | 122 #define NGX_HTTP_INSUFFICIENT_STORAGE 507 |
0 | 123 |
124 | |
254 | 125 #define NGX_HTTP_LOWLEVEL_BUFFERED 0xf0 |
126 #define NGX_HTTP_WRITE_BUFFERED 0x10 | |
127 #define NGX_HTTP_GZIP_BUFFERED 0x20 | |
128 #define NGX_HTTP_SSI_BUFFERED 0x01 | |
296 | 129 #define NGX_HTTP_SUB_BUFFERED 0x02 |
130 #define NGX_HTTP_COPY_BUFFERED 0x04 | |
146 | 131 |
132 | |
0 | 133 typedef enum { |
134 NGX_HTTP_INITING_REQUEST_STATE = 0, | |
135 NGX_HTTP_READING_REQUEST_STATE, | |
136 NGX_HTTP_PROCESS_REQUEST_STATE, | |
137 | |
138 NGX_HTTP_CONNECT_UPSTREAM_STATE, | |
139 NGX_HTTP_WRITING_UPSTREAM_STATE, | |
140 NGX_HTTP_READING_UPSTREAM_STATE, | |
141 | |
142 NGX_HTTP_WRITING_REQUEST_STATE, | |
143 NGX_HTTP_LINGERING_CLOSE_STATE, | |
144 NGX_HTTP_KEEPALIVE_STATE | |
145 } ngx_http_state_e; | |
146 | |
147 | |
148 typedef struct { | |
50 | 149 ngx_str_t name; |
150 ngx_uint_t offset; | |
58 | 151 ngx_http_header_handler_pt handler; |
0 | 152 } ngx_http_header_t; |
153 | |
154 | |
155 typedef struct { | |
58 | 156 ngx_str_t name; |
157 ngx_uint_t offset; | |
118 | 158 } ngx_http_header_out_t; |
58 | 159 |
160 | |
161 typedef struct { | |
50 | 162 ngx_list_t headers; |
0 | 163 |
50 | 164 ngx_table_elt_t *host; |
165 ngx_table_elt_t *connection; | |
166 ngx_table_elt_t *if_modified_since; | |
167 ngx_table_elt_t *user_agent; | |
168 ngx_table_elt_t *referer; | |
169 ngx_table_elt_t *content_length; | |
170 ngx_table_elt_t *content_type; | |
0 | 171 |
50 | 172 ngx_table_elt_t *range; |
346 | 173 ngx_table_elt_t *if_range; |
0 | 174 |
130 | 175 ngx_table_elt_t *transfer_encoding; |
384 | 176 ngx_table_elt_t *expect; |
130 | 177 |
0 | 178 #if (NGX_HTTP_GZIP) |
50 | 179 ngx_table_elt_t *accept_encoding; |
180 ngx_table_elt_t *via; | |
0 | 181 #endif |
182 | |
50 | 183 ngx_table_elt_t *authorization; |
0 | 184 |
50 | 185 ngx_table_elt_t *keep_alive; |
0 | 186 |
520 | 187 #if (NGX_HTTP_PROXY || NGX_HTTP_REALIP || NGX_HTTP_GEO) |
50 | 188 ngx_table_elt_t *x_forwarded_for; |
0 | 189 #endif |
190 | |
122 | 191 #if (NGX_HTTP_REALIP) |
192 ngx_table_elt_t *x_real_ip; | |
193 #endif | |
194 | |
38 | 195 #if (NGX_HTTP_HEADERS) |
50 | 196 ngx_table_elt_t *accept; |
197 ngx_table_elt_t *accept_language; | |
38 | 198 #endif |
199 | |
186 | 200 #if (NGX_HTTP_DAV) |
201 ngx_table_elt_t *depth; | |
202 ngx_table_elt_t *destination; | |
276 | 203 ngx_table_elt_t *overwrite; |
230 | 204 ngx_table_elt_t *date; |
186 | 205 #endif |
206 | |
52 | 207 ngx_str_t user; |
208 ngx_str_t passwd; | |
209 | |
50 | 210 ngx_array_t cookies; |
211 | |
376 | 212 ngx_str_t server; |
212 | 213 off_t content_length_n; |
50 | 214 time_t keep_alive_n; |
0 | 215 |
50 | 216 unsigned connection_type:2; |
217 unsigned msie:1; | |
218 unsigned msie4:1; | |
406 | 219 unsigned msie6:1; |
50 | 220 unsigned opera:1; |
221 unsigned gecko:1; | |
222 unsigned konqueror:1; | |
0 | 223 } ngx_http_headers_in_t; |
224 | |
225 | |
226 typedef struct { | |
50 | 227 ngx_list_t headers; |
0 | 228 |
50 | 229 ngx_uint_t status; |
230 ngx_str_t status_line; | |
0 | 231 |
50 | 232 ngx_table_elt_t *server; |
233 ngx_table_elt_t *date; | |
234 ngx_table_elt_t *content_length; | |
235 ngx_table_elt_t *content_encoding; | |
236 ngx_table_elt_t *location; | |
348 | 237 ngx_table_elt_t *refresh; |
50 | 238 ngx_table_elt_t *last_modified; |
239 ngx_table_elt_t *content_range; | |
240 ngx_table_elt_t *accept_ranges; | |
52 | 241 ngx_table_elt_t *www_authenticate; |
50 | 242 ngx_table_elt_t *expires; |
243 ngx_table_elt_t *etag; | |
0 | 244 |
206 | 245 ngx_str_t *override_charset; |
246 | |
247 size_t content_type_len; | |
58 | 248 ngx_str_t content_type; |
50 | 249 ngx_str_t charset; |
394 | 250 u_char *content_type_lowcase; |
251 ngx_uint_t content_type_hash; | |
206 | 252 |
58 | 253 ngx_array_t cache_control; |
254 | |
50 | 255 off_t content_length_n; |
256 time_t date_time; | |
257 time_t last_modified_time; | |
0 | 258 } ngx_http_headers_out_t; |
259 | |
260 | |
28 | 261 typedef void (*ngx_http_client_body_handler_pt)(ngx_http_request_t *r); |
262 | |
0 | 263 typedef struct { |
28 | 264 ngx_temp_file_t *temp_file; |
265 ngx_chain_t *bufs; | |
266 ngx_buf_t *buf; | |
212 | 267 off_t rest; |
182 | 268 ngx_chain_t *to_write; |
28 | 269 ngx_http_client_body_handler_pt post_handler; |
0 | 270 } ngx_http_request_body_t; |
271 | |
272 | |
273 typedef struct { | |
50 | 274 ngx_http_request_t *request; |
0 | 275 |
50 | 276 ngx_buf_t **busy; |
277 ngx_int_t nbusy; | |
0 | 278 |
50 | 279 ngx_buf_t **free; |
280 ngx_int_t nfree; | |
0 | 281 |
50 | 282 ngx_uint_t pipeline; /* unsigned pipeline:1; */ |
0 | 283 } ngx_http_connection_t; |
284 | |
285 | |
326 | 286 typedef struct ngx_http_server_name_s ngx_http_server_name_t; |
287 | |
288 | |
289 typedef struct { | |
290 ngx_hash_combined_t names; | |
291 | |
292 ngx_uint_t nregex; | |
293 ngx_http_server_name_t *regex; | |
294 } ngx_http_virtual_names_t; | |
142 | 295 |
296 | |
118 | 297 typedef void (*ngx_http_cleanup_pt)(void *data); |
298 | |
299 typedef struct ngx_http_cleanup_s ngx_http_cleanup_t; | |
300 | |
301 struct ngx_http_cleanup_s { | |
142 | 302 ngx_http_cleanup_pt handler; |
303 void *data; | |
304 ngx_http_cleanup_t *next; | |
118 | 305 }; |
306 | |
307 | |
248 | 308 typedef ngx_int_t (*ngx_http_post_subrequest_pt)(ngx_http_request_t *r, |
309 void *data, ngx_int_t rc); | |
310 | |
311 typedef struct { | |
312 ngx_http_post_subrequest_pt handler; | |
313 void *data; | |
314 } ngx_http_post_subrequest_t; | |
315 | |
316 | |
58 | 317 typedef struct ngx_http_postponed_request_s ngx_http_postponed_request_t; |
318 | |
319 struct ngx_http_postponed_request_s { | |
84 | 320 ngx_http_request_t *request; |
321 ngx_chain_t *out; | |
322 ngx_http_postponed_request_t *next; | |
58 | 323 }; |
324 | |
325 | |
435 | 326 typedef struct ngx_http_posted_request_s ngx_http_posted_request_t; |
327 | |
328 struct ngx_http_posted_request_s { | |
329 ngx_http_request_t *request; | |
330 ngx_http_posted_request_t *next; | |
331 }; | |
332 | |
333 | |
0 | 334 typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r); |
58 | 335 typedef void (*ngx_http_event_handler_pt)(ngx_http_request_t *r); |
336 | |
0 | 337 |
338 struct ngx_http_request_s { | |
50 | 339 uint32_t signature; /* "HTTP" */ |
0 | 340 |
50 | 341 ngx_connection_t *connection; |
0 | 342 |
50 | 343 void **ctx; |
344 void **main_conf; | |
345 void **srv_conf; | |
346 void **loc_conf; | |
0 | 347 |
58 | 348 ngx_http_event_handler_pt read_event_handler; |
349 ngx_http_event_handler_pt write_event_handler; | |
350 | |
473 | 351 #if (NGX_HTTP_CACHE) |
50 | 352 ngx_http_cache_t *cache; |
473 | 353 #endif |
0 | 354 |
50 | 355 ngx_http_upstream_t *upstream; |
296 | 356 ngx_array_t *upstream_states; |
357 /* of ngx_http_upstream_state_t */ | |
28 | 358 |
50 | 359 ngx_pool_t *pool; |
360 ngx_buf_t *header_in; | |
0 | 361 |
50 | 362 ngx_http_headers_in_t headers_in; |
363 ngx_http_headers_out_t headers_out; | |
0 | 364 |
50 | 365 ngx_http_request_body_t *request_body; |
0 | 366 |
50 | 367 time_t lingering_time; |
298 | 368 time_t start_sec; |
369 ngx_msec_t start_msec; | |
0 | 370 |
50 | 371 ngx_uint_t method; |
372 ngx_uint_t http_version; | |
126 | 373 |
50 | 374 ngx_str_t request_line; |
375 ngx_str_t uri; | |
376 ngx_str_t args; | |
377 ngx_str_t exten; | |
378 ngx_str_t unparsed_uri; | |
0 | 379 |
50 | 380 ngx_str_t method_name; |
381 ngx_str_t http_protocol; | |
126 | 382 |
58 | 383 ngx_chain_t *out; |
50 | 384 ngx_http_request_t *main; |
58 | 385 ngx_http_request_t *parent; |
386 ngx_http_postponed_request_t *postponed; | |
248 | 387 ngx_http_post_subrequest_t *post_subrequest; |
435 | 388 ngx_http_posted_request_t *posted_requests; |
0 | 389 |
487 | 390 ngx_http_virtual_names_t *virtual_names; |
391 | |
50 | 392 ngx_int_t phase_handler; |
393 ngx_http_handler_pt content_handler; | |
92 | 394 ngx_uint_t access_code; |
34 | 395 |
122 | 396 ngx_http_variable_value_t *variables; |
50 | 397 |
465 | 398 #if (NGX_PCRE) |
399 ngx_uint_t ncaptures; | |
400 int *captures; | |
401 u_char *captures_data; | |
402 #endif | |
403 | |
76 | 404 size_t limit_rate; |
405 | |
0 | 406 /* used to learn the Apache compatible response length without a header */ |
50 | 407 size_t header_size; |
0 | 408 |
212 | 409 off_t request_length; |
24 | 410 |
50 | 411 ngx_uint_t err_status; |
0 | 412 |
50 | 413 ngx_http_connection_t *http_connection; |
0 | 414 |
58 | 415 ngx_http_log_handler_pt log_handler; |
416 | |
118 | 417 ngx_http_cleanup_t *cleanup; |
418 | |
50 | 419 unsigned http_state:4; |
0 | 420 |
2 | 421 /* URI with "/." and on Win32 with "//" */ |
50 | 422 unsigned complex_uri:1; |
34 | 423 |
2 | 424 /* URI with "%" */ |
50 | 425 unsigned quoted_uri:1; |
34 | 426 |
427 /* URI with "+" */ | |
50 | 428 unsigned plus_in_uri:1; |
34 | 429 |
38 | 430 /* URI with "\0" or "%00" */ |
50 | 431 unsigned zero_in_uri:1; |
38 | 432 |
60 | 433 unsigned invalid_header:1; |
434 | |
58 | 435 unsigned valid_location:1; |
54 | 436 unsigned valid_unparsed_uri:1; |
50 | 437 unsigned uri_changed:1; |
438 unsigned uri_changes:4; | |
34 | 439 |
182 | 440 unsigned request_body_in_single_buf:1; |
441 unsigned request_body_in_file_only:1; | |
442 unsigned request_body_in_persistent_file:1; | |
278 | 443 unsigned request_body_in_clean_file:1; |
182 | 444 unsigned request_body_file_group_access:1; |
186 | 445 unsigned request_body_file_log_level:3; |
182 | 446 |
248 | 447 unsigned subrequest_in_memory:1; |
435 | 448 unsigned waited:1; |
146 | 449 |
473 | 450 #if (NGX_HTTP_CACHE) |
451 unsigned cached:1; | |
452 #endif | |
358 | 453 unsigned gzip:2; |
454 | |
50 | 455 unsigned proxy:1; |
456 unsigned bypass_cache:1; | |
457 unsigned no_cache:1; | |
0 | 458 |
272 | 459 /* |
425 | 460 * instead of using the request context data in |
427 | 461 * ngx_http_limit_zone_module and ngx_http_limit_req_module |
425 | 462 * we use the single bits in the request structure |
272 | 463 */ |
464 unsigned limit_zone_set:1; | |
425 | 465 unsigned limit_req_set:1; |
272 | 466 |
0 | 467 #if 0 |
340 | 468 unsigned cacheable:1; |
0 | 469 #endif |
58 | 470 |
50 | 471 unsigned pipeline:1; |
472 unsigned plain_http:1; | |
473 unsigned chunked:1; | |
474 unsigned header_only:1; | |
238 | 475 unsigned zero_body:1; |
50 | 476 unsigned keepalive:1; |
477 unsigned lingering_close:1; | |
86 | 478 unsigned discard_body:1; |
58 | 479 unsigned internal:1; |
228 | 480 unsigned error_page:1; |
503 | 481 unsigned ignore_content_encoding:1; |
497 | 482 unsigned filter_finalize:1; |
178 | 483 unsigned post_action:1; |
484 unsigned request_complete:1; | |
216 | 485 unsigned request_output:1; |
486 unsigned header_sent:1; | |
384 | 487 unsigned expect_tested:1; |
388 | 488 unsigned root_tested:1; |
58 | 489 unsigned done:1; |
420 | 490 unsigned logged:1; |
0 | 491 |
254 | 492 unsigned buffered:4; |
493 | |
62 | 494 unsigned main_filter_need_in_memory:1; |
50 | 495 unsigned filter_need_in_memory:1; |
496 unsigned filter_need_temporary:1; | |
130 | 497 unsigned allow_ranges:1; |
391
1d9bef53cd8e
Range filter: late_ranges functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
388
diff
changeset
|
498 unsigned late_ranges:1; |
0 | 499 |
500 #if (NGX_STAT_STUB) | |
50 | 501 unsigned stat_reading:1; |
502 unsigned stat_writing:1; | |
0 | 503 #endif |
504 | |
206 | 505 unsigned subrequests:8; |
506 | |
0 | 507 /* used to parse HTTP headers */ |
248 | 508 |
50 | 509 ngx_uint_t state; |
510 u_char *uri_start; | |
511 u_char *uri_end; | |
512 u_char *uri_ext; | |
513 u_char *args_start; | |
514 u_char *request_start; | |
515 u_char *request_end; | |
516 u_char *method_end; | |
517 u_char *schema_start; | |
518 u_char *schema_end; | |
519 u_char *host_start; | |
520 u_char *host_end; | |
521 u_char *port_start; | |
522 u_char *port_end; | |
523 u_char *header_name_start; | |
524 u_char *header_name_end; | |
525 u_char *header_start; | |
526 u_char *header_end; | |
198 | 527 |
248 | 528 unsigned http_minor:16; |
529 unsigned http_major:16; | |
530 | |
56 | 531 ngx_uint_t header_hash; |
198 | 532 ngx_uint_t lowcase_index; |
533 u_char lowcase_header[NGX_HTTP_LC_HEADER_LEN]; | |
0 | 534 }; |
535 | |
536 | |
118 | 537 extern ngx_http_header_t ngx_http_headers_in[]; |
538 extern ngx_http_header_out_t ngx_http_headers_out[]; | |
0 | 539 |
540 | |
541 #endif /* _NGX_HTTP_REQUEST_H_INCLUDED_ */ |