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