Mercurial > hg > nginx-ranges
annotate src/http/ngx_http_request.h @ 424:44a61c599bb2
Merge with current.
author | Maxim Dounin <mdounin@mdounin.ru> |
---|---|
date | Wed, 15 Oct 2008 15:39:40 +0400 |
parents | c65888a079bf b246022ef454 |
children | 8fbdd980b527 |
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; | |
406 | 217 unsigned msie6:1; |
50 | 218 unsigned opera:1; |
219 unsigned gecko:1; | |
220 unsigned konqueror:1; | |
0 | 221 } ngx_http_headers_in_t; |
222 | |
223 | |
224 typedef struct { | |
50 | 225 ngx_list_t headers; |
0 | 226 |
50 | 227 ngx_uint_t status; |
228 ngx_str_t status_line; | |
0 | 229 |
50 | 230 ngx_table_elt_t *server; |
231 ngx_table_elt_t *date; | |
232 ngx_table_elt_t *content_length; | |
233 ngx_table_elt_t *content_encoding; | |
234 ngx_table_elt_t *location; | |
348 | 235 ngx_table_elt_t *refresh; |
50 | 236 ngx_table_elt_t *last_modified; |
237 ngx_table_elt_t *content_range; | |
238 ngx_table_elt_t *accept_ranges; | |
52 | 239 ngx_table_elt_t *www_authenticate; |
50 | 240 ngx_table_elt_t *expires; |
241 ngx_table_elt_t *etag; | |
0 | 242 |
206 | 243 ngx_str_t *override_charset; |
244 | |
245 size_t content_type_len; | |
58 | 246 ngx_str_t content_type; |
50 | 247 ngx_str_t charset; |
394 | 248 u_char *content_type_lowcase; |
249 ngx_uint_t content_type_hash; | |
206 | 250 |
58 | 251 ngx_array_t cache_control; |
252 | |
50 | 253 off_t content_length_n; |
254 time_t date_time; | |
255 time_t last_modified_time; | |
0 | 256 } ngx_http_headers_out_t; |
257 | |
258 | |
28 | 259 typedef void (*ngx_http_client_body_handler_pt)(ngx_http_request_t *r); |
260 | |
0 | 261 typedef struct { |
28 | 262 ngx_temp_file_t *temp_file; |
263 ngx_chain_t *bufs; | |
264 ngx_buf_t *buf; | |
212 | 265 off_t rest; |
182 | 266 ngx_chain_t *to_write; |
28 | 267 ngx_http_client_body_handler_pt post_handler; |
0 | 268 } ngx_http_request_body_t; |
269 | |
270 | |
271 typedef struct { | |
50 | 272 ngx_http_request_t *request; |
0 | 273 |
50 | 274 ngx_buf_t **busy; |
275 ngx_int_t nbusy; | |
0 | 276 |
50 | 277 ngx_buf_t **free; |
278 ngx_int_t nfree; | |
0 | 279 |
50 | 280 ngx_uint_t pipeline; /* unsigned pipeline:1; */ |
0 | 281 } ngx_http_connection_t; |
282 | |
283 | |
326 | 284 typedef struct ngx_http_server_name_s ngx_http_server_name_t; |
285 | |
286 | |
287 typedef struct { | |
288 ngx_hash_combined_t names; | |
289 | |
290 ngx_uint_t nregex; | |
291 ngx_http_server_name_t *regex; | |
292 } ngx_http_virtual_names_t; | |
142 | 293 |
294 | |
118 | 295 typedef void (*ngx_http_cleanup_pt)(void *data); |
296 | |
297 typedef struct ngx_http_cleanup_s ngx_http_cleanup_t; | |
298 | |
299 struct ngx_http_cleanup_s { | |
142 | 300 ngx_http_cleanup_pt handler; |
301 void *data; | |
302 ngx_http_cleanup_t *next; | |
118 | 303 }; |
304 | |
305 | |
248 | 306 typedef ngx_int_t (*ngx_http_post_subrequest_pt)(ngx_http_request_t *r, |
307 void *data, ngx_int_t rc); | |
308 | |
309 typedef struct { | |
310 ngx_http_post_subrequest_pt handler; | |
311 void *data; | |
312 } ngx_http_post_subrequest_t; | |
313 | |
314 | |
58 | 315 typedef struct ngx_http_postponed_request_s ngx_http_postponed_request_t; |
316 | |
317 struct ngx_http_postponed_request_s { | |
84 | 318 ngx_http_request_t *request; |
319 ngx_chain_t *out; | |
320 ngx_http_postponed_request_t *next; | |
58 | 321 }; |
322 | |
323 | |
0 | 324 typedef ngx_int_t (*ngx_http_handler_pt)(ngx_http_request_t *r); |
58 | 325 typedef void (*ngx_http_event_handler_pt)(ngx_http_request_t *r); |
326 | |
0 | 327 |
328 struct ngx_http_request_s { | |
50 | 329 uint32_t signature; /* "HTTP" */ |
0 | 330 |
50 | 331 ngx_connection_t *connection; |
0 | 332 |
50 | 333 void **ctx; |
334 void **main_conf; | |
335 void **srv_conf; | |
336 void **loc_conf; | |
0 | 337 |
58 | 338 ngx_http_event_handler_pt read_event_handler; |
339 ngx_http_event_handler_pt write_event_handler; | |
340 | |
50 | 341 ngx_http_cache_t *cache; |
0 | 342 |
50 | 343 ngx_http_upstream_t *upstream; |
296 | 344 ngx_array_t *upstream_states; |
345 /* of ngx_http_upstream_state_t */ | |
28 | 346 |
50 | 347 ngx_pool_t *pool; |
348 ngx_buf_t *header_in; | |
0 | 349 |
50 | 350 ngx_http_headers_in_t headers_in; |
351 ngx_http_headers_out_t headers_out; | |
0 | 352 |
50 | 353 ngx_http_request_body_t *request_body; |
0 | 354 |
50 | 355 time_t lingering_time; |
298 | 356 time_t start_sec; |
357 ngx_msec_t start_msec; | |
0 | 358 |
50 | 359 ngx_uint_t method; |
360 ngx_uint_t http_version; | |
126 | 361 |
50 | 362 ngx_str_t request_line; |
363 ngx_str_t uri; | |
364 ngx_str_t args; | |
365 ngx_str_t exten; | |
366 ngx_str_t unparsed_uri; | |
0 | 367 |
50 | 368 ngx_str_t method_name; |
369 ngx_str_t http_protocol; | |
126 | 370 |
58 | 371 ngx_chain_t *out; |
50 | 372 ngx_http_request_t *main; |
58 | 373 ngx_http_request_t *parent; |
374 ngx_http_postponed_request_t *postponed; | |
248 | 375 ngx_http_post_subrequest_t *post_subrequest; |
0 | 376 |
50 | 377 uint32_t in_addr; |
378 ngx_uint_t port; | |
379 ngx_str_t *port_text; /* ":80" */ | |
142 | 380 ngx_http_virtual_names_t *virtual_names; |
0 | 381 |
50 | 382 ngx_int_t phase_handler; |
383 ngx_http_handler_pt content_handler; | |
92 | 384 ngx_uint_t access_code; |
34 | 385 |
122 | 386 ngx_http_variable_value_t *variables; |
50 | 387 |
76 | 388 size_t limit_rate; |
389 | |
0 | 390 /* used to learn the Apache compatible response length without a header */ |
50 | 391 size_t header_size; |
0 | 392 |
212 | 393 off_t request_length; |
24 | 394 |
50 | 395 ngx_uint_t err_status; |
0 | 396 |
50 | 397 ngx_http_connection_t *http_connection; |
0 | 398 |
58 | 399 ngx_http_log_handler_pt log_handler; |
400 | |
118 | 401 ngx_http_cleanup_t *cleanup; |
402 | |
50 | 403 unsigned http_state:4; |
0 | 404 |
2 | 405 /* URI with "/." and on Win32 with "//" */ |
50 | 406 unsigned complex_uri:1; |
34 | 407 |
2 | 408 /* URI with "%" */ |
50 | 409 unsigned quoted_uri:1; |
34 | 410 |
411 /* URI with "+" */ | |
50 | 412 unsigned plus_in_uri:1; |
34 | 413 |
38 | 414 /* URI with "\0" or "%00" */ |
50 | 415 unsigned zero_in_uri:1; |
38 | 416 |
60 | 417 unsigned invalid_header:1; |
418 | |
58 | 419 unsigned valid_location:1; |
54 | 420 unsigned valid_unparsed_uri:1; |
50 | 421 unsigned uri_changed:1; |
422 unsigned uri_changes:4; | |
34 | 423 |
182 | 424 unsigned request_body_in_single_buf:1; |
425 unsigned request_body_in_file_only:1; | |
426 unsigned request_body_in_persistent_file:1; | |
278 | 427 unsigned request_body_in_clean_file:1; |
182 | 428 unsigned request_body_file_group_access:1; |
186 | 429 unsigned request_body_file_log_level:3; |
182 | 430 |
146 | 431 unsigned fast_subrequest:1; |
248 | 432 unsigned subrequest_in_memory:1; |
146 | 433 |
358 | 434 unsigned gzip:2; |
435 | |
50 | 436 unsigned proxy:1; |
437 unsigned bypass_cache:1; | |
438 unsigned no_cache:1; | |
0 | 439 |
272 | 440 /* |
441 * instead of using the request context data in ngx_http_limit_zone_module | |
442 * we use the single bit in the request structure | |
443 */ | |
444 unsigned limit_zone_set:1; | |
445 | |
0 | 446 #if 0 |
340 | 447 unsigned cacheable:1; |
0 | 448 #endif |
58 | 449 |
50 | 450 unsigned pipeline:1; |
451 unsigned plain_http:1; | |
452 unsigned chunked:1; | |
453 unsigned header_only:1; | |
238 | 454 unsigned zero_body:1; |
50 | 455 unsigned keepalive:1; |
456 unsigned lingering_close:1; | |
86 | 457 unsigned discard_body:1; |
58 | 458 unsigned internal:1; |
228 | 459 unsigned error_page:1; |
178 | 460 unsigned post_action:1; |
461 unsigned request_complete:1; | |
216 | 462 unsigned request_output:1; |
463 unsigned header_sent:1; | |
384 | 464 unsigned expect_tested:1; |
388 | 465 unsigned root_tested:1; |
58 | 466 unsigned done:1; |
420 | 467 unsigned logged:1; |
72 | 468 unsigned utf8:1; |
0 | 469 |
254 | 470 unsigned buffered:4; |
471 | |
62 | 472 unsigned main_filter_need_in_memory:1; |
50 | 473 unsigned filter_need_in_memory:1; |
474 unsigned filter_need_temporary:1; | |
130 | 475 unsigned allow_ranges:1; |
391
1d9bef53cd8e
Range filter: late_ranges functionality.
Maxim Dounin <mdounin@mdounin.ru>
parents:
388
diff
changeset
|
476 unsigned late_ranges:1; |
0 | 477 |
478 #if (NGX_STAT_STUB) | |
50 | 479 unsigned stat_reading:1; |
480 unsigned stat_writing:1; | |
0 | 481 #endif |
482 | |
206 | 483 unsigned subrequests:8; |
484 | |
0 | 485 /* used to parse HTTP headers */ |
248 | 486 |
50 | 487 ngx_uint_t state; |
488 u_char *uri_start; | |
489 u_char *uri_end; | |
490 u_char *uri_ext; | |
491 u_char *args_start; | |
492 u_char *request_start; | |
493 u_char *request_end; | |
494 u_char *method_end; | |
495 u_char *schema_start; | |
496 u_char *schema_end; | |
497 u_char *host_start; | |
498 u_char *host_end; | |
499 u_char *port_start; | |
500 u_char *port_end; | |
501 u_char *header_name_start; | |
502 u_char *header_name_end; | |
503 u_char *header_start; | |
504 u_char *header_end; | |
198 | 505 |
248 | 506 unsigned http_minor:16; |
507 unsigned http_major:16; | |
508 | |
56 | 509 ngx_uint_t header_hash; |
198 | 510 ngx_uint_t lowcase_index; |
511 u_char lowcase_header[NGX_HTTP_LC_HEADER_LEN]; | |
0 | 512 }; |
513 | |
514 | |
118 | 515 extern ngx_http_header_t ngx_http_headers_in[]; |
516 extern ngx_http_header_out_t ngx_http_headers_out[]; | |
0 | 517 |
518 | |
519 #endif /* _NGX_HTTP_REQUEST_H_INCLUDED_ */ |