annotate src/http/ngx_http_request.c @ 8385:fb7422074258 quic

Added generation of CC frames with error on connection termination. When an error occurs, then c->quic->error field may be populated with an appropriate error code, and the CONNECTION CLOSE frame will be sent to the peer before the connection is closed. Otherwise, the error treated as internal and INTERNAL_ERROR code is sent. The pkt->error field is populated by functions processing packets to indicate an error when it does not fit into pass/fail return status.
author Vladimir Homutov <vl@nginx.com>
date Thu, 14 May 2020 15:54:45 +0300
parents 44cac24aaa44
children d2759e4cc437
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 439
diff changeset
2 /*
444
42d11f017717 nginx-0.1.0-2004-09-29-20:00:49 import; remove years from copyright
Igor Sysoev <igor@sysoev.ru>
parents: 441
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4313
diff changeset
4 * Copyright (C) Nginx, Inc.
441
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 439
diff changeset
5 */
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 439
diff changeset
6
da8c5707af39 nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents: 439
diff changeset
7
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
9 #include <ngx_core.h>
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
11
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
13 static void ngx_http_wait_request_handler(ngx_event_t *ev);
7462
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
14 static ngx_http_request_t *ngx_http_alloc_request(ngx_connection_t *c);
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
15 static void ngx_http_process_request_line(ngx_event_t *rev);
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
16 static void ngx_http_process_request_headers(ngx_event_t *rev);
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
17 static ssize_t ngx_http_read_request_header(ngx_http_request_t *r);
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
18 static ngx_int_t ngx_http_alloc_large_header_buffer(ngx_http_request_t *r,
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
19 ngx_uint_t request_line);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
20
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
21 static ngx_int_t ngx_http_process_header_line(ngx_http_request_t *r,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
22 ngx_table_elt_t *h, ngx_uint_t offset);
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
23 static ngx_int_t ngx_http_process_unique_header_line(ngx_http_request_t *r,
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
24 ngx_table_elt_t *h, ngx_uint_t offset);
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
25 static ngx_int_t ngx_http_process_multi_header_lines(ngx_http_request_t *r,
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
26 ngx_table_elt_t *h, ngx_uint_t offset);
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
27 static ngx_int_t ngx_http_process_host(ngx_http_request_t *r,
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
28 ngx_table_elt_t *h, ngx_uint_t offset);
1467
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
29 static ngx_int_t ngx_http_process_connection(ngx_http_request_t *r,
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
30 ngx_table_elt_t *h, ngx_uint_t offset);
2004
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
31 static ngx_int_t ngx_http_process_user_agent(ngx_http_request_t *r,
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
32 ngx_table_elt_t *h, ngx_uint_t offset);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
33
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
34 static ngx_int_t ngx_http_validate_host(ngx_str_t *host, ngx_pool_t *pool,
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
35 ngx_uint_t alloc);
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
36 static ngx_int_t ngx_http_set_virtual_server(ngx_http_request_t *r,
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
37 ngx_str_t *host);
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
38 static ngx_int_t ngx_http_find_virtual_server(ngx_connection_t *c,
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
39 ngx_http_virtual_names_t *virtual_names, ngx_str_t *host,
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
40 ngx_http_request_t *r, ngx_http_core_srv_conf_t **cscfp);
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
41
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
42 static void ngx_http_request_handler(ngx_event_t *ev);
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
43 static void ngx_http_terminate_request(ngx_http_request_t *r, ngx_int_t rc);
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
44 static void ngx_http_terminate_handler(ngx_http_request_t *r);
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
45 static void ngx_http_finalize_connection(ngx_http_request_t *r);
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
46 static ngx_int_t ngx_http_set_write_handler(ngx_http_request_t *r);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
47 static void ngx_http_writer(ngx_http_request_t *r);
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
48 static void ngx_http_request_finalizer(ngx_http_request_t *r);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
49
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
50 static void ngx_http_set_keepalive(ngx_http_request_t *r);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
51 static void ngx_http_keepalive_handler(ngx_event_t *ev);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
52 static void ngx_http_set_lingering_close(ngx_http_request_t *r);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
53 static void ngx_http_lingering_close_handler(ngx_event_t *ev);
613
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
54 static ngx_int_t ngx_http_post_action(ngx_http_request_t *r);
531
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
55 static void ngx_http_close_request(ngx_http_request_t *r, ngx_int_t error);
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
56 static void ngx_http_log_request(ngx_http_request_t *r);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
57
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
58 static u_char *ngx_http_log_error(ngx_log_t *log, u_char *buf, size_t len);
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
59 static u_char *ngx_http_log_error_handler(ngx_http_request_t *r,
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
60 ngx_http_request_t *sr, u_char *buf, size_t len);
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
61
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
62 #if (NGX_HTTP_SSL)
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
63 static void ngx_http_ssl_handshake(ngx_event_t *rev);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
64 static void ngx_http_ssl_handshake_handler(ngx_connection_t *c);
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
65 #endif
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
66
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
67 #if (NGX_HTTP_V3)
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
68 static void ngx_http_quic_stream_handler(ngx_connection_t *c);
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
69 #endif
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
71 static char *ngx_http_client_errors[] = {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
72
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
73 /* NGX_HTTP_PARSE_INVALID_METHOD */
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
74 "client sent invalid method",
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
75
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
76 /* NGX_HTTP_PARSE_INVALID_REQUEST */
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
77 "client sent invalid request",
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
78
6993
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
79 /* NGX_HTTP_PARSE_INVALID_VERSION */
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
80 "client sent invalid version",
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
81
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
82 /* NGX_HTTP_PARSE_INVALID_09_METHOD */
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
83 "client sent invalid method in HTTP/0.9 request"
7
b5481d6fbbd4 nginx-0.0.1-2002-08-29-20:59:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 6
diff changeset
84 };
b5481d6fbbd4 nginx-0.0.1-2002-08-29-20:59:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 6
diff changeset
85
b5481d6fbbd4 nginx-0.0.1-2002-08-29-20:59:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 6
diff changeset
86
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
87 ngx_http_header_t ngx_http_headers_in[] = {
2193
1d37b13ef004 fix $r->header_in() for "User-Agent", "Connection", and "Host"
Igor Sysoev <igor@sysoev.ru>
parents: 2137
diff changeset
88 { ngx_string("Host"), offsetof(ngx_http_headers_in_t, host),
1d37b13ef004 fix $r->header_in() for "User-Agent", "Connection", and "Host"
Igor Sysoev <igor@sysoev.ru>
parents: 2137
diff changeset
89 ngx_http_process_host },
1d37b13ef004 fix $r->header_in() for "User-Agent", "Connection", and "Host"
Igor Sysoev <igor@sysoev.ru>
parents: 2137
diff changeset
90
1d37b13ef004 fix $r->header_in() for "User-Agent", "Connection", and "Host"
Igor Sysoev <igor@sysoev.ru>
parents: 2137
diff changeset
91 { ngx_string("Connection"), offsetof(ngx_http_headers_in_t, connection),
1d37b13ef004 fix $r->header_in() for "User-Agent", "Connection", and "Host"
Igor Sysoev <igor@sysoev.ru>
parents: 2137
diff changeset
92 ngx_http_process_connection },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
93
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
94 { ngx_string("If-Modified-Since"),
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
95 offsetof(ngx_http_headers_in_t, if_modified_since),
1434
0f0ce9a8eee9 If-Modified-Since should be unique header line
Igor Sysoev <igor@sysoev.ru>
parents: 1427
diff changeset
96 ngx_http_process_unique_header_line },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
97
3814
e6e453203bae "If-Unmodified-Since" support
Igor Sysoev <igor@sysoev.ru>
parents: 3674
diff changeset
98 { ngx_string("If-Unmodified-Since"),
e6e453203bae "If-Unmodified-Since" support
Igor Sysoev <igor@sysoev.ru>
parents: 3674
diff changeset
99 offsetof(ngx_http_headers_in_t, if_unmodified_since),
e6e453203bae "If-Unmodified-Since" support
Igor Sysoev <igor@sysoev.ru>
parents: 3674
diff changeset
100 ngx_http_process_unique_header_line },
e6e453203bae "If-Unmodified-Since" support
Igor Sysoev <igor@sysoev.ru>
parents: 3674
diff changeset
101
4744
5b93a9ac60ed Entity tags: basic support in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4739
diff changeset
102 { ngx_string("If-Match"),
5b93a9ac60ed Entity tags: basic support in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4739
diff changeset
103 offsetof(ngx_http_headers_in_t, if_match),
5b93a9ac60ed Entity tags: basic support in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4739
diff changeset
104 ngx_http_process_unique_header_line },
5b93a9ac60ed Entity tags: basic support in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4739
diff changeset
105
5b93a9ac60ed Entity tags: basic support in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4739
diff changeset
106 { ngx_string("If-None-Match"),
5b93a9ac60ed Entity tags: basic support in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4739
diff changeset
107 offsetof(ngx_http_headers_in_t, if_none_match),
5b93a9ac60ed Entity tags: basic support in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4739
diff changeset
108 ngx_http_process_unique_header_line },
5b93a9ac60ed Entity tags: basic support in not modified filter.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4739
diff changeset
109
2193
1d37b13ef004 fix $r->header_in() for "User-Agent", "Connection", and "Host"
Igor Sysoev <igor@sysoev.ru>
parents: 2137
diff changeset
110 { ngx_string("User-Agent"), offsetof(ngx_http_headers_in_t, user_agent),
1d37b13ef004 fix $r->header_in() for "User-Agent", "Connection", and "Host"
Igor Sysoev <igor@sysoev.ru>
parents: 2137
diff changeset
111 ngx_http_process_user_agent },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
112
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
113 { ngx_string("Referer"), offsetof(ngx_http_headers_in_t, referer),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
114 ngx_http_process_header_line },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
115
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
116 { ngx_string("Content-Length"),
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
117 offsetof(ngx_http_headers_in_t, content_length),
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
118 ngx_http_process_unique_header_line },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
119
6538
055cbb52ac1d Dav: return 501 on PUT with ranges (ticket #948).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6536
diff changeset
120 { ngx_string("Content-Range"),
055cbb52ac1d Dav: return 501 on PUT with ranges (ticket #948).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6536
diff changeset
121 offsetof(ngx_http_headers_in_t, content_range),
055cbb52ac1d Dav: return 501 on PUT with ranges (ticket #948).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6536
diff changeset
122 ngx_http_process_unique_header_line },
055cbb52ac1d Dav: return 501 on PUT with ranges (ticket #948).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6536
diff changeset
123
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
124 { ngx_string("Content-Type"),
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
125 offsetof(ngx_http_headers_in_t, content_type),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
126 ngx_http_process_header_line },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
127
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
128 { ngx_string("Range"), offsetof(ngx_http_headers_in_t, range),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
129 ngx_http_process_header_line },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
130
1630
9706372f8916 If-Range support
Igor Sysoev <igor@sysoev.ru>
parents: 1585
diff changeset
131 { ngx_string("If-Range"),
9706372f8916 If-Range support
Igor Sysoev <igor@sysoev.ru>
parents: 1585
diff changeset
132 offsetof(ngx_http_headers_in_t, if_range),
9706372f8916 If-Range support
Igor Sysoev <igor@sysoev.ru>
parents: 1585
diff changeset
133 ngx_http_process_unique_header_line },
9706372f8916 If-Range support
Igor Sysoev <igor@sysoev.ru>
parents: 1585
diff changeset
134
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
135 { ngx_string("Transfer-Encoding"),
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
136 offsetof(ngx_http_headers_in_t, transfer_encoding),
7625
aca005d232ff Disabled multiple Transfer-Encoding headers.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7475
diff changeset
137 ngx_http_process_unique_header_line },
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
138
7234
c693daca57f7 gRPC: special handling of the TE request header.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7206
diff changeset
139 { ngx_string("TE"),
c693daca57f7 gRPC: special handling of the TE request header.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7206
diff changeset
140 offsetof(ngx_http_headers_in_t, te),
c693daca57f7 gRPC: special handling of the TE request header.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7206
diff changeset
141 ngx_http_process_header_line },
c693daca57f7 gRPC: special handling of the TE request header.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7206
diff changeset
142
2067
5657037448d1 the "Expect" header support
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
143 { ngx_string("Expect"),
5657037448d1 the "Expect" header support
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
144 offsetof(ngx_http_headers_in_t, expect),
5657037448d1 the "Expect" header support
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
145 ngx_http_process_unique_header_line },
5657037448d1 the "Expect" header support
Igor Sysoev <igor@sysoev.ru>
parents: 2049
diff changeset
146
5072
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4930
diff changeset
147 { ngx_string("Upgrade"),
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4930
diff changeset
148 offsetof(ngx_http_headers_in_t, upgrade),
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4930
diff changeset
149 ngx_http_process_header_line },
7fa7e60a7f66 Proxy: support for connection upgrade (101 Switching Protocols).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4930
diff changeset
150
7206
33edea74bd58 Expose more headers with NGX_HTTP_HEADERS.
Ruslan Ermilov <ru@nginx.com>
parents: 7193
diff changeset
151 #if (NGX_HTTP_GZIP || NGX_HTTP_HEADERS)
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
152 { ngx_string("Accept-Encoding"),
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
153 offsetof(ngx_http_headers_in_t, accept_encoding),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
154 ngx_http_process_header_line },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
155
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
156 { ngx_string("Via"), offsetof(ngx_http_headers_in_t, via),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
157 ngx_http_process_header_line },
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
158 #endif
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
159
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
160 { ngx_string("Authorization"),
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
161 offsetof(ngx_http_headers_in_t, authorization),
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
162 ngx_http_process_unique_header_line },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
163
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
164 { ngx_string("Keep-Alive"), offsetof(ngx_http_headers_in_t, keep_alive),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
165 ngx_http_process_header_line },
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
166
4697
09187f9b0950 Fixed compile-time conditionals used to detect if X-Forwarded-For support
Ruslan Ermilov <ru@nginx.com>
parents: 4675
diff changeset
167 #if (NGX_HTTP_X_FORWARDED_FOR)
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
168 { ngx_string("X-Forwarded-For"),
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
169 offsetof(ngx_http_headers_in_t, x_forwarded_for),
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
170 ngx_http_process_multi_header_lines },
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
171 #endif
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
172
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
173 #if (NGX_HTTP_REALIP)
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
174 { ngx_string("X-Real-IP"),
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
175 offsetof(ngx_http_headers_in_t, x_real_ip),
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
176 ngx_http_process_header_line },
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
177 #endif
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
178
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
179 #if (NGX_HTTP_HEADERS)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
180 { ngx_string("Accept"), offsetof(ngx_http_headers_in_t, accept),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
181 ngx_http_process_header_line },
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
182
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
183 { ngx_string("Accept-Language"),
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
184 offsetof(ngx_http_headers_in_t, accept_language),
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
185 ngx_http_process_header_line },
489
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
186 #endif
45a460f82aec nginx-0.1.19-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 483
diff changeset
187
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
188 #if (NGX_HTTP_DAV)
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
189 { ngx_string("Depth"), offsetof(ngx_http_headers_in_t, depth),
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
190 ngx_http_process_header_line },
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
191
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
192 { ngx_string("Destination"), offsetof(ngx_http_headers_in_t, destination),
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
193 ngx_http_process_header_line },
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
194
1059
bff1312b84ed the "Overwrite" header line
Igor Sysoev <igor@sysoev.ru>
parents: 992
diff changeset
195 { ngx_string("Overwrite"), offsetof(ngx_http_headers_in_t, overwrite),
bff1312b84ed the "Overwrite" header line
Igor Sysoev <igor@sysoev.ru>
parents: 992
diff changeset
196 ngx_http_process_header_line },
bff1312b84ed the "Overwrite" header line
Igor Sysoev <igor@sysoev.ru>
parents: 992
diff changeset
197
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
198 { ngx_string("Date"), offsetof(ngx_http_headers_in_t, date),
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
199 ngx_http_process_header_line },
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
200 #endif
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
201
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
202 { ngx_string("Cookie"), offsetof(ngx_http_headers_in_t, cookies),
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
203 ngx_http_process_multi_header_lines },
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
204
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
205 { ngx_null_string, 0, NULL }
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
206 };
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
207
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
208
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
209 void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
210 ngx_http_init_connection(ngx_connection_t *c)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
211 {
5085
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
212 ngx_uint_t i;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
213 ngx_event_t *rev;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
214 struct sockaddr_in *sin;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
215 ngx_http_port_t *port;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
216 ngx_http_in_addr_t *addr;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
217 ngx_http_log_ctx_t *ctx;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
218 ngx_http_connection_t *hc;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
219 #if (NGX_HAVE_INET6)
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
220 struct sockaddr_in6 *sin6;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
221 ngx_http_in6_addr_t *addr6;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
222 #endif
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
223
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
224 #if (NGX_HTTP_V3)
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
225 if (c->type == SOCK_DGRAM) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
226 hc = ngx_pcalloc(c->pool, sizeof(ngx_http_v3_connection_t));
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
227 hc->quic = 1;
8272
7f0981be07c4 Fixed client certificate verification.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8271
diff changeset
228 hc->ssl = 1;
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
229
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
230 } else
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
231 #endif
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
232 hc = ngx_pcalloc(c->pool, sizeof(ngx_http_connection_t));
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
233
5085
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
234 if (hc == NULL) {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
235 ngx_http_close_connection(c);
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
236 return;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
237 }
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
238
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
239 c->data = hc;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
240
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
241 /* find the server configuration for the address:port */
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
242
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
243 port = c->listening->servers;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
244
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
245 if (port->naddrs > 1) {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
246
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
247 /*
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
248 * there are several addresses on this port and one of them
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
249 * is an "*:port" wildcard so getsockname() in ngx_http_server_addr()
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
250 * is required to determine a server address
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
251 */
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
252
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
253 if (ngx_connection_local_sockaddr(c, NULL, 0) != NGX_OK) {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
254 ngx_http_close_connection(c);
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
255 return;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
256 }
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
257
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
258 switch (c->local_sockaddr->sa_family) {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
259
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
260 #if (NGX_HAVE_INET6)
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
261 case AF_INET6:
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
262 sin6 = (struct sockaddr_in6 *) c->local_sockaddr;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
263
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
264 addr6 = port->addrs;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
265
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
266 /* the last address is "*" */
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
267
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
268 for (i = 0; i < port->naddrs - 1; i++) {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
269 if (ngx_memcmp(&addr6[i].addr6, &sin6->sin6_addr, 16) == 0) {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
270 break;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
271 }
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
272 }
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
273
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
274 hc->addr_conf = &addr6[i].conf;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
275
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
276 break;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
277 #endif
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
278
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
279 default: /* AF_INET */
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
280 sin = (struct sockaddr_in *) c->local_sockaddr;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
281
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
282 addr = port->addrs;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
283
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
284 /* the last address is "*" */
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
285
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
286 for (i = 0; i < port->naddrs - 1; i++) {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
287 if (addr[i].addr == sin->sin_addr.s_addr) {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
288 break;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
289 }
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
290 }
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
291
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
292 hc->addr_conf = &addr[i].conf;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
293
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
294 break;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
295 }
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
296
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
297 } else {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
298
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
299 switch (c->local_sockaddr->sa_family) {
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
300
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
301 #if (NGX_HAVE_INET6)
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
302 case AF_INET6:
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
303 addr6 = port->addrs;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
304 hc->addr_conf = &addr6[0].conf;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
305 break;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
306 #endif
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
307
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
308 default: /* AF_INET */
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
309 addr = port->addrs;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
310 hc->addr_conf = &addr[0].conf;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
311 break;
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
312 }
7f1cbcc71327 The default server lookup is now done only once per connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5084
diff changeset
313 }
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
314
5089
903f2a5d86a5 SNI: reuse selected configuration for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5088
diff changeset
315 /* the default server configuration for the address:port */
903f2a5d86a5 SNI: reuse selected configuration for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5088
diff changeset
316 hc->conf_ctx = hc->addr_conf->default_server->ctx;
903f2a5d86a5 SNI: reuse selected configuration for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5088
diff changeset
317
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
318 ctx = ngx_palloc(c->pool, sizeof(ngx_http_log_ctx_t));
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
319 if (ctx == NULL) {
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
320 ngx_http_close_connection(c);
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
321 return;
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
322 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
323
1810
755e09d5c271 log server address
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
324 ctx->connection = c;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
325 ctx->request = NULL;
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
326 ctx->current_request = NULL;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
327
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
328 c->log->connection = c->number;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
329 c->log->handler = ngx_http_log_error;
191
71ce40b3c37b nginx-0.0.1-2003-11-19-19:26:41 import
Igor Sysoev <igor@sysoev.ru>
parents: 189
diff changeset
330 c->log->data = ctx;
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
331 c->log->action = "waiting for request";
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
332
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 253
diff changeset
333 c->log_error = NGX_ERROR_INFO;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
334
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
335 rev = c->read;
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
336 rev->handler = ngx_http_wait_request_handler;
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
337 c->write->handler = ngx_http_empty_handler;
253
b6793bc5034b nginx-0.0.2-2004-02-09-10:46:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 247
diff changeset
338
8166
7999d3fbb765 HTTP UDP layer, QUIC support autotest.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7628
diff changeset
339 if (c->shared) {
7999d3fbb765 HTTP UDP layer, QUIC support autotest.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7628
diff changeset
340 rev->ready = 1;
7999d3fbb765 HTTP UDP layer, QUIC support autotest.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7628
diff changeset
341 }
7999d3fbb765 HTTP UDP layer, QUIC support autotest.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7628
diff changeset
342
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
343 #if (NGX_HTTP_V3)
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
344 if (hc->quic) {
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8233
diff changeset
345 ngx_http_v3_srv_conf_t *v3cf;
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
346 ngx_http_ssl_srv_conf_t *sscf;
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
347
8247
e9891e8ee975 Configurable transport parameters.
Vladimir Homutov <vl@nginx.com>
parents: 8233
diff changeset
348 v3cf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_v3_module);
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
349 sscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_ssl_module);
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
350
8271
8e54a17dabee Respect QUIC max_idle_timeout.
Roman Arutyunyan <arut@nginx.com>
parents: 8247
diff changeset
351 ngx_quic_run(c, &sscf->ssl, &v3cf->quic, ngx_http_quic_stream_handler);
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
352 return;
8167
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8166
diff changeset
353 }
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8166
diff changeset
354 #endif
5d91389e0fd3 Initial QUIC support in http.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8166
diff changeset
355
6246
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
356 #if (NGX_HTTP_V2)
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
357 if (hc->addr_conf->http2) {
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
358 rev->handler = ngx_http_v2_init;
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
359 }
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
360 #endif
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
361
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
362 #if (NGX_HTTP_SSL)
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
363 {
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
364 ngx_http_ssl_srv_conf_t *sscf;
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
365
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
366 sscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_ssl_module);
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
367
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
368 if (sscf->enable || hc->addr_conf->ssl) {
7269
7f955d3b9a0d SSL: detect "listen ... ssl" without certificates (ticket #178).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7234
diff changeset
369 hc->ssl = 1;
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
370 c->log->action = "SSL handshaking";
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
371 rev->handler = ngx_http_ssl_handshake;
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
372 }
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
373 }
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
374 #endif
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
375
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
376 if (hc->addr_conf->proxy_protocol) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
377 hc->proxy_protocol = 1;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
378 c->log->action = "reading PROXY protocol";
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
379 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
380
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
381 if (rev->ready) {
6126
adba26ff70b5 Removed the obsolete rtsig module.
Ruslan Ermilov <ru@nginx.com>
parents: 6125
diff changeset
382 /* the deferred accept(), iocp */
301
744965ec6275 nginx-0.0.3-2004-03-31-19:26:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 299
diff changeset
383
611
3f8a2132b93d nginx-0.3.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 605
diff changeset
384 if (ngx_use_accept_mutex) {
563
9c2f3ed7a247 nginx-0.3.3-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 561
diff changeset
385 ngx_post_event(rev, &ngx_posted_events);
301
744965ec6275 nginx-0.0.3-2004-03-31-19:26:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 299
diff changeset
386 return;
744965ec6275 nginx-0.0.3-2004-03-31-19:26:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 299
diff changeset
387 }
744965ec6275 nginx-0.0.3-2004-03-31-19:26:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 299
diff changeset
388
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
389 rev->handler(rev);
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
390 return;
57
a499e0d1f16e nginx-0.0.1-2003-01-30-10:28:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 55
diff changeset
391 }
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
392
103
6dfda4cf5200 nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 101
diff changeset
393 ngx_add_timer(rev, c->listening->post_accept_timeout);
5114
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
394 ngx_reusable_connection(c, 1);
53
d1e42f1b8fd4 nginx-0.0.1-2003-01-27-00:08:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 52
diff changeset
395
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
396 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
143
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
397 ngx_http_close_connection(c);
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
398 return;
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
399 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
400 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
401
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
402
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
403 #if (NGX_HTTP_V3)
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
404
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
405 static void
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
406 ngx_http_quic_stream_handler(ngx_connection_t *c)
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
407 {
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
408 ngx_event_t *rev;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
409 ngx_connection_t *pc;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
410 ngx_http_log_ctx_t *ctx;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
411 ngx_http_connection_t *hc;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
412 ngx_http_v3_connection_t *h3c;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
413
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
414 pc = c->qs->parent;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
415 h3c = pc->data;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
416
8280
b364af7f9f3f Removed ngx_quic_stream_node_t.
Roman Arutyunyan <arut@nginx.com>
parents: 8276
diff changeset
417 if (c->qs->id & NGX_QUIC_STREAM_UNIDIRECTIONAL) {
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
418 ngx_http_v3_handle_client_uni_stream(c);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
419 return;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
420 }
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
421
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
422 hc = ngx_pcalloc(c->pool, sizeof(ngx_http_connection_t));
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
423 if (hc == NULL) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
424 ngx_http_close_connection(c);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
425 return;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
426 }
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
427
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
428 ngx_memcpy(hc, h3c, sizeof(ngx_http_connection_t));
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
429 c->data = hc;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
430
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
431 ctx = ngx_palloc(c->pool, sizeof(ngx_http_log_ctx_t));
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
432 if (ctx == NULL) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
433 ngx_http_close_connection(c);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
434 return;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
435 }
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
436
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
437 ctx->connection = c;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
438 ctx->request = NULL;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
439 ctx->current_request = NULL;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
440
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
441 c->log->handler = ngx_http_log_error;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
442 c->log->data = ctx;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
443 c->log->action = "waiting for request";
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
444
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
445 c->log_error = NGX_ERROR_INFO;
8211
6bc18966b8c1 Stream "connection" read/write methods.
Vladimir Homutov <vl@nginx.com>
parents: 8210
diff changeset
446
8210
b761ca7df7d0 Fix build.
Sergey Kandaurov <pluknet@nginx.com>
parents: 8208
diff changeset
447 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
448 "http3 new stream id:0x%uXL", c->qs->id);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
449
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
450 rev = c->read;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
451 rev->handler = ngx_http_wait_request_handler;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
452 c->write->handler = ngx_http_empty_handler;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
453
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
454 rev->handler(rev);
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
455 }
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
456
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
457 #endif
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
458
8208
4ae9ac69ab93 HTTP/QUIC interface reworked.
Vladimir Homutov <vl@nginx.com>
parents: 8182
diff changeset
459
641
5e8fb59c18c1 nginx-0.3.42-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 639
diff changeset
460 static void
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
461 ngx_http_wait_request_handler(ngx_event_t *rev)
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
462 {
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
463 u_char *p;
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
464 size_t size;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
465 ssize_t n;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
466 ngx_buf_t *b;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
467 ngx_connection_t *c;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
468 ngx_http_connection_t *hc;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
469 ngx_http_core_srv_conf_t *cscf;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
470
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
471 c = rev->data;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
472
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
473 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http wait request handler");
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
474
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
475 if (rev->timedout) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
476 ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
477 ngx_http_close_connection(c);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
478 return;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
479 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
480
5114
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
481 if (c->close) {
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
482 ngx_http_close_connection(c);
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
483 return;
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
484 }
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
485
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
486 hc = c->data;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
487 cscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_core_module);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
488
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
489 size = cscf->client_header_buffer_size;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
490
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
491 b = c->buffer;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
492
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
493 if (b == NULL) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
494 b = ngx_create_temp_buf(c->pool, size);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
495 if (b == NULL) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
496 ngx_http_close_connection(c);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
497 return;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
498 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
499
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
500 c->buffer = b;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
501
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
502 } else if (b->start == NULL) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
503
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
504 b->start = ngx_palloc(c->pool, size);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
505 if (b->start == NULL) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
506 ngx_http_close_connection(c);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
507 return;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
508 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
509
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
510 b->pos = b->start;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
511 b->last = b->start;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
512 b->end = b->last + size;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
513 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
514
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
515 n = c->recv(c, b->last, size);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
516
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
517 if (n == NGX_AGAIN) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
518
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
519 if (!rev->timer_set) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
520 ngx_add_timer(rev, c->listening->post_accept_timeout);
5114
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
521 ngx_reusable_connection(c, 1);
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
522 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
523
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
524 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
525 ngx_http_close_connection(c);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
526 return;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
527 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
528
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
529 /*
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
530 * We are trying to not hold c->buffer's memory for an idle connection.
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
531 */
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
532
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
533 if (ngx_pfree(c->pool, b->start) == NGX_OK) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
534 b->start = NULL;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
535 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
536
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
537 return;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
538 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
539
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
540 if (n == NGX_ERROR) {
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
541 ngx_http_close_connection(c);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
542 return;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
543 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
544
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
545 if (n == 0) {
5109
44bd04fbbb4f Fixed logging in ngx_http_wait_request_handler().
Maxim Dounin <mdounin@mdounin.ru>
parents: 5105
diff changeset
546 ngx_log_error(NGX_LOG_INFO, c->log, 0,
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
547 "client closed connection");
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
548 ngx_http_close_connection(c);
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
549 return;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
550 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
551
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
552 b->last += n;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
553
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
554 if (hc->proxy_protocol) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
555 hc->proxy_protocol = 0;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
556
6185
a420cb1c170b Core: renamed ngx_proxy_protocol_parse to ngx_proxy_protocol_read.
Roman Arutyunyan <arut@nginx.com>
parents: 6129
diff changeset
557 p = ngx_proxy_protocol_read(c, b->pos, b->last);
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
558
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
559 if (p == NULL) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
560 ngx_http_close_connection(c);
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
561 return;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
562 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
563
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
564 b->pos = p;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
565
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
566 if (b->pos == b->last) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
567 c->log->action = "waiting for request";
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
568 b->pos = b->start;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
569 b->last = b->start;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
570 ngx_post_event(rev, &ngx_posted_events);
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
571 return;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
572 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
573 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
574
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
575 c->log->action = "reading client request line";
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
576
5114
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
577 ngx_reusable_connection(c, 0);
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
578
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
579 c->data = ngx_http_create_request(c);
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
580 if (c->data == NULL) {
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
581 ngx_http_close_connection(c);
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
582 return;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
583 }
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
584
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
585 rev->handler = ngx_http_process_request_line;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
586 ngx_http_process_request_line(rev);
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
587 }
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
588
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
589
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
590 ngx_http_request_t *
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
591 ngx_http_create_request(ngx_connection_t *c)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
592 {
7462
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
593 ngx_http_request_t *r;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
594 ngx_http_log_ctx_t *ctx;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
595 ngx_http_core_loc_conf_t *clcf;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
596
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
597 r = ngx_http_alloc_request(c);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
598 if (r == NULL) {
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
599 return NULL;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
600 }
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
601
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
602 c->requests++;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
603
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
604 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
605
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
606 ngx_set_connection_log(c, clcf->error_log);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
607
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
608 ctx = c->log->data;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
609 ctx->request = r;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
610 ctx->current_request = r;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
611
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
612 #if (NGX_STAT_STUB)
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
613 (void) ngx_atomic_fetch_add(ngx_stat_reading, 1);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
614 r->stat_reading = 1;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
615 (void) ngx_atomic_fetch_add(ngx_stat_requests, 1);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
616 #endif
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
617
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
618 return r;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
619 }
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
620
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
621
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
622 static ngx_http_request_t *
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
623 ngx_http_alloc_request(ngx_connection_t *c)
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
624 {
5096
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
625 ngx_pool_t *pool;
1179
6e2216ad2c87 $request_time has millisecond precision
Igor Sysoev <igor@sysoev.ru>
parents: 1151
diff changeset
626 ngx_time_t *tp;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
627 ngx_http_request_t *r;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
628 ngx_http_connection_t *hc;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
629 ngx_http_core_srv_conf_t *cscf;
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
630 ngx_http_core_main_conf_t *cmcf;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
631
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
632 hc = c->data;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
633
5096
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
634 cscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_core_module);
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
635
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
636 pool = ngx_create_pool(cscf->request_pool_size, c->log);
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
637 if (pool == NULL) {
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
638 return NULL;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
639 }
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
640
5096
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
641 r = ngx_pcalloc(pool, sizeof(ngx_http_request_t));
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
642 if (r == NULL) {
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
643 ngx_destroy_pool(pool);
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
644 return NULL;
5096
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
645 }
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
646
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
647 r->pool = pool;
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
648
432
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 430
diff changeset
649 r->http_connection = hc;
367
ceec87d1c2b3 nginx-0.0.7-2004-06-24-11:53:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
650 r->signature = NGX_HTTP_MODULE;
1805
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1804
diff changeset
651 r->connection = c;
bb72f7518992 use ngx_http_server_addr()
Igor Sysoev <igor@sysoev.ru>
parents: 1804
diff changeset
652
5089
903f2a5d86a5 SNI: reuse selected configuration for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5088
diff changeset
653 r->main_conf = hc->conf_ctx->main_conf;
903f2a5d86a5 SNI: reuse selected configuration for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5088
diff changeset
654 r->srv_conf = hc->conf_ctx->srv_conf;
903f2a5d86a5 SNI: reuse selected configuration for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5088
diff changeset
655 r->loc_conf = hc->conf_ctx->loc_conf;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
656
3000
66ef86affbb8 fix segfault if 400 or 414 errors are handled intricately
Igor Sysoev <igor@sysoev.ru>
parents: 2994
diff changeset
657 r->read_event_handler = ngx_http_block_reading;
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
658
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
659 r->header_in = hc->busy ? hc->busy->buf : c->buffer;
294
5cfd65b8b0a7 nginx-0.0.3-2004-03-23-09:01:52 import
Igor Sysoev <igor@sysoev.ru>
parents: 293
diff changeset
660
416
b9bd635011de nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 415
diff changeset
661 if (ngx_list_init(&r->headers_out.headers, r->pool, 20,
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
662 sizeof(ngx_table_elt_t))
2536
a6d6d762c554 small optimization: " == NGX_ERROR" > " != NGX_OK"
Igor Sysoev <igor@sysoev.ru>
parents: 2534
diff changeset
663 != NGX_OK)
415
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
664 {
2902
a1a1c7e3fb8d fix "out of memory" case handling
Igor Sysoev <igor@sysoev.ru>
parents: 2888
diff changeset
665 ngx_destroy_pool(r->pool);
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
666 return NULL;
415
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
667 }
3c56e834be46 nginx-0.0.10-2004-09-05-23:54:02 import
Igor Sysoev <igor@sysoev.ru>
parents: 408
diff changeset
668
7034
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 7011
diff changeset
669 if (ngx_list_init(&r->headers_out.trailers, r->pool, 4,
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 7011
diff changeset
670 sizeof(ngx_table_elt_t))
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 7011
diff changeset
671 != NGX_OK)
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 7011
diff changeset
672 {
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 7011
diff changeset
673 ngx_destroy_pool(r->pool);
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 7011
diff changeset
674 return NULL;
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 7011
diff changeset
675 }
1b068a4e82d8 Added support for trailers in HTTP responses.
Piotr Sikora <piotrsikora@google.com>
parents: 7011
diff changeset
676
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
677 r->ctx = ngx_pcalloc(r->pool, sizeof(void *) * ngx_http_max_module);
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
678 if (r->ctx == NULL) {
2902
a1a1c7e3fb8d fix "out of memory" case handling
Igor Sysoev <igor@sysoev.ru>
parents: 2888
diff changeset
679 ngx_destroy_pool(r->pool);
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
680 return NULL;
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
681 }
10
4f3879d9b6f6 nginx-0.0.1-2002-09-11-19:18:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 9
diff changeset
682
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
683 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
684
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
685 r->variables = ngx_pcalloc(r->pool, cmcf->variables.nelts
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
686 * sizeof(ngx_http_variable_value_t));
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
687 if (r->variables == NULL) {
2902
a1a1c7e3fb8d fix "out of memory" case handling
Igor Sysoev <igor@sysoev.ru>
parents: 2888
diff changeset
688 ngx_destroy_pool(r->pool);
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
689 return NULL;
573
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
690 }
58475592100c nginx-0.3.8-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 569
diff changeset
691
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
692 #if (NGX_HTTP_SSL)
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
693 if (c->ssl) {
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
694 r->main_filter_need_in_memory = 1;
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
695 }
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
696 #endif
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
697
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
698 r->main = r;
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
699 r->count = 1;
553
45033d85b30e nginx-0.2.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 547
diff changeset
700
1179
6e2216ad2c87 $request_time has millisecond precision
Igor Sysoev <igor@sysoev.ru>
parents: 1151
diff changeset
701 tp = ngx_timeofday();
6e2216ad2c87 $request_time has millisecond precision
Igor Sysoev <igor@sysoev.ru>
parents: 1151
diff changeset
702 r->start_sec = tp->sec;
6e2216ad2c87 $request_time has millisecond precision
Igor Sysoev <igor@sysoev.ru>
parents: 1151
diff changeset
703 r->start_msec = tp->msec;
497
d7c90bb5ce83 nginx-0.1.23-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 495
diff changeset
704
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
705 r->method = NGX_HTTP_UNKNOWN;
5354
62be77b0608f Assume the HTTP/1.0 version by default.
Valentin Bartenev <vbart@nginx.com>
parents: 5289
diff changeset
706 r->http_version = NGX_HTTP_VERSION_10;
631
5d2b8078c1c2 nginx-0.3.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 629
diff changeset
707
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
708 #if (NGX_HTTP_V3)
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
709 if (hc->quic) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
710 r->http_version = NGX_HTTP_VERSION_30;
8295
5649079a41f4 Parsing HTTP/3 request body.
Roman Arutyunyan <arut@nginx.com>
parents: 8280
diff changeset
711 r->headers_in.chunked = 1;
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
712 }
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
713 #endif
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
714
82
fccdb921e8b8 nginx-0.0.1-2003-04-25-18:43:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 77
diff changeset
715 r->headers_in.content_length_n = -1;
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
716 r->headers_in.keep_alive_n = -1;
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
717 r->headers_out.content_length_n = -1;
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
718 r->headers_out.last_modified_time = -1;
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
719
675
e924670896ab nginx-0.3.59-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
720 r->uri_changes = NGX_HTTP_MAX_URI_CHANGES + 1;
e924670896ab nginx-0.3.59-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
721 r->subrequests = NGX_HTTP_MAX_SUBREQUESTS + 1;
e924670896ab nginx-0.3.59-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 671
diff changeset
722
368
15c84a40e87d nginx-0.0.7-2004-06-24-20:07:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 367
diff changeset
723 r->http_state = NGX_HTTP_READING_REQUEST_STATE;
15c84a40e87d nginx-0.0.7-2004-06-24-20:07:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 367
diff changeset
724
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
725 r->log_handler = ngx_http_log_error_handler;
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
726
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
727 return r;
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
728 }
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
729
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
730
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
731 #if (NGX_HTTP_SSL)
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
732
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
733 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
734 ngx_http_ssl_handshake(ngx_event_t *rev)
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
735 {
7008
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
736 u_char *p, buf[NGX_PROXY_PROTOCOL_MAX_HEADER + 1];
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
737 size_t size;
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
738 ssize_t n;
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
739 ngx_err_t err;
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
740 ngx_int_t rc;
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
741 ngx_connection_t *c;
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
742 ngx_http_connection_t *hc;
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
743 ngx_http_ssl_srv_conf_t *sscf;
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
744 ngx_http_core_loc_conf_t *clcf;
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
745
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
746 c = rev->data;
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
747 hc = c->data;
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
748
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
749 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0,
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
750 "http check ssl handshake");
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
751
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
752 if (rev->timedout) {
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
753 ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
754 ngx_http_close_connection(c);
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
755 return;
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
756 }
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
757
5114
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
758 if (c->close) {
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
759 ngx_http_close_connection(c);
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
760 return;
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
761 }
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
762
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
763 size = hc->proxy_protocol ? sizeof(buf) : 1;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
764
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
765 n = recv(c->fd, (char *) buf, size, MSG_PEEK);
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
766
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
767 err = ngx_socket_errno;
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
768
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6412
diff changeset
769 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, rev->log, 0, "http recv(): %z", n);
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
770
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
771 if (n == -1) {
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
772 if (err == NGX_EAGAIN) {
5993
5b549cc7f698 SSL: reset ready flag if recv(MSG_PEEK) found no bytes in socket.
Roman Arutyunyan <arut@nginx.com>
parents: 5928
diff changeset
773 rev->ready = 0;
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
774
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
775 if (!rev->timer_set) {
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
776 ngx_add_timer(rev, c->listening->post_accept_timeout);
5114
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
777 ngx_reusable_connection(c, 1);
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
778 }
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
779
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
780 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
781 ngx_http_close_connection(c);
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
782 }
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
783
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
784 return;
1855
877cb2007c24 add code missed in r1830
Igor Sysoev <igor@sysoev.ru>
parents: 1829
diff changeset
785 }
877cb2007c24 add code missed in r1830
Igor Sysoev <igor@sysoev.ru>
parents: 1829
diff changeset
786
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
787 ngx_connection_error(c, err, "recv() failed");
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
788 ngx_http_close_connection(c);
1858
1ff400fed04d add code missed in r1856
Igor Sysoev <igor@sysoev.ru>
parents: 1856
diff changeset
789
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
790 return;
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
791 }
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
792
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
793 if (hc->proxy_protocol) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
794 hc->proxy_protocol = 0;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
795
6185
a420cb1c170b Core: renamed ngx_proxy_protocol_parse to ngx_proxy_protocol_read.
Roman Arutyunyan <arut@nginx.com>
parents: 6129
diff changeset
796 p = ngx_proxy_protocol_read(c, buf, buf + n);
5605
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
797
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
798 if (p == NULL) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
799 ngx_http_close_connection(c);
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
800 return;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
801 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
802
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
803 size = p - buf;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
804
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
805 if (c->recv(c, buf, size) != (ssize_t) size) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
806 ngx_http_close_connection(c);
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
807 return;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
808 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
809
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
810 c->log->action = "SSL handshaking";
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
811
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
812 if (n == (ssize_t) size) {
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
813 ngx_post_event(rev, &ngx_posted_events);
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
814 return;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
815 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
816
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
817 n = 1;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
818 buf[0] = *p;
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
819 }
3a72b1805c52 Added server-side support for PROXY protocol v1 (ticket #355).
Roman Arutyunyan <arut@nginx.com>
parents: 5557
diff changeset
820
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
821 if (n == 1) {
3674
37715361263a fix recognition of SSLv2 Client Hello Packet large than 255 bytes
Igor Sysoev <igor@sysoev.ru>
parents: 3615
diff changeset
822 if (buf[0] & 0x80 /* SSLv2 */ || buf[0] == 0x16 /* SSLv3/TLSv1 */) {
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
823 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, rev->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
824 "https ssl handshake: 0x%02Xd", buf[0]);
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
825
7008
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
826 clcf = ngx_http_get_module_loc_conf(hc->conf_ctx,
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
827 ngx_http_core_module);
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
828
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
829 if (clcf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
830 ngx_http_close_connection(c);
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
831 return;
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
832 }
29c6d66b83ba SSL: set TCP_NODELAY on SSL connections before handshake.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7007
diff changeset
833
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
834 sscf = ngx_http_get_module_srv_conf(hc->conf_ctx,
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
835 ngx_http_ssl_module);
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
836
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
837 if (ngx_ssl_create_connection(&sscf->ssl, c, NGX_SSL_BUFFER)
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
838 != NGX_OK)
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
839 {
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
840 ngx_http_close_connection(c);
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
841 return;
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
842 }
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
843
7628
2e3bfd696ecb Disabled connection reuse while in SSL handshake.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7627
diff changeset
844 ngx_reusable_connection(c, 0);
2e3bfd696ecb Disabled connection reuse while in SSL handshake.
Sergey Kandaurov <pluknet@nginx.com>
parents: 7627
diff changeset
845
396
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 395
diff changeset
846 rc = ngx_ssl_handshake(c);
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 395
diff changeset
847
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
848 if (rc == NGX_AGAIN) {
1829
81831a2bc67a fix socket leak if deferred accept was used
Igor Sysoev <igor@sysoev.ru>
parents: 1812
diff changeset
849
81831a2bc67a fix socket leak if deferred accept was used
Igor Sysoev <igor@sysoev.ru>
parents: 1812
diff changeset
850 if (!rev->timer_set) {
81831a2bc67a fix socket leak if deferred accept was used
Igor Sysoev <igor@sysoev.ru>
parents: 1812
diff changeset
851 ngx_add_timer(rev, c->listening->post_accept_timeout);
81831a2bc67a fix socket leak if deferred accept was used
Igor Sysoev <igor@sysoev.ru>
parents: 1812
diff changeset
852 }
81831a2bc67a fix socket leak if deferred accept was used
Igor Sysoev <igor@sysoev.ru>
parents: 1812
diff changeset
853
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
854 c->ssl->handler = ngx_http_ssl_handshake_handler;
396
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 395
diff changeset
855 return;
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 395
diff changeset
856 }
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 395
diff changeset
857
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
858 ngx_http_ssl_handshake_handler(c);
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
859
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
860 return;
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
861 }
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
862
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
863 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0, "plain http");
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
864
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
865 c->log->action = "waiting for request";
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
866
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
867 rev->handler = ngx_http_wait_request_handler;
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
868 ngx_http_wait_request_handler(rev);
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
869
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
870 return;
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
871 }
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
872
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
873 ngx_log_error(NGX_LOG_INFO, c->log, 0, "client closed connection");
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
874 ngx_http_close_connection(c);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
875 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
876
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
877
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
878 static void
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
879 ngx_http_ssl_handshake_handler(ngx_connection_t *c)
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
880 {
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
881 if (c->ssl->handshaked) {
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
882
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
883 /*
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
884 * The majority of browsers do not send the "close notify" alert.
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
885 * Among them are MSIE, old Mozilla, Netscape 4, Konqueror,
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
886 * and Links. And what is more, MSIE ignores the server's alert.
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
887 *
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
888 * Opera and recent Mozilla send the alert.
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
889 */
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
890
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
891 c->ssl->no_wait_shutdown = 1;
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
892
6246
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
893 #if (NGX_HTTP_V2 \
5545
01e2a5bcdd8f SSL: support ALPN (IETF's successor to NPN).
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
894 && (defined TLSEXT_TYPE_application_layer_protocol_negotiation \
01e2a5bcdd8f SSL: support ALPN (IETF's successor to NPN).
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
895 || defined TLSEXT_TYPE_next_proto_neg))
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
896 {
6289
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
897 unsigned int len;
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
898 const unsigned char *data;
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
899 ngx_http_connection_t *hc;
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
900
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
901 hc = c->data;
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
902
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
903 if (hc->addr_conf->http2) {
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
904
5545
01e2a5bcdd8f SSL: support ALPN (IETF's successor to NPN).
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
905 #ifdef TLSEXT_TYPE_application_layer_protocol_negotiation
6289
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
906 SSL_get0_alpn_selected(c->ssl->connection, &data, &len);
5545
01e2a5bcdd8f SSL: support ALPN (IETF's successor to NPN).
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
907
01e2a5bcdd8f SSL: support ALPN (IETF's successor to NPN).
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
908 #ifdef TLSEXT_TYPE_next_proto_neg
6289
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
909 if (len == 0) {
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
910 SSL_get0_next_proto_negotiated(c->ssl->connection, &data, &len);
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
911 }
5545
01e2a5bcdd8f SSL: support ALPN (IETF's successor to NPN).
Piotr Sikora <piotr@cloudflare.com>
parents: 5541
diff changeset
912 #endif
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
913
5547
2e40188f83ef Fixed a compile warning introduced by 01e2a5bcdd8f.
Ruslan Ermilov <ru@nginx.com>
parents: 5545
diff changeset
914 #else /* TLSEXT_TYPE_next_proto_neg */
6289
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
915 SSL_get0_next_proto_negotiated(c->ssl->connection, &data, &len);
5547
2e40188f83ef Fixed a compile warning introduced by 01e2a5bcdd8f.
Ruslan Ermilov <ru@nginx.com>
parents: 5545
diff changeset
916 #endif
2e40188f83ef Fixed a compile warning introduced by 01e2a5bcdd8f.
Ruslan Ermilov <ru@nginx.com>
parents: 5545
diff changeset
917
6289
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
918 if (len == 2 && data[0] == 'h' && data[1] == '2') {
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
919 ngx_http_v2_init(c->read);
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
920 return;
909b5b191f25 SSL: only select HTTP/2 using NPN if "http2" is enabled.
Valentin Bartenev <vbart@nginx.com>
parents: 6246
diff changeset
921 }
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
922 }
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
923 }
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
924 #endif
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
925
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
926 c->log->action = "waiting for request";
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
927
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
928 c->read->handler = ngx_http_wait_request_handler;
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
929 /* STUB: epoll edge */ c->write->handler = ngx_http_empty_handler;
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
930
5114
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
931 ngx_reusable_connection(c, 1);
a46c1cfe7263 Allow to reuse connections that wait their first request.
Valentin Bartenev <vbart@nginx.com>
parents: 5109
diff changeset
932
5101
d346adac0462 Create request object only after the first byte was received.
Valentin Bartenev <vbart@nginx.com>
parents: 5096
diff changeset
933 ngx_http_wait_request_handler(c->read);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
934
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
935 return;
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
936 }
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
937
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
938 if (c->read->timedout) {
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
939 ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
940 }
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
941
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
942 ngx_http_close_connection(c);
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
943 }
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
944
7458
Maxim Dounin <mdounin@mdounin.ru>
parents: 7367
diff changeset
945
1219
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
946 #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
947
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
948 int
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
949 ngx_http_ssl_servername(ngx_ssl_conn_t *ssl_conn, int *ad, void *arg)
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
950 {
7472
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
951 ngx_int_t rc;
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
952 ngx_str_t host;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
953 const char *servername;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
954 ngx_connection_t *c;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
955 ngx_http_connection_t *hc;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
956 ngx_http_ssl_srv_conf_t *sscf;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
957 ngx_http_core_loc_conf_t *clcf;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
958 ngx_http_core_srv_conf_t *cscf;
1219
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
959
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
960 c = ngx_ssl_get_connection(ssl_conn);
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
961
7367
bf1ac3dc1e68 SSL: fixed segfault on renegotiation (ticket #1646).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7354
diff changeset
962 if (c->ssl->handshaked) {
7472
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
963 *ad = SSL_AD_NO_RENEGOTIATION;
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
964 return SSL_TLSEXT_ERR_ALERT_FATAL;
6320
a6902a941279 SSL: fixed possible segfault on renegotiation (ticket #845).
Sergey Kandaurov <pluknet@nginx.com>
parents: 6306
diff changeset
965 }
a6902a941279 SSL: fixed possible segfault on renegotiation (ticket #845).
Sergey Kandaurov <pluknet@nginx.com>
parents: 6306
diff changeset
966
7475
49f9d2f7d887 SSL: moved c->ssl->handshaked check in server name callback.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7472
diff changeset
967 servername = SSL_get_servername(ssl_conn, TLSEXT_NAMETYPE_host_name);
49f9d2f7d887 SSL: moved c->ssl->handshaked check in server name callback.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7472
diff changeset
968
49f9d2f7d887 SSL: moved c->ssl->handshaked check in server name callback.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7472
diff changeset
969 if (servername == NULL) {
49f9d2f7d887 SSL: moved c->ssl->handshaked check in server name callback.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7472
diff changeset
970 return SSL_TLSEXT_ERR_OK;
49f9d2f7d887 SSL: moved c->ssl->handshaked check in server name callback.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7472
diff changeset
971 }
49f9d2f7d887 SSL: moved c->ssl->handshaked check in server name callback.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7472
diff changeset
972
1219
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
973 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
974 "SSL server name: \"%s\"", servername);
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
975
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
976 host.len = ngx_strlen(servername);
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
977
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
978 if (host.len == 0) {
7471
7e8bcba6d039 SSL: server name callback changed to return SSL_TLSEXT_ERR_OK.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7466
diff changeset
979 return SSL_TLSEXT_ERR_OK;
2195
a953f73273ee server_name "" support
Igor Sysoev <igor@sysoev.ru>
parents: 2193
diff changeset
980 }
a953f73273ee server_name "" support
Igor Sysoev <igor@sysoev.ru>
parents: 2193
diff changeset
981
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
982 host.data = (u_char *) servername;
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
983
7472
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
984 rc = ngx_http_validate_host(&host, c->pool, 1);
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
985
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
986 if (rc == NGX_ERROR) {
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
987 *ad = SSL_AD_INTERNAL_ERROR;
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
988 return SSL_TLSEXT_ERR_ALERT_FATAL;
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
989 }
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
990
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
991 if (rc == NGX_DECLINED) {
7471
7e8bcba6d039 SSL: server name callback changed to return SSL_TLSEXT_ERR_OK.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7466
diff changeset
992 return SSL_TLSEXT_ERR_OK;
3152
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
993 }
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
994
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
995 hc = c->data;
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
996
7472
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
997 rc = ngx_http_find_virtual_server(c, hc->addr_conf->virtual_names, &host,
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
998 NULL, &cscf);
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
999
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
1000 if (rc == NGX_ERROR) {
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
1001 *ad = SSL_AD_INTERNAL_ERROR;
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
1002 return SSL_TLSEXT_ERR_ALERT_FATAL;
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
1003 }
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
1004
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
1005 if (rc == NGX_DECLINED) {
7471
7e8bcba6d039 SSL: server name callback changed to return SSL_TLSEXT_ERR_OK.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7466
diff changeset
1006 return SSL_TLSEXT_ERR_OK;
1219
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
1007 }
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
1008
5093
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
1009 hc->ssl_servername = ngx_palloc(c->pool, sizeof(ngx_str_t));
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
1010 if (hc->ssl_servername == NULL) {
7472
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
1011 *ad = SSL_AD_INTERNAL_ERROR;
d430babbe643 SSL: server name callback changed to return fatal errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7471
diff changeset
1012 return SSL_TLSEXT_ERR_ALERT_FATAL;
5093
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
1013 }
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
1014
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
1015 *hc->ssl_servername = host;
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
1016
5089
903f2a5d86a5 SNI: reuse selected configuration for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5088
diff changeset
1017 hc->conf_ctx = cscf->ctx;
903f2a5d86a5 SNI: reuse selected configuration for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5088
diff changeset
1018
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
1019 clcf = ngx_http_get_module_loc_conf(hc->conf_ctx, ngx_http_core_module);
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
1020
6129
187aa751ad62 Core: the ngx_set_connection_log() macro.
Vladimir Homutov <vl@nginx.com>
parents: 6126
diff changeset
1021 ngx_set_connection_log(c, clcf->error_log);
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
1022
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
1023 sscf = ngx_http_get_module_srv_conf(hc->conf_ctx, ngx_http_ssl_module);
1219
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
1024
6901
72bb626484a4 SSL: fixed ssl_buffer_size on SNI virtual hosts (ticket #1192).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6584
diff changeset
1025 c->ssl->buffer_size = sscf->buffer_size;
72bb626484a4 SSL: fixed ssl_buffer_size on SNI virtual hosts (ticket #1192).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6584
diff changeset
1026
4304
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1027 if (sscf->ssl.ctx) {
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1028 SSL_set_SSL_CTX(ssl_conn, sscf->ssl.ctx);
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1029
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1030 /*
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1031 * SSL_set_SSL_CTX() only changes certs as of 1.0.0d
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1032 * adjust other things we care about
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1033 */
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1034
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1035 SSL_set_verify(ssl_conn, SSL_CTX_get_verify_mode(sscf->ssl.ctx),
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1036 SSL_CTX_get_verify_callback(sscf->ssl.ctx));
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1037
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1038 SSL_set_verify_depth(ssl_conn, SSL_CTX_get_verify_depth(sscf->ssl.ctx));
4033
4e1a489c26cd Better handling of various per-server ssl options with SNI.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3985
diff changeset
1039
7318
3443fe40bdc7 SSL: fixed SSL_clear_options() usage with OpenSSL 1.1.0+.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7313
diff changeset
1040 #if OPENSSL_VERSION_NUMBER >= 0x009080dfL
4304
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1041 /* only in 0.9.8m+ */
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1042 SSL_clear_options(ssl_conn, SSL_get_options(ssl_conn) &
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1043 ~SSL_CTX_get_options(sscf->ssl.ctx));
4033
4e1a489c26cd Better handling of various per-server ssl options with SNI.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3985
diff changeset
1044 #endif
4e1a489c26cd Better handling of various per-server ssl options with SNI.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3985
diff changeset
1045
4304
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1046 SSL_set_options(ssl_conn, SSL_CTX_get_options(sscf->ssl.ctx));
7367
bf1ac3dc1e68 SSL: fixed segfault on renegotiation (ticket #1646).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7354
diff changeset
1047
bf1ac3dc1e68 SSL: fixed segfault on renegotiation (ticket #1646).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7354
diff changeset
1048 #ifdef SSL_OP_NO_RENEGOTIATION
bf1ac3dc1e68 SSL: fixed segfault on renegotiation (ticket #1646).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7354
diff changeset
1049 SSL_set_options(ssl_conn, SSL_OP_NO_RENEGOTIATION);
bf1ac3dc1e68 SSL: fixed segfault on renegotiation (ticket #1646).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7354
diff changeset
1050 #endif
4304
ed922fb9d6c1 Fixed segfault on ssl servers without cert with SNI (ticket #54).
Maxim Dounin <mdounin@mdounin.ru>
parents: 4195
diff changeset
1051 }
4033
4e1a489c26cd Better handling of various per-server ssl options with SNI.
Maxim Dounin <mdounin@mdounin.ru>
parents: 3985
diff changeset
1052
1219
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
1053 return SSL_TLSEXT_ERR_OK;
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
1054 }
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
1055
86c5c9288acc SNI support
Igor Sysoev <igor@sysoev.ru>
parents: 1179
diff changeset
1056 #endif
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
1057
7462
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1058
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1059 #ifdef SSL_R_CERT_CB_ERROR
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1060
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1061 int
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1062 ngx_http_ssl_certificate(ngx_ssl_conn_t *ssl_conn, void *arg)
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1063 {
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1064 ngx_str_t cert, key;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1065 ngx_uint_t i, nelts;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1066 ngx_connection_t *c;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1067 ngx_http_request_t *r;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1068 ngx_http_ssl_srv_conf_t *sscf;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1069 ngx_http_complex_value_t *certs, *keys;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1070
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1071 c = ngx_ssl_get_connection(ssl_conn);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1072
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1073 if (c->ssl->handshaked) {
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1074 return 0;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1075 }
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1076
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1077 r = ngx_http_alloc_request(c);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1078 if (r == NULL) {
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1079 return 0;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1080 }
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1081
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1082 r->logged = 1;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1083
7466
48c87377aabd SSL: fixed possible segfault with dynamic certificates.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7463
diff changeset
1084 sscf = arg;
7462
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1085
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1086 nelts = sscf->certificate_values->nelts;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1087 certs = sscf->certificate_values->elts;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1088 keys = sscf->certificate_key_values->elts;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1089
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1090 for (i = 0; i < nelts; i++) {
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1091
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1092 if (ngx_http_complex_value(r, &certs[i], &cert) != NGX_OK) {
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1093 goto failed;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1094 }
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1095
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1096 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1097 "ssl cert: \"%s\"", cert.data);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1098
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1099 if (ngx_http_complex_value(r, &keys[i], &key) != NGX_OK) {
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1100 goto failed;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1101 }
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1102
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1103 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1104 "ssl key: \"%s\"", key.data);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1105
7463
180df83473a4 SSL: passwords support for dynamic certificate loading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7462
diff changeset
1106 if (ngx_ssl_connection_certificate(c, r->pool, &cert, &key,
180df83473a4 SSL: passwords support for dynamic certificate loading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7462
diff changeset
1107 sscf->passwords)
7462
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1108 != NGX_OK)
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1109 {
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1110 goto failed;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1111 }
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1112 }
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1113
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1114 ngx_http_free_request(r, 0);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1115 c->destroyed = 0;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1116 return 1;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1117
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1118 failed:
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1119
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1120 ngx_http_free_request(r, 0);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1121 c->destroyed = 0;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1122 return 0;
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1123 }
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1124
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1125 #endif
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
1126
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
1127 #endif
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
1128
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
1129
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1130 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1131 ngx_http_process_request_line(ngx_event_t *rev)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1132 {
5119
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1133 ssize_t n;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1134 ngx_int_t rc, rv;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1135 ngx_str_t host;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1136 ngx_connection_t *c;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1137 ngx_http_request_t *r;
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
1138
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
1139 c = rev->data;
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
1140 r = c->data;
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1141
209
e1c815be05ae nginx-0.0.1-2003-12-09-18:08:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 201
diff changeset
1142 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0,
e1c815be05ae nginx-0.0.1-2003-12-09-18:08:11 import
Igor Sysoev <igor@sysoev.ru>
parents: 201
diff changeset
1143 "http process request line");
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
1144
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
1145 if (rev->timedout) {
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1146 ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1147 c->timedout = 1;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1148 ngx_http_close_request(r, NGX_HTTP_REQUEST_TIME_OUT);
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1149 return;
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
1150 }
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1151
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1152 rc = NGX_AGAIN;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1153
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1154 for ( ;; ) {
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1155
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1156 if (rc == NGX_AGAIN) {
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1157 n = ngx_http_read_request_header(r);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1158
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1159 if (n == NGX_AGAIN || n == NGX_ERROR) {
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1160 break;
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
1161 }
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
1162 }
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
1163
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1164 switch (r->http_version) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1165 #if (NGX_HTTP_V3)
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1166 case NGX_HTTP_VERSION_30:
8226
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1167 rc = ngx_http_v3_parse_header(r, r->header_in);
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1168 break;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1169 #endif
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1170
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1171 default: /* HTTP/1.x */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1172 rc = ngx_http_parse_request_line(r, r->header_in);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1173 }
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1174
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1175 if (rc == NGX_OK) {
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1176
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1177 /* the request line has been parsed successfully */
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1178
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1179 r->request_line.len = r->request_end - r->request_start;
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1180 r->request_line.data = r->request_start;
8233
1e45c02f6376 HTTP/3 $request_line variable.
Roman Arutyunyan <arut@nginx.com>
parents: 8226
diff changeset
1181 r->request_length = r->header_in->pos - r->request_start; /* XXX */
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1182
5119
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1183 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1184 "http request line: \"%V\"", &r->request_line);
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1185
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1186 r->method_name.len = r->method_end - r->method_start;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1187 r->method_name.data = r->method_start;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1188
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
1189 if (r->http_protocol.data) {
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
1190 r->http_protocol.len = r->request_end - r->http_protocol.data;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
1191 }
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
1192
5119
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1193 if (ngx_http_process_request_uri(r) != NGX_OK) {
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1194 break;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1195 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1196
7295
89430899c72a Added r->schema.
Ruslan Ermilov <ru@nginx.com>
parents: 7294
diff changeset
1197 if (r->schema_end) {
89430899c72a Added r->schema.
Ruslan Ermilov <ru@nginx.com>
parents: 7294
diff changeset
1198 r->schema.len = r->schema_end - r->schema_start;
89430899c72a Added r->schema.
Ruslan Ermilov <ru@nginx.com>
parents: 7294
diff changeset
1199 r->schema.data = r->schema_start;
89430899c72a Added r->schema.
Ruslan Ermilov <ru@nginx.com>
parents: 7294
diff changeset
1200 }
89430899c72a Added r->schema.
Ruslan Ermilov <ru@nginx.com>
parents: 7294
diff changeset
1201
7294
21ad2af3262c Removed extraneous check while processing request line.
Ruslan Ermilov <ru@nginx.com>
parents: 7269
diff changeset
1202 if (r->host_end) {
3152
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
1203
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1204 host.len = r->host_end - r->host_start;
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1205 host.data = r->host_start;
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1206
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1207 rc = ngx_http_validate_host(&host, r->pool, 0);
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1208
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1209 if (rc == NGX_DECLINED) {
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1210 ngx_log_error(NGX_LOG_INFO, c->log, 0,
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1211 "client sent invalid host in request line");
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1212 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1213 break;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1214 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1215
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1216 if (rc == NGX_ERROR) {
3152
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
1217 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1218 break;
3152
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
1219 }
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
1220
5092
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1221 if (ngx_http_set_virtual_server(r, &host) == NGX_ERROR) {
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1222 break;
5092
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1223 }
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1224
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1225 r->headers_in.server = host;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1226 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1227
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1228 if (r->http_version < NGX_HTTP_VERSION_10) {
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1229
5092
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1230 if (r->headers_in.server.len == 0
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1231 && ngx_http_set_virtual_server(r, &r->headers_in.server)
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1232 == NGX_ERROR)
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1233 {
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1234 break;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1235 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1236
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
1237 ngx_http_process_request(r);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1238 break;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1239 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1240
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1241
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1242 if (ngx_list_init(&r->headers_in.headers, r->pool, 20,
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
1243 sizeof(ngx_table_elt_t))
2536
a6d6d762c554 small optimization: " == NGX_ERROR" > " != NGX_OK"
Igor Sysoev <igor@sysoev.ru>
parents: 2534
diff changeset
1244 != NGX_OK)
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1245 {
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1246 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1247 break;
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1248 }
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
1249
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
1250 c->log->action = "reading client request headers";
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1251
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1252 rev->handler = ngx_http_process_request_headers;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1253 ngx_http_process_request_headers(rev);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1254
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1255 break;
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1256 }
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1257
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1258 if (rc == NGX_DONE) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1259 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1260 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1261 return;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1262 }
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1263
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1264 break;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1265 }
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1266
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1267 if (rc != NGX_AGAIN) {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1268
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1269 /* there was error while a request line parsing */
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1270
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1271 ngx_log_error(NGX_LOG_INFO, c->log, 0,
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1272 ngx_http_client_errors[rc - NGX_HTTP_CLIENT_ERROR]);
6993
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
1273
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
1274 if (rc == NGX_HTTP_PARSE_INVALID_VERSION) {
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
1275 ngx_http_finalize_request(r, NGX_HTTP_VERSION_NOT_SUPPORTED);
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
1276
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
1277 } else {
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
1278 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
1279 }
8801ff7d58e1 Don't pretend we support HTTP major versions >1 as HTTP/1.1.
Ruslan Ermilov <ru@nginx.com>
parents: 6964
diff changeset
1280
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1281 break;
408
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 406
diff changeset
1282 }
d6e2b445c1b8 nginx-0.0.10-2004-08-27-19:40:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 406
diff changeset
1283
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1284 /* NGX_AGAIN: a request line parsing is still incomplete */
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1285
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1286 if (r->header_in->pos == r->header_in->end) {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1287
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1288 rv = ngx_http_alloc_large_header_buffer(r, 1);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1289
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1290 if (rv == NGX_ERROR) {
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1291 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1292 break;
220
4f81b931e9ff nginx-0.0.1-2004-01-08-11:47:17 import
Igor Sysoev <igor@sysoev.ru>
parents: 218
diff changeset
1293 }
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1294
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1295 if (rv == NGX_DECLINED) {
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1296 r->request_line.len = r->header_in->end - r->request_start;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1297 r->request_line.data = r->request_start;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1298
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1299 ngx_log_error(NGX_LOG_INFO, c->log, 0,
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1300 "client sent too long URI");
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1301 ngx_http_finalize_request(r, NGX_HTTP_REQUEST_URI_TOO_LARGE);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1302 break;
66
4876cd4a36bb nginx-0.0.1-2003-03-05-20:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 65
diff changeset
1303 }
4876cd4a36bb nginx-0.0.1-2003-03-05-20:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 65
diff changeset
1304 }
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
1305 }
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1306
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1307 ngx_http_run_posted_requests(c);
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1308 }
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1309
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
1310
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
1311 ngx_int_t
5119
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1312 ngx_http_process_request_uri(ngx_http_request_t *r)
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1313 {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1314 ngx_http_core_srv_conf_t *cscf;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1315
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1316 if (r->args_start) {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1317 r->uri.len = r->args_start - 1 - r->uri_start;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1318 } else {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1319 r->uri.len = r->uri_end - r->uri_start;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1320 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1321
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1322 if (r->complex_uri || r->quoted_uri) {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1323
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1324 r->uri.data = ngx_pnalloc(r->pool, r->uri.len + 1);
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1325 if (r->uri.data == NULL) {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1326 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1327 return NGX_ERROR;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1328 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1329
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1330 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1331
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1332 if (ngx_http_parse_complex_uri(r, cscf->merge_slashes) != NGX_OK) {
5769
e0aa54a4357e Reset of r->uri.len on URI parsing errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5605
diff changeset
1333 r->uri.len = 0;
e0aa54a4357e Reset of r->uri.len on URI parsing errors.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5605
diff changeset
1334
5119
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1335 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1336 "client sent invalid request");
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1337 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1338 return NGX_ERROR;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1339 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1340
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1341 } else {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1342 r->uri.data = r->uri_start;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1343 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1344
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1345 r->unparsed_uri.len = r->uri_end - r->uri_start;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1346 r->unparsed_uri.data = r->uri_start;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1347
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1348 r->valid_unparsed_uri = r->space_in_uri ? 0 : 1;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1349
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1350 if (r->uri_ext) {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1351 if (r->args_start) {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1352 r->exten.len = r->args_start - 1 - r->uri_ext;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1353 } else {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1354 r->exten.len = r->uri_end - r->uri_ext;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1355 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1356
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1357 r->exten.data = r->uri_ext;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1358 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1359
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1360 if (r->args_start && r->uri_end > r->args_start) {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1361 r->args.len = r->uri_end - r->args_start;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1362 r->args.data = r->args_start;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1363 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1364
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1365 #if (NGX_WIN32)
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1366 {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1367 u_char *p, *last;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1368
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1369 p = r->uri.data;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1370 last = r->uri.data + r->uri.len;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1371
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1372 while (p < last) {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1373
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1374 if (*p++ == ':') {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1375
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1376 /*
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1377 * this check covers "::$data", "::$index_allocation" and
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1378 * ":$i30:$index_allocation"
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1379 */
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1380
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1381 if (p < last && *p == '$') {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1382 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1383 "client sent unsafe win32 URI");
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1384 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1385 return NGX_ERROR;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1386 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1387 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1388 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1389
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1390 p = r->uri.data + r->uri.len - 1;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1391
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1392 while (p > r->uri.data) {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1393
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1394 if (*p == ' ') {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1395 p--;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1396 continue;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1397 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1398
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1399 if (*p == '.') {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1400 p--;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1401 continue;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1402 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1403
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1404 break;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1405 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1406
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1407 if (p != r->uri.data + r->uri.len - 1) {
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1408 r->uri.len = p + 1 - r->uri.data;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1409 ngx_http_set_exten(r);
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1410 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1411
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1412 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1413 #endif
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1414
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1415 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1416 "http uri: \"%V\"", &r->uri);
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1417
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1418 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1419 "http args: \"%V\"", &r->args);
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1420
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1421 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1422 "http exten: \"%V\"", &r->exten);
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1423
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1424 return NGX_OK;
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1425 }
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1426
f10108c92fef URI processing code moved to a separate function.
Valentin Bartenev <vbart@nginx.com>
parents: 5114
diff changeset
1427
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1428 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1429 ngx_http_process_request_headers(ngx_event_t *rev)
0
4eff17414a43 nginx-0.0.1-2002-08-06-20:39:45 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1430 {
3076
44ac242eb6ac use %*s instead of %V
Igor Sysoev <igor@sysoev.ru>
parents: 3064
diff changeset
1431 u_char *p;
44ac242eb6ac use %*s instead of %V
Igor Sysoev <igor@sysoev.ru>
parents: 3064
diff changeset
1432 size_t len;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1433 ssize_t n;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1434 ngx_int_t rc, rv;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1435 ngx_table_elt_t *h;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1436 ngx_connection_t *c;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1437 ngx_http_header_t *hh;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1438 ngx_http_request_t *r;
511
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1439 ngx_http_core_srv_conf_t *cscf;
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1440 ngx_http_core_main_conf_t *cmcf;
7
b5481d6fbbd4 nginx-0.0.1-2002-08-29-20:59:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 6
diff changeset
1441
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
1442 c = rev->data;
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
1443 r = c->data;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1444
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
1445 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, rev->log, 0,
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
1446 "http process request header line");
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1447
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1448 if (rev->timedout) {
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1449 ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT, "client timed out");
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1450 c->timedout = 1;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1451 ngx_http_close_request(r, NGX_HTTP_REQUEST_TIME_OUT);
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1452 return;
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1453 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1454
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1455 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1456
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1457 rc = NGX_OK;
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1458
7
b5481d6fbbd4 nginx-0.0.1-2002-08-29-20:59:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 6
diff changeset
1459 for ( ;; ) {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1460
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1461 if (rc == NGX_AGAIN) {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1462
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1463 if (r->header_in->pos == r->header_in->end) {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1464
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1465 rv = ngx_http_alloc_large_header_buffer(r, 0);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1466
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1467 if (rv == NGX_ERROR) {
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1468 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1469 break;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1470 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1471
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1472 if (rv == NGX_DECLINED) {
3076
44ac242eb6ac use %*s instead of %V
Igor Sysoev <igor@sysoev.ru>
parents: 3064
diff changeset
1473 p = r->header_name_start;
44ac242eb6ac use %*s instead of %V
Igor Sysoev <igor@sysoev.ru>
parents: 3064
diff changeset
1474
3848
de59ad6bf557 introduce 494 code "Request Header Too Large"
Igor Sysoev <igor@sysoev.ru>
parents: 3814
diff changeset
1475 r->lingering_close = 1;
de59ad6bf557 introduce 494 code "Request Header Too Large"
Igor Sysoev <igor@sysoev.ru>
parents: 3814
diff changeset
1476
3287
e07630a9547d fix segfault if there is single large_client_header_buffers
Igor Sysoev <igor@sysoev.ru>
parents: 3228
diff changeset
1477 if (p == NULL) {
e07630a9547d fix segfault if there is single large_client_header_buffers
Igor Sysoev <igor@sysoev.ru>
parents: 3228
diff changeset
1478 ngx_log_error(NGX_LOG_INFO, c->log, 0,
e07630a9547d fix segfault if there is single large_client_header_buffers
Igor Sysoev <igor@sysoev.ru>
parents: 3228
diff changeset
1479 "client sent too large request");
3848
de59ad6bf557 introduce 494 code "Request Header Too Large"
Igor Sysoev <igor@sysoev.ru>
parents: 3814
diff changeset
1480 ngx_http_finalize_request(r,
de59ad6bf557 introduce 494 code "Request Header Too Large"
Igor Sysoev <igor@sysoev.ru>
parents: 3814
diff changeset
1481 NGX_HTTP_REQUEST_HEADER_TOO_LARGE);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1482 break;
3287
e07630a9547d fix segfault if there is single large_client_header_buffers
Igor Sysoev <igor@sysoev.ru>
parents: 3228
diff changeset
1483 }
e07630a9547d fix segfault if there is single large_client_header_buffers
Igor Sysoev <igor@sysoev.ru>
parents: 3228
diff changeset
1484
e07630a9547d fix segfault if there is single large_client_header_buffers
Igor Sysoev <igor@sysoev.ru>
parents: 3228
diff changeset
1485 len = r->header_in->end - p;
e07630a9547d fix segfault if there is single large_client_header_buffers
Igor Sysoev <igor@sysoev.ru>
parents: 3228
diff changeset
1486
3076
44ac242eb6ac use %*s instead of %V
Igor Sysoev <igor@sysoev.ru>
parents: 3064
diff changeset
1487 if (len > NGX_MAX_ERROR_STR - 300) {
44ac242eb6ac use %*s instead of %V
Igor Sysoev <igor@sysoev.ru>
parents: 3064
diff changeset
1488 len = NGX_MAX_ERROR_STR - 300;
531
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1489 }
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
1490
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1491 ngx_log_error(NGX_LOG_INFO, c->log, 0,
5871
21043ce2a005 Fixed possible buffer overrun in "too long header line" logging.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5813
diff changeset
1492 "client sent too long header line: \"%*s...\"",
21043ce2a005 Fixed possible buffer overrun in "too long header line" logging.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5813
diff changeset
1493 len, r->header_name_start);
3848
de59ad6bf557 introduce 494 code "Request Header Too Large"
Igor Sysoev <igor@sysoev.ru>
parents: 3814
diff changeset
1494
de59ad6bf557 introduce 494 code "Request Header Too Large"
Igor Sysoev <igor@sysoev.ru>
parents: 3814
diff changeset
1495 ngx_http_finalize_request(r,
de59ad6bf557 introduce 494 code "Request Header Too Large"
Igor Sysoev <igor@sysoev.ru>
parents: 3814
diff changeset
1496 NGX_HTTP_REQUEST_HEADER_TOO_LARGE);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1497 break;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1498 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1499 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1500
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1501 n = ngx_http_read_request_header(r);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1502
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1503 if (n == NGX_AGAIN || n == NGX_ERROR) {
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1504 break;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1505 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1506 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1507
5092
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1508 /* the host header could change the server configuration context */
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1509 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1510
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1511 switch (r->http_version) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1512 #if (NGX_HTTP_V3)
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1513 case NGX_HTTP_VERSION_30:
8226
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1514 rc = ngx_http_v3_parse_header(r, r->header_in);
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1515 break;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1516 #endif
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1517
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1518 default: /* HTTP/1.x */
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1519 rc = ngx_http_parse_header_line(r, r->header_in,
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1520 cscf->underscores_in_headers);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1521 }
7
b5481d6fbbd4 nginx-0.0.1-2002-08-29-20:59:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 6
diff changeset
1522
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1523 if (rc == NGX_OK) {
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1524
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1525 /* XXX */
4739
986cc869b09d Corrected $request_length calculation for pipelined requests.
Andrey Belov <defan@nginx.com>
parents: 4697
diff changeset
1526 r->request_length += r->header_in->pos - r->header_name_start;
986cc869b09d Corrected $request_length calculation for pipelined requests.
Andrey Belov <defan@nginx.com>
parents: 4697
diff changeset
1527
511
c12967aadd87 nginx-0.1.30-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 509
diff changeset
1528 if (r->invalid_header && cscf->ignore_invalid_headers) {
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1529
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1530 /* there was error while a header line parsing */
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1531
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1532 ngx_log_error(NGX_LOG_INFO, c->log, 0,
3076
44ac242eb6ac use %*s instead of %V
Igor Sysoev <igor@sysoev.ru>
parents: 3064
diff changeset
1533 "client sent invalid header line: \"%*s\"",
44ac242eb6ac use %*s instead of %V
Igor Sysoev <igor@sysoev.ru>
parents: 3064
diff changeset
1534 r->header_end - r->header_name_start,
44ac242eb6ac use %*s instead of %V
Igor Sysoev <igor@sysoev.ru>
parents: 3064
diff changeset
1535 r->header_name_start);
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1536 continue;
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1537 }
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
1538
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1539 /* a header line has been parsed successfully */
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1540
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1541 h = ngx_list_push(&r->headers_in.headers);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1542 if (h == NULL) {
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1543 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1544 break;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1545 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1546
507
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1547 h->hash = r->header_hash;
cd3117ad9aab nginx-0.1.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 505
diff changeset
1548
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1549 h->key.len = r->header_name_end - r->header_name_start;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1550 h->key.data = r->header_name_start;
8226
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1551
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1552 if (h->key.data[h->key.len]) {
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1553 h->key.data[h->key.len] = '\0';
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1554 }
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1555
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1556 h->value.len = r->header_end - r->header_start;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1557 h->value.data = r->header_start;
8226
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1558
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1559 if (h->value.data[h->value.len]) {
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1560 h->value.data[h->value.len] = '\0';
268f4389130d Refactored HTTP/3 parser.
Roman Arutyunyan <arut@nginx.com>
parents: 8219
diff changeset
1561 }
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
1562
2049
2a92804f4109 *) back out r2040
Igor Sysoev <igor@sysoev.ru>
parents: 2019
diff changeset
1563 h->lowcase_key = ngx_pnalloc(r->pool, h->key.len);
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1564 if (h->lowcase_key == NULL) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1565 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1566 break;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1567 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1568
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1569 if (h->key.len == r->lowcase_index) {
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1570 ngx_memcpy(h->lowcase_key, r->lowcase_header, h->key.len);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1571
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1572 } else {
2135
8c6521eedf84 ngx_strlow()
Igor Sysoev <igor@sysoev.ru>
parents: 2123
diff changeset
1573 ngx_strlow(h->lowcase_key, h->key.data, h->key.len);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1574 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1575
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1576 hh = ngx_hash_find(&cmcf->headers_in_hash, h->hash,
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1577 h->lowcase_key, h->key.len);
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1578
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1579 if (hh && hh->handler(r, h, hh->offset) != NGX_OK) {
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1580 break;
649
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1581 }
1e720b0be7ec nginx-0.3.46-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 647
diff changeset
1582
210
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 209
diff changeset
1583 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1584 "http header: \"%V: %V\"",
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1585 &h->key, &h->value);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1586
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
1587 continue;
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1588 }
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1589
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1590 if (rc == NGX_HTTP_PARSE_HEADER_DONE) {
8
708f8bb772ec nginx-0.0.1-2002-09-02-18:48:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 7
diff changeset
1591
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1592 /* a whole header has been parsed successfully */
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
1593
210
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 209
diff changeset
1594 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 209
diff changeset
1595 "http header done");
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
1596
8233
1e45c02f6376 HTTP/3 $request_line variable.
Roman Arutyunyan <arut@nginx.com>
parents: 8226
diff changeset
1597 r->request_length += r->header_in->pos - r->header_name_start; /* XXX */
475
c3c2848fc081 nginx-0.1.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
1598
368
15c84a40e87d nginx-0.0.7-2004-06-24-20:07:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 367
diff changeset
1599 r->http_state = NGX_HTTP_PROCESS_REQUEST_STATE;
15c84a40e87d nginx-0.0.7-2004-06-24-20:07:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 367
diff changeset
1600
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
1601 rc = ngx_http_process_request_header(r);
119
cd54bcbaf3b5 nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents: 114
diff changeset
1602
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
1603 if (rc != NGX_OK) {
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1604 break;
82
fccdb921e8b8 nginx-0.0.1-2003-04-25-18:43:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 77
diff changeset
1605 }
fccdb921e8b8 nginx-0.0.1-2003-04-25-18:43:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 77
diff changeset
1606
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
1607 ngx_http_process_request(r);
537
c9ad0d9c7d59 nginx-0.1.43-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 535
diff changeset
1608
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1609 break;
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1610 }
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1611
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1612 if (rc == NGX_AGAIN) {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1613
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1614 /* a header line parsing is still not complete */
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1615
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1616 continue;
66
4876cd4a36bb nginx-0.0.1-2003-03-05-20:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 65
diff changeset
1617 }
4876cd4a36bb nginx-0.0.1-2003-03-05-20:30:51 import
Igor Sysoev <igor@sysoev.ru>
parents: 65
diff changeset
1618
6409
71edd9192f24 Fixed buffer over-read while logging invalid request headers.
Valentin Bartenev <vbart@nginx.com>
parents: 6320
diff changeset
1619 /* rc == NGX_HTTP_PARSE_INVALID_HEADER */
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1620
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
1621 ngx_log_error(NGX_LOG_INFO, c->log, 0,
6409
71edd9192f24 Fixed buffer over-read while logging invalid request headers.
Valentin Bartenev <vbart@nginx.com>
parents: 6320
diff changeset
1622 "client sent invalid header line");
71edd9192f24 Fixed buffer over-read while logging invalid request headers.
Valentin Bartenev <vbart@nginx.com>
parents: 6320
diff changeset
1623
1427
bfb6aacc0ab9 return 400 response
Igor Sysoev <igor@sysoev.ru>
parents: 1424
diff changeset
1624 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1625 break;
19
d7908993fdeb nginx-0.0.1-2002-12-02-19:09:40 import; resume after 2 months stall
Igor Sysoev <igor@sysoev.ru>
parents: 18
diff changeset
1626 }
7354
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1627
1812f1d79d84 Fixed socket leak with "return 444" in error_page (ticket #274).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7351
diff changeset
1628 ngx_http_run_posted_requests(c);
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
1629 }
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
1630
24
77c7629a2627 nginx-0.0.1-2002-12-10-21:05:12 import
Igor Sysoev <igor@sysoev.ru>
parents: 23
diff changeset
1631
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1632 static ssize_t
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1633 ngx_http_read_request_header(ngx_http_request_t *r)
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1634 {
95
b48066122884 nginx-0.0.1-2003-05-23-15:53:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 94
diff changeset
1635 ssize_t n;
b48066122884 nginx-0.0.1-2003-05-23-15:53:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 94
diff changeset
1636 ngx_event_t *rev;
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1637 ngx_connection_t *c;
95
b48066122884 nginx-0.0.1-2003-05-23-15:53:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 94
diff changeset
1638 ngx_http_core_srv_conf_t *cscf;
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1639
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1640 c = r->connection;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1641 rev = c->read;
103
6dfda4cf5200 nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 101
diff changeset
1642
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1643 n = r->header_in->last - r->header_in->pos;
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1644
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1645 if (n > 0) {
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1646 return n;
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1647 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1648
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1649 if (rev->ready) {
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1650 n = c->recv(c, r->header_in->last,
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1651 r->header_in->end - r->header_in->last);
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1652 } else {
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1653 n = NGX_AGAIN;
189
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
1654 }
c966c09be66b nginx-0.0.1-2003-11-18-19:49:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 176
diff changeset
1655
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1656 if (n == NGX_AGAIN) {
1856
11d12ef106a9 axe old flag remained after ancient "post_accept_timeout" directive
Igor Sysoev <igor@sysoev.ru>
parents: 1855
diff changeset
1657 if (!rev->timer_set) {
395
f8f0f1834266 nginx-0.0.7-2004-07-16-21:11:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 394
diff changeset
1658 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
95
b48066122884 nginx-0.0.1-2003-05-23-15:53:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 94
diff changeset
1659 ngx_add_timer(rev, cscf->client_header_timeout);
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1660 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1661
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
1662 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
143
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
1663 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
1664 return NGX_ERROR;
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
1665 }
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
1666
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1667 return NGX_AGAIN;
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1668 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1669
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1670 if (n == 0) {
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1671 ngx_log_error(NGX_LOG_INFO, c->log, 0,
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4552
diff changeset
1672 "client prematurely closed connection");
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
1673 }
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1674
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1675 if (n == 0 || n == NGX_ERROR) {
991
9075a1c5dc78 use right status code
Igor Sysoev <igor@sysoev.ru>
parents: 990
diff changeset
1676 c->error = 1;
992
3f2e60adf4ef correct an error log message
Igor Sysoev <igor@sysoev.ru>
parents: 991
diff changeset
1677 c->log->action = "reading client request headers";
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1678
991
9075a1c5dc78 use right status code
Igor Sysoev <igor@sysoev.ru>
parents: 990
diff changeset
1679 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1680 return NGX_ERROR;
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1681 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1682
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1683 r->header_in->last += n;
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1684
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1685 return n;
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1686 }
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1687
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
1688
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1689 static ngx_int_t
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1690 ngx_http_alloc_large_header_buffer(ngx_http_request_t *r,
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1691 ngx_uint_t request_line)
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1692 {
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1693 u_char *old, *new;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1694 ngx_buf_t *b;
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1695 ngx_chain_t *cl;
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1696 ngx_http_connection_t *hc;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1697 ngx_http_core_srv_conf_t *cscf;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1698
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1699 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1700 "http alloc large header buffer");
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1701
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1702 if (request_line && r->state == 0) {
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1703
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1704 /* the client fills up the buffer with "\r\n" */
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1705
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1706 r->header_in->pos = r->header_in->start;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1707 r->header_in->last = r->header_in->start;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1708
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1709 return NGX_OK;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1710 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1711
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1712 old = request_line ? r->request_start : r->header_name_start; /* XXX */
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1713
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1714 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1715
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1716 if (r->state != 0
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1717 && (size_t) (r->header_in->pos - old)
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1718 >= cscf->large_client_header_buffers.size)
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1719 {
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1720 return NGX_DECLINED;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1721 }
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1722
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1723 hc = r->http_connection;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1724
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1725 if (hc->free) {
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1726 cl = hc->free;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1727 hc->free = cl->next;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1728
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1729 b = cl->buf;
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1730
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1731 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1732 "http large header free: %p %uz",
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1733 b->pos, b->end - b->last);
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1734
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1735 } else if (hc->nbusy < cscf->large_client_header_buffers.num) {
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1736
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1737 b = ngx_create_temp_buf(r->connection->pool,
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1738 cscf->large_client_header_buffers.size);
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1739 if (b == NULL) {
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1740 return NGX_ERROR;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1741 }
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1742
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1743 cl = ngx_alloc_chain_link(r->connection->pool);
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1744 if (cl == NULL) {
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1745 return NGX_ERROR;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1746 }
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1747
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1748 cl->buf = b;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1749
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1750 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
1751 "http large header alloc: %p %uz",
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1752 b->pos, b->end - b->last);
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1753
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1754 } else {
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1755 return NGX_DECLINED;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1756 }
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1757
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1758 cl->next = hc->busy;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1759 hc->busy = cl;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
1760 hc->nbusy++;
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1761
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1762 if (r->state == 0) {
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1763 /*
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1764 * r->state == 0 means that a header line was parsed successfully
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1765 * and we do not need to copy incomplete header line and
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1766 * to relocate the parser header pointers
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1767 */
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1768
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1769 r->header_in = b;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1770
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1771 return NGX_OK;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1772 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1773
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1774 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6412
diff changeset
1775 "http large header copy: %uz", r->header_in->pos - old);
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1776
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1777 new = b->start;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1778
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1779 ngx_memcpy(new, old, r->header_in->pos - old);
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1780
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1781 b->pos = new + (r->header_in->pos - old);
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
1782 b->last = new + (r->header_in->pos - old);
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1783
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1784 if (request_line) {
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1785 r->request_start = new;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1786
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1787 if (r->request_end) {
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1788 r->request_end = new + (r->request_end - old);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1789 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1790
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1791 if (r->method_start >= old && r->method_start < r->header_in->pos) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1792 r->method_start = new + (r->method_start - old);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1793 r->method_end = new + (r->method_end - old);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1794 }
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1795
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1796 if (r->uri_start >= old && r->uri_start < r->header_in->pos) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1797 r->uri_start = new + (r->uri_start - old);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1798 r->uri_end = new + (r->uri_end - old);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1799 }
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1800
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1801 if (r->schema_start >= old && r->schema_start < r->header_in->pos) {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1802 r->schema_start = new + (r->schema_start - old);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1803 r->schema_end = new + (r->schema_end - old);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1804 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1805
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1806 if (r->host_start >= old && r->host_start < r->header_in->pos) {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1807 r->host_start = new + (r->host_start - old);
928
a6fe6bedb9e3 fix segfault when $host is used and
Igor Sysoev <igor@sysoev.ru>
parents: 895
diff changeset
1808 if (r->host_end) {
a6fe6bedb9e3 fix segfault when $host is used and
Igor Sysoev <igor@sysoev.ru>
parents: 895
diff changeset
1809 r->host_end = new + (r->host_end - old);
a6fe6bedb9e3 fix segfault when $host is used and
Igor Sysoev <igor@sysoev.ru>
parents: 895
diff changeset
1810 }
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1811 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1812
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1813 if (r->port_start >= old && r->port_start < r->header_in->pos) {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1814 r->port_start = new + (r->port_start - old);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1815 r->port_end = new + (r->port_end - old);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1816 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
1817
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1818 if (r->uri_ext >= old && r->uri_ext < r->header_in->pos) {
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1819 r->uri_ext = new + (r->uri_ext - old);
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1820 }
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1821
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1822 if (r->args_start >= old && r->args_start < r->header_in->pos) {
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1823 r->args_start = new + (r->args_start - old);
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1824 }
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1825
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1826 if (r->http_protocol.data >= old
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1827 && r->http_protocol.data < r->header_in->pos)
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1828 {
1677
c997912a8f0b copy protocol value when large request line is copied,
Igor Sysoev <igor@sysoev.ru>
parents: 1676
diff changeset
1829 r->http_protocol.data = new + (r->http_protocol.data - old);
c997912a8f0b copy protocol value when large request line is copied,
Igor Sysoev <igor@sysoev.ru>
parents: 1676
diff changeset
1830 }
c997912a8f0b copy protocol value when large request line is copied,
Igor Sysoev <igor@sysoev.ru>
parents: 1676
diff changeset
1831
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1832 } else {
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1833 if (r->header_name_start >= old
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1834 && r->header_name_start < r->header_in->pos)
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1835 {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1836 r->header_name_start = new;
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1837 r->header_name_end = new + (r->header_name_end - old);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1838 }
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1839
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1840 if (r->header_start >= old && r->header_start < r->header_in->pos) {
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1841 r->header_start = new + (r->header_start - old);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1842 r->header_end = new + (r->header_end - old);
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
1843 }
435
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1844 }
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1845
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1846 r->header_in = b;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1847
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1848 return NGX_OK;
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1849 }
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1850
5cdc4838d4e8 nginx-0.0.11-2004-09-22-20:18:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 432
diff changeset
1851
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
1852 static ngx_int_t
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1853 ngx_http_process_header_line(ngx_http_request_t *r, ngx_table_elt_t *h,
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1854 ngx_uint_t offset)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1855 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1856 ngx_table_elt_t **ph;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1857
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1858 ph = (ngx_table_elt_t **) ((char *) &r->headers_in + offset);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1859
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1860 if (*ph == NULL) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1861 *ph = h;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1862 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1863
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1864 return NGX_OK;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1865 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1866
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1867
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
1868 static ngx_int_t
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1869 ngx_http_process_unique_header_line(ngx_http_request_t *r, ngx_table_elt_t *h,
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1870 ngx_uint_t offset)
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1871 {
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1872 ngx_table_elt_t **ph;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1873
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1874 ph = (ngx_table_elt_t **) ((char *) &r->headers_in + offset);
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1875
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1876 if (*ph == NULL) {
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1877 *ph = h;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1878 return NGX_OK;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1879 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1880
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1881 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1882 "client sent duplicate header line: \"%V: %V\", "
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1883 "previous value: \"%V: %V\"",
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
1884 &h->key, &h->value, &(*ph)->key, &(*ph)->value);
523
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1885
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1886 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1887
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1888 return NGX_ERROR;
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1889 }
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1890
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1891
2019117e6b38 nginx-0.1.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 521
diff changeset
1892 static ngx_int_t
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1893 ngx_http_process_host(ngx_http_request_t *r, ngx_table_elt_t *h,
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1894 ngx_uint_t offset)
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1895 {
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1896 ngx_int_t rc;
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1897 ngx_str_t host;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1898
7627
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1899 if (r->headers_in.host) {
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1900 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1901 "client sent duplicate host header: \"%V: %V\", "
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1902 "previous value: \"%V: %V\"",
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1903 &h->key, &h->value, &r->headers_in.host->key,
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1904 &r->headers_in.host->value);
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1905 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1906 return NGX_ERROR;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1907 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1908
7627
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1909 r->headers_in.host = h;
4f18393a1d51 Disabled duplicate "Host" headers (ticket #1724).
Maxim Dounin <mdounin@mdounin.ru>
parents: 7626
diff changeset
1910
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1911 host = h->value;
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1912
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1913 rc = ngx_http_validate_host(&host, r->pool, 0);
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1914
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1915 if (rc == NGX_DECLINED) {
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1916 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1917 "client sent invalid host header");
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1918 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1919 return NGX_ERROR;
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1920 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1921
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1922 if (rc == NGX_ERROR) {
3152
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
1923 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
1924 return NGX_ERROR;
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
1925 }
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
1926
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1927 if (r->headers_in.server.len) {
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1928 return NGX_OK;
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1929 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1930
5092
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1931 if (ngx_http_set_virtual_server(r, &host) == NGX_ERROR) {
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1932 return NGX_ERROR;
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1933 }
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
1934
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
1935 r->headers_in.server = host;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1936
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1937 return NGX_OK;
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1938 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1939
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1940
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
1941 static ngx_int_t
1467
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1942 ngx_http_process_connection(ngx_http_request_t *r, ngx_table_elt_t *h,
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1943 ngx_uint_t offset)
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1944 {
1549
099d8470e6c3 pass length clearly
Igor Sysoev <igor@sysoev.ru>
parents: 1543
diff changeset
1945 if (ngx_strcasestrn(h->value.data, "close", 5 - 1)) {
1467
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1946 r->headers_in.connection_type = NGX_HTTP_CONNECTION_CLOSE;
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1947
1549
099d8470e6c3 pass length clearly
Igor Sysoev <igor@sysoev.ru>
parents: 1543
diff changeset
1948 } else if (ngx_strcasestrn(h->value.data, "keep-alive", 10 - 1)) {
1467
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1949 r->headers_in.connection_type = NGX_HTTP_CONNECTION_KEEP_ALIVE;
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1950 }
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1951
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1952 return NGX_OK;
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1953 }
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1954
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1955
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
1956 static ngx_int_t
2004
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1957 ngx_http_process_user_agent(ngx_http_request_t *r, ngx_table_elt_t *h,
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1958 ngx_uint_t offset)
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1959 {
2205
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1960 u_char *user_agent, *msie;
2004
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1961
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1962 if (r->headers_in.user_agent) {
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1963 return NGX_OK;
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1964 }
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1965
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1966 r->headers_in.user_agent = h;
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1967
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1968 /* check some widespread browsers while the header is in CPU cache */
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1969
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1970 user_agent = h->value.data;
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1971
2205
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1972 msie = ngx_strstrn(user_agent, "MSIE ", 5 - 1);
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1973
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1974 if (msie && msie + 7 < user_agent + h->value.len) {
2004
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1975
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1976 r->headers_in.msie = 1;
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1977
2205
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1978 if (msie[6] == '.') {
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1979
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1980 switch (msie[5]) {
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1981 case '4':
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1982 case '5':
3054
a137de814516 do not disable gzip for MSIE 6.0 SV1 in "gzip_disable msie6"
Igor Sysoev <igor@sysoev.ru>
parents: 3052
diff changeset
1983 r->headers_in.msie6 = 1;
a137de814516 do not disable gzip for MSIE 6.0 SV1 in "gzip_disable msie6"
Igor Sysoev <igor@sysoev.ru>
parents: 3052
diff changeset
1984 break;
2205
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1985 case '6':
3054
a137de814516 do not disable gzip for MSIE 6.0 SV1 in "gzip_disable msie6"
Igor Sysoev <igor@sysoev.ru>
parents: 3052
diff changeset
1986 if (ngx_strstrn(msie + 8, "SV1", 3 - 1) == NULL) {
a137de814516 do not disable gzip for MSIE 6.0 SV1 in "gzip_disable msie6"
Igor Sysoev <igor@sysoev.ru>
parents: 3052
diff changeset
1987 r->headers_in.msie6 = 1;
a137de814516 do not disable gzip for MSIE 6.0 SV1 in "gzip_disable msie6"
Igor Sysoev <igor@sysoev.ru>
parents: 3052
diff changeset
1988 }
a137de814516 do not disable gzip for MSIE 6.0 SV1 in "gzip_disable msie6"
Igor Sysoev <igor@sysoev.ru>
parents: 3052
diff changeset
1989 break;
2205
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
1990 }
2004
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1991 }
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1992
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1993 #if 0
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1994 /* MSIE ignores the SSL "close notify" alert */
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1995 if (c->ssl) {
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1996 c->ssl->no_send_shutdown = 1;
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1997 }
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1998 #endif
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
1999 }
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2000
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2001 if (ngx_strstrn(user_agent, "Opera", 5 - 1)) {
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2002 r->headers_in.opera = 1;
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2003 r->headers_in.msie = 0;
2205
5398f47082f0 gzip_disable msie6
Igor Sysoev <igor@sysoev.ru>
parents: 2195
diff changeset
2004 r->headers_in.msie6 = 0;
2004
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2005 }
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2006
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2007 if (!r->headers_in.msie && !r->headers_in.opera) {
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2008
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2009 if (ngx_strstrn(user_agent, "Gecko/", 6 - 1)) {
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2010 r->headers_in.gecko = 1;
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2011
3315
63fafb988446 r->chrome
Igor Sysoev <igor@sysoev.ru>
parents: 3287
diff changeset
2012 } else if (ngx_strstrn(user_agent, "Chrome/", 7 - 1)) {
63fafb988446 r->chrome
Igor Sysoev <igor@sysoev.ru>
parents: 3287
diff changeset
2013 r->headers_in.chrome = 1;
63fafb988446 r->chrome
Igor Sysoev <igor@sysoev.ru>
parents: 3287
diff changeset
2014
4552
b00098cbc44d Restricted keepalive_disable safari to OS X only.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4472
diff changeset
2015 } else if (ngx_strstrn(user_agent, "Safari/", 7 - 1)
b00098cbc44d Restricted keepalive_disable safari to OS X only.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4472
diff changeset
2016 && ngx_strstrn(user_agent, "Mac OS X", 8 - 1))
b00098cbc44d Restricted keepalive_disable safari to OS X only.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4472
diff changeset
2017 {
3419
fcd72b8d69f3 disable keepalive for Safari:
Igor Sysoev <igor@sysoev.ru>
parents: 3416
diff changeset
2018 r->headers_in.safari = 1;
fcd72b8d69f3 disable keepalive for Safari:
Igor Sysoev <igor@sysoev.ru>
parents: 3416
diff changeset
2019
2004
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2020 } else if (ngx_strstrn(user_agent, "Konqueror", 9 - 1)) {
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2021 r->headers_in.konqueror = 1;
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2022 }
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2023 }
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2024
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2025 return NGX_OK;
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2026 }
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2027
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2028
38fa1d3a31b7 test user agent in header callback
Igor Sysoev <igor@sysoev.ru>
parents: 1974
diff changeset
2029 static ngx_int_t
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2030 ngx_http_process_multi_header_lines(ngx_http_request_t *r, ngx_table_elt_t *h,
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2031 ngx_uint_t offset)
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2032 {
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2033 ngx_array_t *headers;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2034 ngx_table_elt_t **ph;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2035
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2036 headers = (ngx_array_t *) ((char *) &r->headers_in + offset);
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2037
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2038 if (headers->elts == NULL) {
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2039 if (ngx_array_init(headers, r->pool, 1, sizeof(ngx_table_elt_t *))
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2040 != NGX_OK)
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2041 {
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2042 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2043 return NGX_ERROR;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2044 }
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2045 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2046
5084
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2047 ph = ngx_array_push(headers);
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2048 if (ph == NULL) {
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2049 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2050 return NGX_ERROR;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2051 }
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2052
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2053 *ph = h;
f7fe817c92a2 Correctly handle multiple X-Forwarded-For headers (ticket #106).
Ruslan Ermilov <ru@nginx.com>
parents: 5082
diff changeset
2054 return NGX_OK;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2055 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2056
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2057
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
2058 ngx_int_t
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2059 ngx_http_process_request_header(ngx_http_request_t *r)
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2060 {
5092
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
2061 if (r->headers_in.server.len == 0
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
2062 && ngx_http_set_virtual_server(r, &r->headers_in.server)
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
2063 == NGX_ERROR)
c4d3310574e0 Apply server configuration as soon as host is known.
Valentin Bartenev <vbart@nginx.com>
parents: 5091
diff changeset
2064 {
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2065 return NGX_ERROR;
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2066 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2067
8215
38c0898b6df7 HTTP/3.
Roman Arutyunyan <arut@nginx.com>
parents: 8211
diff changeset
2068 if (r->headers_in.host == NULL && r->http_version == NGX_HTTP_VERSION_11) {
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2069 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2070 "client sent HTTP/1.1 request without \"Host\" header");
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2071 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2072 return NGX_ERROR;
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2073 }
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2074
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2075 if (r->headers_in.content_length) {
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2076 r->headers_in.content_length_n =
663
6d5c1535bb9d nginx-0.3.53-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 657
diff changeset
2077 ngx_atoof(r->headers_in.content_length->value.data,
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2078 r->headers_in.content_length->value.len);
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2079
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2080 if (r->headers_in.content_length_n == NGX_ERROR) {
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
2081 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
2082 "client sent invalid \"Content-Length\" header");
4930
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2083 ngx_http_finalize_request(r, NGX_HTTP_BAD_REQUEST);
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
2084 return NGX_ERROR;
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2085 }
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2086 }
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2087
6306
b1858fc47e3b Style: unified request method checks.
Ruslan Ermilov <ru@nginx.com>
parents: 6289
diff changeset
2088 if (r->method == NGX_HTTP_TRACE) {
1151
b1ebd03de948 disable TRACE method
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
2089 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
b1ebd03de948 disable TRACE method
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
2090 "client sent TRACE method");
b1ebd03de948 disable TRACE method
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
2091 ngx_http_finalize_request(r, NGX_HTTP_NOT_ALLOWED);
b1ebd03de948 disable TRACE method
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
2092 return NGX_ERROR;
b1ebd03de948 disable TRACE method
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
2093 }
b1ebd03de948 disable TRACE method
Igor Sysoev <igor@sysoev.ru>
parents: 1135
diff changeset
2094
4930
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2095 if (r->headers_in.transfer_encoding) {
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2096 if (r->headers_in.transfer_encoding->value.len == 7
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2097 && ngx_strncasecmp(r->headers_in.transfer_encoding->value.data,
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2098 (u_char *) "chunked", 7) == 0)
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2099 {
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2100 r->headers_in.content_length = NULL;
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2101 r->headers_in.content_length_n = -1;
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2102 r->headers_in.chunked = 1;
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2103
7626
fe5976aae0e3 Removed "Transfer-Encoding: identity" support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7625
diff changeset
2104 } else {
4930
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2105 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2106 "client sent unknown \"Transfer-Encoding\": \"%V\"",
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2107 &r->headers_in.transfer_encoding->value);
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2108 ngx_http_finalize_request(r, NGX_HTTP_NOT_IMPLEMENTED);
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2109 return NGX_ERROR;
6f085bfcdb4d Request body: chunked transfer encoding support.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4891
diff changeset
2110 }
298
4a3f18406832 nginx-0.0.3-2004-03-30-10:27:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
2111 }
4a3f18406832 nginx-0.0.3-2004-03-30-10:27:36 import
Igor Sysoev <igor@sysoev.ru>
parents: 294
diff changeset
2112
1467
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
2113 if (r->headers_in.connection_type == NGX_HTTP_CONNECTION_KEEP_ALIVE) {
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
2114 if (r->headers_in.keep_alive) {
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
2115 r->headers_in.keep_alive_n =
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
2116 ngx_atotm(r->headers_in.keep_alive->value.data,
e5352b711c47 there may be several "Connection" header lines and each may have several tokens
Igor Sysoev <igor@sysoev.ru>
parents: 1464
diff changeset
2117 r->headers_in.keep_alive->value.len);
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2118 }
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2119 }
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2120
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2121 return NGX_OK;
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2122 }
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2123
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2124
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
2125 void
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2126 ngx_http_process_request(ngx_http_request_t *r)
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2127 {
1704
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1677
diff changeset
2128 ngx_connection_t *c;
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2129
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2130 c = r->connection;
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2131
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2132 #if (NGX_HTTP_SSL)
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2133
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
2134 if (r->http_connection->ssl) {
1704
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1677
diff changeset
2135 long rc;
1974
f32cc6df6bd6 fix memory leak when ssl_verify_client is on
Igor Sysoev <igor@sysoev.ru>
parents: 1924
diff changeset
2136 X509 *cert;
1704
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1677
diff changeset
2137 ngx_http_ssl_srv_conf_t *sscf;
e584e946e198 move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents: 1677
diff changeset
2138
5091
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
2139 if (c->ssl == NULL) {
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
2140 ngx_log_error(NGX_LOG_INFO, c->log, 0,
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
2141 "client sent plain HTTP request to HTTPS port");
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
2142 ngx_http_finalize_request(r, NGX_HTTP_TO_HTTPS);
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
2143 return;
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
2144 }
d3e256c67d6d SSL: do not treat SSL handshake as request.
Valentin Bartenev <vbart@nginx.com>
parents: 5090
diff changeset
2145
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2146 sscf = ngx_http_get_module_srv_conf(r, ngx_http_ssl_module);
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2147
2994
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2148 if (sscf->verify) {
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2149 rc = SSL_get_verify_result(c->ssl->connection);
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2150
4884
e406c997470a SSL: the "ssl_verify_client" directive parameter "optional_no_ca".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4770
diff changeset
2151 if (rc != X509_V_OK
e406c997470a SSL: the "ssl_verify_client" directive parameter "optional_no_ca".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4770
diff changeset
2152 && (sscf->verify != 3 || !ngx_ssl_verify_error_optional(rc)))
e406c997470a SSL: the "ssl_verify_client" directive parameter "optional_no_ca".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4770
diff changeset
2153 {
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2154 ngx_log_error(NGX_LOG_INFO, c->log, 0,
671
cec32b3753ac nginx-0.3.57-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 669
diff changeset
2155 "client SSL certificate verify error: (%l:%s)",
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2156 rc, X509_verify_cert_error_string(rc));
1924
291689a7e5dc invalidate SSL session if there is no valid client certificate
Igor Sysoev <igor@sysoev.ru>
parents: 1894
diff changeset
2157
7193
9d14931cec8c SSL: using default server context in session remove (closes #1464).
Sergey Kandaurov <pluknet@nginx.com>
parents: 7156
diff changeset
2158 ngx_ssl_remove_cached_session(c->ssl->session_ctx,
1924
291689a7e5dc invalidate SSL session if there is no valid client certificate
Igor Sysoev <igor@sysoev.ru>
parents: 1894
diff changeset
2159 (SSL_get0_session(c->ssl->connection)));
291689a7e5dc invalidate SSL session if there is no valid client certificate
Igor Sysoev <igor@sysoev.ru>
parents: 1894
diff changeset
2160
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2161 ngx_http_finalize_request(r, NGX_HTTPS_CERT_ERROR);
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2162 return;
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2163 }
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2164
2994
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2165 if (sscf->verify == 1) {
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2166 cert = SSL_get_peer_certificate(c->ssl->connection);
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2167
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2168 if (cert == NULL) {
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2169 ngx_log_error(NGX_LOG_INFO, c->log, 0,
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2170 "client sent no required SSL certificate");
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2171
7193
9d14931cec8c SSL: using default server context in session remove (closes #1464).
Sergey Kandaurov <pluknet@nginx.com>
parents: 7156
diff changeset
2172 ngx_ssl_remove_cached_session(c->ssl->session_ctx,
1924
291689a7e5dc invalidate SSL session if there is no valid client certificate
Igor Sysoev <igor@sysoev.ru>
parents: 1894
diff changeset
2173 (SSL_get0_session(c->ssl->connection)));
291689a7e5dc invalidate SSL session if there is no valid client certificate
Igor Sysoev <igor@sysoev.ru>
parents: 1894
diff changeset
2174
2994
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2175 ngx_http_finalize_request(r, NGX_HTTPS_NO_CERT);
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2176 return;
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2177 }
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2178
f33c48457d0c *) $ssl_client_verify
Igor Sysoev <igor@sysoev.ru>
parents: 2993
diff changeset
2179 X509_free(cert);
669
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2180 }
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2181 }
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2182 }
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2183
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2184 #endif
562806624c4a nginx-0.3.56-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 667
diff changeset
2185
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2186 if (c->read->timer_set) {
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2187 ngx_del_timer(c->read);
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2188 }
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2189
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2190 #if (NGX_STAT_STUB)
2951
5acd98486a33 ignore ngx_atomic_fetch_add() result
Igor Sysoev <igor@sysoev.ru>
parents: 2902
diff changeset
2191 (void) ngx_atomic_fetch_add(ngx_stat_reading, -1);
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2192 r->stat_reading = 0;
2951
5acd98486a33 ignore ngx_atomic_fetch_add() result
Igor Sysoev <igor@sysoev.ru>
parents: 2902
diff changeset
2193 (void) ngx_atomic_fetch_add(ngx_stat_writing, 1);
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2194 r->stat_writing = 1;
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2195 #endif
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2196
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2197 c->read->handler = ngx_http_request_handler;
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2198 c->write->handler = ngx_http_request_handler;
1368
202cae9a0c2b rename ngx_http_block_read() and ngx_http_test_read() to ..._reading()
Igor Sysoev <igor@sysoev.ru>
parents: 1283
diff changeset
2199 r->read_event_handler = ngx_http_block_reading;
1233
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2200
754f3648642d fix ssl_verify_client for HTTP/0.9
Igor Sysoev <igor@sysoev.ru>
parents: 1219
diff changeset
2201 ngx_http_handler(r);
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2202 }
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2203
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
2204
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2205 static ngx_int_t
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2206 ngx_http_validate_host(ngx_str_t *host, ngx_pool_t *pool, ngx_uint_t alloc)
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
2207 {
4313
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2208 u_char *h, ch;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2209 size_t i, dot_pos, host_len;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2210
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2211 enum {
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2212 sw_usual = 0,
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2213 sw_literal,
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2214 sw_rest
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2215 } state;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2216
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2217 dot_pos = host->len;
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2218 host_len = host->len;
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2219
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2220 h = host->data;
4313
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2221
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2222 state = sw_usual;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2223
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2224 for (i = 0; i < host->len; i++) {
3152
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
2225 ch = h[i];
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2226
4313
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2227 switch (ch) {
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2228
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2229 case '.':
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2230 if (dot_pos == i - 1) {
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2231 return NGX_DECLINED;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2232 }
4313
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2233 dot_pos = i;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2234 break;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2235
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2236 case ':':
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2237 if (state == sw_usual) {
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2238 host_len = i;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2239 state = sw_rest;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2240 }
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2241 break;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2242
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2243 case '[':
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2244 if (i == 0) {
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2245 state = sw_literal;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2246 }
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2247 break;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2248
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2249 case ']':
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2250 if (state == sw_literal) {
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2251 host_len = i + 1;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2252 state = sw_rest;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2253 }
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2254 break;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2255
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2256 case '\0':
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2257 return NGX_DECLINED;
4313
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2258
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2259 default:
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2260
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2261 if (ngx_path_separator(ch)) {
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2262 return NGX_DECLINED;
4313
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2263 }
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2264
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2265 if (ch >= 'A' && ch <= 'Z') {
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2266 alloc = 1;
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2267 }
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2268
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2269 break;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2270 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2271 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2272
4313
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2273 if (dot_pos == host_len - 1) {
e7db97bfac25 Added support for IP-literal in the Host header and request line (ticket #1).
Valentin Bartenev <vbart@nginx.com>
parents: 4304
diff changeset
2274 host_len--;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2275 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2276
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2277 if (host_len == 0) {
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2278 return NGX_DECLINED;
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2279 }
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2280
3152
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
2281 if (alloc) {
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2282 host->data = ngx_pnalloc(pool, host_len);
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2283 if (host->data == NULL) {
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2284 return NGX_ERROR;
3152
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
2285 }
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
2286
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2287 ngx_strlow(host->data, h, host_len);
3152
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
2288 }
8bf534c7c998 $host is always in low case:
Igor Sysoev <igor@sysoev.ru>
parents: 3145
diff changeset
2289
5087
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2290 host->len = host_len;
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2291
66e0f9adbc8c Changed interface of ngx_http_validate_host().
Valentin Bartenev <vbart@nginx.com>
parents: 5086
diff changeset
2292 return NGX_OK;
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2293 }
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2294
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2295
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2296 static ngx_int_t
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2297 ngx_http_set_virtual_server(ngx_http_request_t *r, ngx_str_t *host)
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2298 {
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2299 ngx_int_t rc;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2300 ngx_http_connection_t *hc;
593
425af804d968 nginx-0.3.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2301 ngx_http_core_loc_conf_t *clcf;
425af804d968 nginx-0.3.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2302 ngx_http_core_srv_conf_t *cscf;
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2303
5548
4d47722d76b2 Fixed false compiler warning.
Vladimir Homutov <vl@nginx.com>
parents: 5547
diff changeset
2304 #if (NGX_SUPPRESS_WARN)
4d47722d76b2 Fixed false compiler warning.
Vladimir Homutov <vl@nginx.com>
parents: 5547
diff changeset
2305 cscf = NULL;
4d47722d76b2 Fixed false compiler warning.
Vladimir Homutov <vl@nginx.com>
parents: 5547
diff changeset
2306 #endif
4d47722d76b2 Fixed false compiler warning.
Vladimir Homutov <vl@nginx.com>
parents: 5547
diff changeset
2307
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2308 hc = r->http_connection;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2309
5200
9d83ec073c51 Fixed build with --with-mail_ssl_module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5121
diff changeset
2310 #if (NGX_HTTP_SSL && defined SSL_CTRL_SET_TLSEXT_HOSTNAME)
5093
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2311
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2312 if (hc->ssl_servername) {
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2313 if (hc->ssl_servername->len == host->len
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2314 && ngx_strncmp(hc->ssl_servername->data,
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2315 host->data, host->len) == 0)
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2316 {
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2317 #if (NGX_PCRE)
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2318 if (hc->ssl_servername_regex
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2319 && ngx_http_regex_exec(r, hc->ssl_servername_regex,
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2320 hc->ssl_servername) != NGX_OK)
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2321 {
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2322 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2323 return NGX_ERROR;
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2324 }
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2325 #endif
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2326 return NGX_OK;
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2327 }
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2328 }
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2329
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2330 #endif
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2331
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2332 rc = ngx_http_find_virtual_server(r->connection,
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2333 hc->addr_conf->virtual_names,
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2334 host, r, &cscf);
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2335
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2336 if (rc == NGX_ERROR) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2337 ngx_http_close_request(r, NGX_HTTP_INTERNAL_SERVER_ERROR);
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2338 return NGX_ERROR;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
2339 }
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
2340
5200
9d83ec073c51 Fixed build with --with-mail_ssl_module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5121
diff changeset
2341 #if (NGX_HTTP_SSL && defined SSL_CTRL_SET_TLSEXT_HOSTNAME)
5094
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2342
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2343 if (hc->ssl_servername) {
5095
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2344 ngx_http_ssl_srv_conf_t *sscf;
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2345
5094
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2346 if (rc == NGX_DECLINED) {
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2347 cscf = hc->addr_conf->default_server;
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2348 rc = NGX_OK;
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2349 }
5095
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2350
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2351 sscf = ngx_http_get_module_srv_conf(cscf->ctx, ngx_http_ssl_module);
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2352
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2353 if (sscf->verify) {
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2354 ngx_log_error(NGX_LOG_INFO, r->connection->log, 0,
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2355 "client attempted to request the server name "
6584
690b15cc8915 Fixed an error log message.
Valentin Bartenev <vbart@nginx.com>
parents: 6556
diff changeset
2356 "different from the one that was negotiated");
6556
654d2dae97d3 HTTP/2: the "421 Misdirected Request" response (closes #848).
Valentin Bartenev <vbart@nginx.com>
parents: 6538
diff changeset
2357 ngx_http_finalize_request(r, NGX_HTTP_MISDIRECTED_REQUEST);
5095
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2358 return NGX_ERROR;
4fbef397c753 SNI: added restriction on requesting host other than negotiated.
Valentin Bartenev <vbart@nginx.com>
parents: 5094
diff changeset
2359 }
5094
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2360 }
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2361
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2362 #endif
e0a3714a36f8 SNI: reset to default server if requested host was not found.
Valentin Bartenev <vbart@nginx.com>
parents: 5093
diff changeset
2363
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2364 if (rc == NGX_DECLINED) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2365 return NGX_OK;
1387
cb8b30ef3e7e regex in server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1373
diff changeset
2366 }
cb8b30ef3e7e regex in server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1373
diff changeset
2367
593
425af804d968 nginx-0.3.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2368 r->srv_conf = cscf->ctx->srv_conf;
425af804d968 nginx-0.3.18-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 589
diff changeset
2369 r->loc_conf = cscf->ctx->loc_conf;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2370
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2371 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
5086
1b204b8ea9a3 Introduced the ngx_http_set_connection_log() macro.
Valentin Bartenev <vbart@nginx.com>
parents: 5085
diff changeset
2372
6129
187aa751ad62 Core: the ngx_set_connection_log() macro.
Vladimir Homutov <vl@nginx.com>
parents: 6126
diff changeset
2373 ngx_set_connection_log(r->connection, clcf->error_log);
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
2374
2007
b9de93d804ea *) host in request line has priority
Igor Sysoev <igor@sysoev.ru>
parents: 2005
diff changeset
2375 return NGX_OK;
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
2376 }
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
2377
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
2378
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2379 static ngx_int_t
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2380 ngx_http_find_virtual_server(ngx_connection_t *c,
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2381 ngx_http_virtual_names_t *virtual_names, ngx_str_t *host,
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2382 ngx_http_request_t *r, ngx_http_core_srv_conf_t **cscfp)
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2383 {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2384 ngx_http_core_srv_conf_t *cscf;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2385
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2386 if (virtual_names == NULL) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2387 return NGX_DECLINED;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2388 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2389
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2390 cscf = ngx_hash_find_combined(&virtual_names->names,
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2391 ngx_hash_key(host->data, host->len),
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2392 host->data, host->len);
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2393
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2394 if (cscf) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2395 *cscfp = cscf;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2396 return NGX_OK;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2397 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2398
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2399 #if (NGX_PCRE)
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2400
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2401 if (host->len && virtual_names->nregex) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2402 ngx_int_t n;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2403 ngx_uint_t i;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2404 ngx_http_server_name_t *sn;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2405
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2406 sn = virtual_names->regex;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2407
5200
9d83ec073c51 Fixed build with --with-mail_ssl_module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5121
diff changeset
2408 #if (NGX_HTTP_SSL && defined SSL_CTRL_SET_TLSEXT_HOSTNAME)
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2409
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2410 if (r == NULL) {
5093
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2411 ngx_http_connection_t *hc;
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2412
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2413 for (i = 0; i < virtual_names->nregex; i++) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2414
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2415 n = ngx_regex_exec(sn[i].regex->regex, host, NULL, 0);
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2416
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2417 if (n == NGX_REGEX_NO_MATCHED) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2418 continue;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2419 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2420
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2421 if (n >= 0) {
5093
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2422 hc = c->data;
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2423 hc->ssl_servername_regex = sn[i].regex;
68ca3e824115 SNI: avoid surplus lookup of virtual server if SNI was used.
Valentin Bartenev <vbart@nginx.com>
parents: 5092
diff changeset
2424
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2425 *cscfp = sn[i].server;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2426 return NGX_OK;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2427 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2428
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2429 ngx_log_error(NGX_LOG_ALERT, c->log, 0,
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2430 ngx_regex_exec_n " failed: %i "
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2431 "on \"%V\" using \"%V\"",
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2432 n, host, &sn[i].regex->name);
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2433
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2434 return NGX_ERROR;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2435 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2436
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2437 return NGX_DECLINED;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2438 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2439
5200
9d83ec073c51 Fixed build with --with-mail_ssl_module.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5121
diff changeset
2440 #endif /* NGX_HTTP_SSL && defined SSL_CTRL_SET_TLSEXT_HOSTNAME */
5088
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2441
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2442 for (i = 0; i < virtual_names->nregex; i++) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2443
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2444 n = ngx_http_regex_exec(r, sn[i].regex, host);
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2445
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2446 if (n == NGX_DECLINED) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2447 continue;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2448 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2449
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2450 if (n == NGX_OK) {
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2451 *cscfp = sn[i].server;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2452 return NGX_OK;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2453 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2454
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2455 return NGX_ERROR;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2456 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2457 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2458
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2459 #endif /* NGX_PCRE */
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2460
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2461 return NGX_DECLINED;
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2462 }
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2463
ac31fcecb464 SNI: ignore captures in server_name regexes when matching by SNI.
Valentin Bartenev <vbart@nginx.com>
parents: 5087
diff changeset
2464
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2465 static void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2466 ngx_http_request_handler(ngx_event_t *ev)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2467 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2468 ngx_connection_t *c;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2469 ngx_http_request_t *r;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2470
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2471 c = ev->data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2472 r = c->data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2473
5928
8dfee01ff0bd Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5871
diff changeset
2474 ngx_http_set_log_request(c->log, r);
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
2475
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2476 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2477 "http run request: \"%V?%V\"", &r->uri, &r->args);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2478
7156
9c29644f6d03 Fixed worker_shutdown_timeout in various cases.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7034
diff changeset
2479 if (c->close) {
9c29644f6d03 Fixed worker_shutdown_timeout in various cases.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7034
diff changeset
2480 r->main->count++;
9c29644f6d03 Fixed worker_shutdown_timeout in various cases.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7034
diff changeset
2481 ngx_http_terminate_request(r, 0);
9c29644f6d03 Fixed worker_shutdown_timeout in various cases.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7034
diff changeset
2482 ngx_http_run_posted_requests(c);
9c29644f6d03 Fixed worker_shutdown_timeout in various cases.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7034
diff changeset
2483 return;
9c29644f6d03 Fixed worker_shutdown_timeout in various cases.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7034
diff changeset
2484 }
9c29644f6d03 Fixed worker_shutdown_timeout in various cases.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7034
diff changeset
2485
6961
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2486 if (ev->delayed && ev->timedout) {
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2487 ev->delayed = 0;
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2488 ev->timedout = 0;
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2489 }
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2490
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2491 if (ev->write) {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2492 r->write_event_handler(r);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2493
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2494 } else {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2495 r->read_event_handler(r);
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2496 }
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2497
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2498 ngx_http_run_posted_requests(c);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2499 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2500
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2501
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2502 void
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2503 ngx_http_run_posted_requests(ngx_connection_t *c)
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2504 {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2505 ngx_http_request_t *r;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2506 ngx_http_posted_request_t *pr;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2507
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2508 for ( ;; ) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2509
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2510 if (c->destroyed) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2511 return;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2512 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2513
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2514 r = c->data;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2515 pr = r->main->posted_requests;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2516
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2517 if (pr == NULL) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2518 return;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2519 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2520
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2521 r->main->posted_requests = pr->next;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2522
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2523 r = pr->request;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2524
5928
8dfee01ff0bd Upstream: improved subrequest logging.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5871
diff changeset
2525 ngx_http_set_log_request(c->log, r);
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2526
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2527 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2528 "http posted request: \"%V?%V\"", &r->uri, &r->args);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2529
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2530 r->write_event_handler(r);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2531 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2532 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2533
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2534
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2535 ngx_int_t
3064
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2536 ngx_http_post_request(ngx_http_request_t *r, ngx_http_posted_request_t *pr)
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2537 {
3064
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2538 ngx_http_posted_request_t **p;
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2539
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2540 if (pr == NULL) {
3064
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2541 pr = ngx_palloc(r->pool, sizeof(ngx_http_posted_request_t));
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2542 if (pr == NULL) {
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2543 return NGX_ERROR;
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2544 }
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2545 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2546
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2547 pr->request = r;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2548 pr->next = NULL;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2549
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2550 for (p = &r->main->posted_requests; *p; p = &(*p)->next) { /* void */ }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2551
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2552 *p = pr;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2553
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2554 return NGX_OK;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2555 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2556
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2557
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2558 void
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2559 ngx_http_finalize_request(ngx_http_request_t *r, ngx_int_t rc)
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2560 {
1424
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2561 ngx_connection_t *c;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2562 ngx_http_request_t *pr;
210
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 209
diff changeset
2563 ngx_http_core_loc_conf_t *clcf;
00cafae0bdf1 nginx-0.0.1-2003-12-14-23:10:27 import
Igor Sysoev <igor@sysoev.ru>
parents: 209
diff changeset
2564
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2565 c = r->connection;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2566
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2567 ngx_log_debug5(NGX_LOG_DEBUG_HTTP, c->log, 0,
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6412
diff changeset
2568 "http finalize request: %i, \"%V?%V\" a:%d, c:%d",
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2569 rc, &r->uri, &r->args, r == c->data, r->main->count);
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2570
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2571 if (rc == NGX_DONE) {
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2572 ngx_http_finalize_connection(r);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2573 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2574 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2575
2819
43fe53832da7 handle big responses for "size" and "test" image_filters
Igor Sysoev <igor@sysoev.ru>
parents: 2785
diff changeset
2576 if (rc == NGX_OK && r->filter_finalize) {
43fe53832da7 handle big responses for "size" and "test" image_filters
Igor Sysoev <igor@sysoev.ru>
parents: 2785
diff changeset
2577 c->error = 1;
43fe53832da7 handle big responses for "size" and "test" image_filters
Igor Sysoev <igor@sysoev.ru>
parents: 2785
diff changeset
2578 }
43fe53832da7 handle big responses for "size" and "test" image_filters
Igor Sysoev <igor@sysoev.ru>
parents: 2785
diff changeset
2579
681
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2580 if (rc == NGX_DECLINED) {
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2581 r->content_handler = NULL;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2582 r->write_event_handler = ngx_http_core_run_phases;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2583 ngx_http_core_run_phases(r);
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2584 return;
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2585 }
7e24168b0853 nginx-0.4.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 675
diff changeset
2586
777
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 716
diff changeset
2587 if (r != r->main && r->post_subrequest) {
4ab852b691f5 <!--#include virtual=... set=... -->
Igor Sysoev <igor@sysoev.ru>
parents: 716
diff changeset
2588 rc = r->post_subrequest->handler(r, r->post_subrequest->data, rc);
667
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 665
diff changeset
2589 }
63a820b0bc6c nginx-0.3.55-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 665
diff changeset
2590
1783
cfb879757a43 call post_action for 499
Igor Sysoev <igor@sysoev.ru>
parents: 1779
diff changeset
2591 if (rc == NGX_ERROR
cfb879757a43 call post_action for 499
Igor Sysoev <igor@sysoev.ru>
parents: 1779
diff changeset
2592 || rc == NGX_HTTP_REQUEST_TIME_OUT
cfb879757a43 call post_action for 499
Igor Sysoev <igor@sysoev.ru>
parents: 1779
diff changeset
2593 || rc == NGX_HTTP_CLIENT_CLOSED_REQUEST
cfb879757a43 call post_action for 499
Igor Sysoev <igor@sysoev.ru>
parents: 1779
diff changeset
2594 || c->error)
cfb879757a43 call post_action for 499
Igor Sysoev <igor@sysoev.ru>
parents: 1779
diff changeset
2595 {
613
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2596 if (ngx_http_post_action(r) == NGX_OK) {
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2597 return;
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2598 }
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2599
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2600 ngx_http_terminate_request(r, rc);
142
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
2601 return;
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
2602 }
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
2603
637
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
2604 if (rc >= NGX_HTTP_SPECIAL_RESPONSE
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
2605 || rc == NGX_HTTP_CREATED
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
2606 || rc == NGX_HTTP_NO_CONTENT)
e60fe4cf1d4e nginx-0.3.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 635
diff changeset
2607 {
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2608 if (rc == NGX_HTTP_CLOSE) {
7313
e45f09198dab Allow resetting connections closed by "return 444" (ticket #905).
Ruslan Ermilov <ru@nginx.com>
parents: 7295
diff changeset
2609 c->timedout = 1;
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2610 ngx_http_terminate_request(r, rc);
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2611 return;
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2612 }
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
2613
597
9262f520ce21 nginx-0.3.20-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 593
diff changeset
2614 if (r == r->main) {
1424
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2615 if (c->read->timer_set) {
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2616 ngx_del_timer(c->read);
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2617 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2618
1424
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2619 if (c->write->timer_set) {
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2620 ngx_del_timer(c->write);
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2621 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2622 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2623
2250
7fc20e1105cd set request handlers, this fixes complex proxied 400 handler with SSI includes
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2624 c->read->handler = ngx_http_request_handler;
7fc20e1105cd set request handlers, this fixes complex proxied 400 handler with SSI includes
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2625 c->write->handler = ngx_http_request_handler;
7fc20e1105cd set request handlers, this fixes complex proxied 400 handler with SSI includes
Igor Sysoev <igor@sysoev.ru>
parents: 2233
diff changeset
2626
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2627 ngx_http_finalize_request(r, ngx_http_special_response_handler(r, rc));
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2628 return;
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2629 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2630
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2631 if (r != r->main) {
7006
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2632
7631
b4dbf8b98f9a Fixed premature background subrequest finalization.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 7628
diff changeset
2633 if (r->buffered || r->postponed) {
b4dbf8b98f9a Fixed premature background subrequest finalization.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 7628
diff changeset
2634
b4dbf8b98f9a Fixed premature background subrequest finalization.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 7628
diff changeset
2635 if (ngx_http_set_write_handler(r) != NGX_OK) {
b4dbf8b98f9a Fixed premature background subrequest finalization.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 7628
diff changeset
2636 ngx_http_terminate_request(r, 0);
b4dbf8b98f9a Fixed premature background subrequest finalization.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 7628
diff changeset
2637 }
b4dbf8b98f9a Fixed premature background subrequest finalization.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 7628
diff changeset
2638
b4dbf8b98f9a Fixed premature background subrequest finalization.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 7628
diff changeset
2639 return;
b4dbf8b98f9a Fixed premature background subrequest finalization.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 7628
diff changeset
2640 }
b4dbf8b98f9a Fixed premature background subrequest finalization.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 7628
diff changeset
2641
7632
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2642 pr = r->parent;
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2643
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2644 if (r == c->data || r->background) {
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2645
7006
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2646 if (!r->logged) {
7632
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2647
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2648 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2649
7006
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2650 if (clcf->log_subrequest) {
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2651 ngx_http_log_request(r);
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2652 }
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2653
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2654 r->logged = 1;
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2655
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2656 } else {
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2657 ngx_log_error(NGX_LOG_ALERT, c->log, 0,
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2658 "subrequest: \"%V?%V\" logged again",
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2659 &r->uri, &r->args);
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2660 }
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2661
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2662 r->done = 1;
7632
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2663
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2664 if (r->background) {
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2665 ngx_http_finalize_connection(r);
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2666 return;
1d207b77b44a Simplified subrequest finalization.
Roman Arutyunyan <arut@nginx.com>
parents: 7631
diff changeset
2667 }
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2668
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2669 r->main->count--;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2670
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2671 if (pr->postponed && pr->postponed->request == r) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2672 pr->postponed = pr->postponed->next;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2673 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2674
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2675 c->data = pr;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2676
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2677 } else {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2678
4612
c42553296af1 Removed surplus condition.
Valentin Bartenev <vbart@nginx.com>
parents: 4594
diff changeset
2679 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
c42553296af1 Removed surplus condition.
Valentin Bartenev <vbart@nginx.com>
parents: 4594
diff changeset
2680 "http finalize non-active request: \"%V?%V\"",
c42553296af1 Removed surplus condition.
Valentin Bartenev <vbart@nginx.com>
parents: 4594
diff changeset
2681 &r->uri, &r->args);
c42553296af1 Removed surplus condition.
Valentin Bartenev <vbart@nginx.com>
parents: 4594
diff changeset
2682
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2683 r->write_event_handler = ngx_http_request_finalizer;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2684
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2685 if (r->waited) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2686 r->done = 1;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2687 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2688 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2689
3064
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2690 if (ngx_http_post_request(pr, NULL) != NGX_OK) {
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2691 r->main->count++;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2692 ngx_http_terminate_request(r, 0);
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2693 return;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2694 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2695
1424
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2696 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2697 "http wake parent request: \"%V?%V\"",
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2698 &pr->uri, &pr->args);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2699
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2700 return;
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2701 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2702
7011
5e05118678af Fixed background requests with asynchronous operations.
Roman Arutyunyan <arut@nginx.com>
parents: 7008
diff changeset
2703 if (r->buffered || c->buffered || r->postponed) {
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2704
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2705 if (ngx_http_set_write_handler(r) != NGX_OK) {
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2706 ngx_http_terminate_request(r, 0);
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
2707 }
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
2708
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2709 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2710 }
160
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 159
diff changeset
2711
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2712 if (r != c->data) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2713 ngx_log_error(NGX_LOG_ALERT, c->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2714 "http finalize non-active request: \"%V?%V\"",
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2715 &r->uri, &r->args);
142
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
2716 return;
527
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2717 }
7fa11e5c6e96 nginx-0.1.38-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 525
diff changeset
2718
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2719 r->done = 1;
7006
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2720
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2721 r->read_event_handler = ngx_http_block_reading;
3415
1b8c3599e3ce Fix segfault when while discarding body a write event handler is called,
Igor Sysoev <igor@sysoev.ru>
parents: 3325
diff changeset
2722 r->write_event_handler = ngx_http_request_empty_handler;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2723
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
2724 if (!r->post_action) {
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
2725 r->request_complete = 1;
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
2726 }
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
2727
613
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
2728 if (ngx_http_post_action(r) == NGX_OK) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2729 return;
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2730 }
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
2731
1424
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2732 if (c->read->timer_set) {
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2733 ngx_del_timer(c->read);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2734 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2735
1424
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2736 if (c->write->timer_set) {
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2737 c->write->delayed = 0;
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2738 ngx_del_timer(c->write);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2739 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2740
1424
937fbbf611cd optimize r->connection in ngx_http_finalize_request()
Igor Sysoev <igor@sysoev.ru>
parents: 1423
diff changeset
2741 if (c->read->eof) {
1423
75e908236701 cancel keep-alive and lingering close on EOF
Igor Sysoev <igor@sysoev.ru>
parents: 1387
diff changeset
2742 ngx_http_close_request(r, 0);
75e908236701 cancel keep-alive and lingering close on EOF
Igor Sysoev <igor@sysoev.ru>
parents: 1387
diff changeset
2743 return;
75e908236701 cancel keep-alive and lingering close on EOF
Igor Sysoev <igor@sysoev.ru>
parents: 1387
diff changeset
2744 }
75e908236701 cancel keep-alive and lingering close on EOF
Igor Sysoev <igor@sysoev.ru>
parents: 1387
diff changeset
2745
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2746 ngx_http_finalize_connection(r);
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2747 }
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2748
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2749
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2750 static void
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2751 ngx_http_terminate_request(ngx_http_request_t *r, ngx_int_t rc)
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2752 {
3064
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2753 ngx_http_cleanup_t *cln;
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2754 ngx_http_request_t *mr;
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2755 ngx_http_ephemeral_t *e;
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2756
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2757 mr = r->main;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2758
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2759 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2760 "http terminate request count:%d", mr->count);
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2761
3176
60bc5cc68d3b log 499 instead 0, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3153
diff changeset
2762 if (rc > 0 && (mr->headers_out.status == 0 || mr->connection->sent == 0)) {
60bc5cc68d3b log 499 instead 0, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3153
diff changeset
2763 mr->headers_out.status = rc;
60bc5cc68d3b log 499 instead 0, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3153
diff changeset
2764 }
60bc5cc68d3b log 499 instead 0, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3153
diff changeset
2765
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2766 cln = mr->cleanup;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2767 mr->cleanup = NULL;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2768
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2769 while (cln) {
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2770 if (cln->handler) {
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2771 cln->handler(cln->data);
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2772 }
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2773
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2774 cln = cln->next;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2775 }
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2776
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2777 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2778 "http terminate cleanup count:%d blk:%d",
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2779 mr->count, mr->blocked);
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2780
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2781 if (mr->write_event_handler) {
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2782
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2783 if (mr->blocked) {
7011
5e05118678af Fixed background requests with asynchronous operations.
Roman Arutyunyan <arut@nginx.com>
parents: 7008
diff changeset
2784 r->connection->error = 1;
5e05118678af Fixed background requests with asynchronous operations.
Roman Arutyunyan <arut@nginx.com>
parents: 7008
diff changeset
2785 r->write_event_handler = ngx_http_request_finalizer;
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2786 return;
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2787 }
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2788
3064
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2789 e = ngx_http_ephemeral(mr);
3051
26dfc0fa22c8 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
2790 mr->posted_requests = NULL;
26dfc0fa22c8 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 3050
diff changeset
2791 mr->write_event_handler = ngx_http_terminate_handler;
3064
23e6f26fb4bd *) ngx_http_ephemeral
Igor Sysoev <igor@sysoev.ru>
parents: 3054
diff changeset
2792 (void) ngx_http_post_request(mr, &e->terminal_posted_request);
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2793 return;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2794 }
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2795
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2796 ngx_http_close_request(mr, rc);
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2797 }
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2798
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2799
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2800 static void
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2801 ngx_http_terminate_handler(ngx_http_request_t *r)
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2802 {
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2803 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
2804 "http terminate handler count:%d", r->count);
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2805
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2806 r->count = 1;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2807
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2808 ngx_http_close_request(r, 0);
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2809 }
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2810
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2811
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2812 static void
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2813 ngx_http_finalize_connection(ngx_http_request_t *r)
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2814 {
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2815 ngx_http_core_loc_conf_t *clcf;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2816
6246
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
2817 #if (NGX_HTTP_V2)
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
2818 if (r->stream) {
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
2819 ngx_http_close_request(r, 0);
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
2820 return;
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
2821 }
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
2822 #endif
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
2823
3211
3ea03c1fe050 add lingering timeout if a response is short and a request body is being
Igor Sysoev <igor@sysoev.ru>
parents: 3180
diff changeset
2824 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
3ea03c1fe050 add lingering timeout if a response is short and a request body is being
Igor Sysoev <igor@sysoev.ru>
parents: 3180
diff changeset
2825
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2826 if (r->main->count != 1) {
3211
3ea03c1fe050 add lingering timeout if a response is short and a request body is being
Igor Sysoev <igor@sysoev.ru>
parents: 3180
diff changeset
2827
3214
798a7f1d3b2f restore discard body handler after ngx_http_set_writer() set it to
Igor Sysoev <igor@sysoev.ru>
parents: 3211
diff changeset
2828 if (r->discard_body) {
798a7f1d3b2f restore discard body handler after ngx_http_set_writer() set it to
Igor Sysoev <igor@sysoev.ru>
parents: 3211
diff changeset
2829 r->read_event_handler = ngx_http_discarded_request_body_handler;
3985
07d1aa82899b always set timer in discard body handler, this fixes the cases
Igor Sysoev <igor@sysoev.ru>
parents: 3984
diff changeset
2830 ngx_add_timer(r->connection->read, clcf->lingering_timeout);
3214
798a7f1d3b2f restore discard body handler after ngx_http_set_writer() set it to
Igor Sysoev <igor@sysoev.ru>
parents: 3211
diff changeset
2831
798a7f1d3b2f restore discard body handler after ngx_http_set_writer() set it to
Igor Sysoev <igor@sysoev.ru>
parents: 3211
diff changeset
2832 if (r->lingering_time == 0) {
798a7f1d3b2f restore discard body handler after ngx_http_set_writer() set it to
Igor Sysoev <igor@sysoev.ru>
parents: 3211
diff changeset
2833 r->lingering_time = ngx_time()
3211
3ea03c1fe050 add lingering timeout if a response is short and a request body is being
Igor Sysoev <igor@sysoev.ru>
parents: 3180
diff changeset
2834 + (time_t) (clcf->lingering_time / 1000);
3214
798a7f1d3b2f restore discard body handler after ngx_http_set_writer() set it to
Igor Sysoev <igor@sysoev.ru>
parents: 3211
diff changeset
2835 }
3211
3ea03c1fe050 add lingering timeout if a response is short and a request body is being
Igor Sysoev <igor@sysoev.ru>
parents: 3180
diff changeset
2836 }
3ea03c1fe050 add lingering timeout if a response is short and a request body is being
Igor Sysoev <igor@sysoev.ru>
parents: 3180
diff changeset
2837
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2838 ngx_http_close_request(r, 0);
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2839 return;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2840 }
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
2841
7006
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2842 r = r->main;
9552758a786e Background subrequests for cache updates.
Roman Arutyunyan <arut@nginx.com>
parents: 6993
diff changeset
2843
6050
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5993
diff changeset
2844 if (r->reading_body) {
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5993
diff changeset
2845 r->keepalive = 0;
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5993
diff changeset
2846 r->lingering_close = 1;
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5993
diff changeset
2847 }
a08fad30aeac Request body: unbuffered reading.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5993
diff changeset
2848
230
1119faf4635a nginx-0.0.1-2004-01-16-09:15:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 220
diff changeset
2849 if (!ngx_terminate
326
8733703a37f3 nginx-0.0.3-2004-04-26-00:13:21 import
Igor Sysoev <igor@sysoev.ru>
parents: 323
diff changeset
2850 && !ngx_exiting
2019
e720be7bc195 style fix
Igor Sysoev <igor@sysoev.ru>
parents: 2014
diff changeset
2851 && r->keepalive
230
1119faf4635a nginx-0.0.1-2004-01-16-09:15:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 220
diff changeset
2852 && clcf->keepalive_timeout > 0)
1119faf4635a nginx-0.0.1-2004-01-16-09:15:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 220
diff changeset
2853 {
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2854 ngx_http_set_keepalive(r);
230
1119faf4635a nginx-0.0.1-2004-01-16-09:15:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 220
diff changeset
2855 return;
3984
3e51832c8215 lingering_close "off|on|always"
Igor Sysoev <igor@sysoev.ru>
parents: 3983
diff changeset
2856 }
3e51832c8215 lingering_close "off|on|always"
Igor Sysoev <igor@sysoev.ru>
parents: 3983
diff changeset
2857
3e51832c8215 lingering_close "off|on|always"
Igor Sysoev <igor@sysoev.ru>
parents: 3983
diff changeset
2858 if (clcf->lingering_close == NGX_HTTP_LINGERING_ALWAYS
3e51832c8215 lingering_close "off|on|always"
Igor Sysoev <igor@sysoev.ru>
parents: 3983
diff changeset
2859 || (clcf->lingering_close == NGX_HTTP_LINGERING_ON
3e51832c8215 lingering_close "off|on|always"
Igor Sysoev <igor@sysoev.ru>
parents: 3983
diff changeset
2860 && (r->lingering_close
3e51832c8215 lingering_close "off|on|always"
Igor Sysoev <igor@sysoev.ru>
parents: 3983
diff changeset
2861 || r->header_in->pos < r->header_in->last
3e51832c8215 lingering_close "off|on|always"
Igor Sysoev <igor@sysoev.ru>
parents: 3983
diff changeset
2862 || r->connection->read->ready)))
3981
77604e9a1ed8 enable lingering close for pipelined requests
Igor Sysoev <igor@sysoev.ru>
parents: 3978
diff changeset
2863 {
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2864 ngx_http_set_lingering_close(r);
230
1119faf4635a nginx-0.0.1-2004-01-16-09:15:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 220
diff changeset
2865 return;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2866 }
142
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
2867
230
1119faf4635a nginx-0.0.1-2004-01-16-09:15:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 220
diff changeset
2868 ngx_http_close_request(r, 0);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2869 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2870
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2871
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
2872 static ngx_int_t
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
2873 ngx_http_set_write_handler(ngx_http_request_t *r)
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2874 {
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2875 ngx_event_t *wev;
91
637625a2acdb nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 89
diff changeset
2876 ngx_http_core_loc_conf_t *clcf;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2877
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2878 r->http_state = NGX_HTTP_WRITING_REQUEST_STATE;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2879
3215
4edf28522d24 allow discarding body while a long response transfer
Igor Sysoev <igor@sysoev.ru>
parents: 3214
diff changeset
2880 r->read_event_handler = r->discard_body ?
4edf28522d24 allow discarding body while a long response transfer
Igor Sysoev <igor@sysoev.ru>
parents: 3214
diff changeset
2881 ngx_http_discarded_request_body_handler:
4edf28522d24 allow discarding body while a long response transfer
Igor Sysoev <igor@sysoev.ru>
parents: 3214
diff changeset
2882 ngx_http_test_reading;
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
2883 r->write_event_handler = ngx_http_writer;
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
2884
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2885 wev = r->connection->write;
369
9c2515d70489 nginx-0.0.7-2004-06-25-18:42:03 import
Igor Sysoev <igor@sysoev.ru>
parents: 368
diff changeset
2886
362
7650aea1816f nginx-0.0.7-2004-06-21-19:59:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 361
diff changeset
2887 if (wev->ready && wev->delayed) {
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
2888 return NGX_OK;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2889 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2890
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2891 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
362
7650aea1816f nginx-0.0.7-2004-06-21-19:59:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 361
diff changeset
2892 if (!wev->delayed) {
361
446782c909b3 nginx-0.0.7-2004-06-20-23:54:15 import
Igor Sysoev <igor@sysoev.ru>
parents: 358
diff changeset
2893 ngx_add_timer(wev, clcf->send_timeout);
446782c909b3 nginx-0.0.7-2004-06-20-23:54:15 import
Igor Sysoev <igor@sysoev.ru>
parents: 358
diff changeset
2894 }
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2895
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
2896 if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) {
143
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
2897 ngx_http_close_request(r, 0);
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
2898 return NGX_ERROR;
143
5526213be452 nginx-0.0.1-2003-10-10-19:10:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 142
diff changeset
2899 }
525
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
2900
09b42134ac0c nginx-0.1.37-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 523
diff changeset
2901 return NGX_OK;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2902 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2903
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2904
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2905 static void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2906 ngx_http_writer(ngx_http_request_t *r)
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2907 {
6964
5d3d9b52327d Fixed type.
hucongcong <hucong.c@foxmail.com>
parents: 6961
diff changeset
2908 ngx_int_t rc;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2909 ngx_event_t *wev;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2910 ngx_connection_t *c;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
2911 ngx_http_core_loc_conf_t *clcf;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2912
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2913 c = r->connection;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2914 wev = c->write;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
2915
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2916 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, wev->log, 0,
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2917 "http writer handler: \"%V?%V\"", &r->uri, &r->args);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2918
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2919 clcf = ngx_http_get_module_loc_conf(r->main, ngx_http_core_module);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2920
361
446782c909b3 nginx-0.0.7-2004-06-20-23:54:15 import
Igor Sysoev <igor@sysoev.ru>
parents: 358
diff changeset
2921 if (wev->timedout) {
6961
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2922 ngx_log_error(NGX_LOG_INFO, c->log, NGX_ETIMEDOUT,
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2923 "client timed out");
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2924 c->timedout = 1;
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2925
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2926 ngx_http_finalize_request(r, NGX_HTTP_REQUEST_TIME_OUT);
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2927 return;
4195
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2928 }
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2929
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2930 if (wev->delayed || r->aio) {
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2931 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0,
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2932 "http writer delayed");
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2933
6961
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2934 if (!wev->delayed) {
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2935 ngx_add_timer(wev, clcf->send_timeout);
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2936 }
903fb1ddc07f Moved handling of wev->delayed to the connection event handler.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6942
diff changeset
2937
4195
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2938 if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) {
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2939 ngx_http_close_request(r, 0);
361
446782c909b3 nginx-0.0.7-2004-06-20-23:54:15 import
Igor Sysoev <igor@sysoev.ru>
parents: 358
diff changeset
2940 }
4195
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2941
35f4997c08ce Fix for socket leak with "aio sendfile" and "limit_rate".
Maxim Dounin <mdounin@mdounin.ru>
parents: 4194
diff changeset
2942 return;
160
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 159
diff changeset
2943 }
e7e094d34162 nginx-0.0.1-2003-10-27-11:53:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 159
diff changeset
2944
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2945 rc = ngx_http_output_filter(r, NULL);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2946
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2947 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, c->log, 0,
6964
5d3d9b52327d Fixed type.
hucongcong <hucong.c@foxmail.com>
parents: 6961
diff changeset
2948 "http writer output filter: %i, \"%V?%V\"",
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2949 rc, &r->uri, &r->args);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2950
2883
d0cba58e5bfa fix socket leak introduced in r2378
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
2951 if (rc == NGX_ERROR) {
d0cba58e5bfa fix socket leak introduced in r2378
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
2952 ngx_http_finalize_request(r, rc);
d0cba58e5bfa fix socket leak introduced in r2378
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
2953 return;
d0cba58e5bfa fix socket leak introduced in r2378
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
2954 }
d0cba58e5bfa fix socket leak introduced in r2378
Igor Sysoev <igor@sysoev.ru>
parents: 2857
diff changeset
2955
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2956 if (r->buffered || r->postponed || (r == r->main && c->buffered)) {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2957
4194
7ce8f2cde0af Fix for connection drops with AIO.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4033
diff changeset
2958 if (!wev->delayed) {
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
2959 ngx_add_timer(wev, clcf->send_timeout);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2960 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2961
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
2962 if (ngx_handle_write_event(wev, clcf->send_lowat) != NGX_OK) {
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
2963 ngx_http_close_request(r, 0);
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
2964 }
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2965
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2966 return;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2967 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2968
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2969 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, wev->log, 0,
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
2970 "http writer done: \"%V?%V\"", &r->uri, &r->args);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2971
3216
79ae445ec57b fix two previous commits: an early parallel body discarding completion
Igor Sysoev <igor@sysoev.ru>
parents: 3215
diff changeset
2972 r->write_event_handler = ngx_http_request_empty_handler;
79ae445ec57b fix two previous commits: an early parallel body discarding completion
Igor Sysoev <igor@sysoev.ru>
parents: 3215
diff changeset
2973
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
2974 ngx_http_finalize_request(r, rc);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2975 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2976
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
2977
2377
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2978 static void
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2979 ngx_http_request_finalizer(ngx_http_request_t *r)
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2980 {
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2981 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2982 "http finalizer done: \"%V?%V\"", &r->uri, &r->args);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2983
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2984 ngx_http_finalize_request(r, 0);
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2985 }
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2986
87b8c44906b5 *) refactor subrequest handling, now they run as separate posted requests
Igor Sysoev <igor@sysoev.ru>
parents: 2370
diff changeset
2987
1368
202cae9a0c2b rename ngx_http_block_read() and ngx_http_test_read() to ..._reading()
Igor Sysoev <igor@sysoev.ru>
parents: 1283
diff changeset
2988 void
202cae9a0c2b rename ngx_http_block_read() and ngx_http_test_read() to ..._reading()
Igor Sysoev <igor@sysoev.ru>
parents: 1283
diff changeset
2989 ngx_http_block_reading(ngx_http_request_t *r)
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 12
diff changeset
2990 {
1283
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
2991 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
1368
202cae9a0c2b rename ngx_http_block_read() and ngx_http_test_read() to ..._reading()
Igor Sysoev <igor@sysoev.ru>
parents: 1283
diff changeset
2992 "http reading blocked");
1283
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
2993
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
2994 /* aio does not call this handler */
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
2995
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
2996 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT)
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
2997 && r->connection->read->active)
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
2998 {
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
2999 if (ngx_del_event(r->connection->read, NGX_READ_EVENT, 0) != NGX_OK) {
1283
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
3000 ngx_http_close_request(r, 0);
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
3001 }
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
3002 }
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
3003 }
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
3004
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
3005
2294
ce574b0ffeec ngx_http_limit_req_module
Igor Sysoev <igor@sysoev.ru>
parents: 2265
diff changeset
3006 void
1368
202cae9a0c2b rename ngx_http_block_read() and ngx_http_test_read() to ..._reading()
Igor Sysoev <igor@sysoev.ru>
parents: 1283
diff changeset
3007 ngx_http_test_reading(ngx_http_request_t *r)
1283
a3f8d6d17b94 proxy_ignore_client_abort, fastcgi_ignore_client_abort, and so on were
Igor Sysoev <igor@sysoev.ru>
parents: 1253
diff changeset
3008 {
1061
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3009 int n;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3010 char buf[1];
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3011 ngx_err_t err;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3012 ngx_event_t *rev;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3013 ngx_connection_t *c;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3014
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3015 c = r->connection;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3016 rev = c->read;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3017
1368
202cae9a0c2b rename ngx_http_block_read() and ngx_http_test_read() to ..._reading()
Igor Sysoev <igor@sysoev.ru>
parents: 1283
diff changeset
3018 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http test reading");
1061
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3019
6246
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
3020 #if (NGX_HTTP_V2)
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
3021
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
3022 if (r->stream) {
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3023 if (c->error) {
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3024 err = 0;
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3025 goto closed;
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3026 }
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3027
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3028 return;
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3029 }
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3030
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3031 #endif
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3032
1061
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3033 #if (NGX_HAVE_KQUEUE)
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3034
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3035 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) {
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3036
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3037 if (!rev->pending_eof) {
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3038 return;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3039 }
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3040
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3041 rev->eof = 1;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3042 c->error = 1;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3043 err = rev->kq_errno;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3044
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3045 goto closed;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3046 }
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3047
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3048 #endif
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3049
5374
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3050 #if (NGX_HAVE_EPOLLRDHUP)
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3051
6536
f7849bfb6d21 Improved EPOLLRDHUP handling.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
3052 if ((ngx_event_flags & NGX_USE_EPOLL_EVENT) && ngx_use_epoll_rdhup) {
5374
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3053 socklen_t len;
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3054
6536
f7849bfb6d21 Improved EPOLLRDHUP handling.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
3055 if (!rev->pending_eof) {
f7849bfb6d21 Improved EPOLLRDHUP handling.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
3056 return;
f7849bfb6d21 Improved EPOLLRDHUP handling.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
3057 }
f7849bfb6d21 Improved EPOLLRDHUP handling.
Valentin Bartenev <vbart@nginx.com>
parents: 6480
diff changeset
3058
5374
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3059 rev->eof = 1;
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3060 c->error = 1;
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3061
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3062 err = 0;
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3063 len = sizeof(ngx_err_t);
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3064
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3065 /*
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3066 * BSDs and Linux return 0 and set a pending error in err
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3067 * Solaris returns -1 and sets errno
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3068 */
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3069
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3070 if (getsockopt(c->fd, SOL_SOCKET, SO_ERROR, (void *) &err, &len)
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3071 == -1)
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3072 {
5557
188481078faf Use ngx_socket_errno where appropriate.
Piotr Sikora <piotr@cloudflare.com>
parents: 5548
diff changeset
3073 err = ngx_socket_errno;
5374
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3074 }
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3075
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3076 goto closed;
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3077 }
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3078
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3079 #endif
ef3d094bb6d3 Use EPOLLRDHUP in ngx_http_test_reading() (ticket #320).
Valentin Bartenev <vbart@nginx.com>
parents: 5363
diff changeset
3080
1061
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3081 n = recv(c->fd, buf, 1, MSG_PEEK);
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3082
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3083 if (n == 0) {
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3084 rev->eof = 1;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3085 c->error = 1;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3086 err = 0;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3087
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3088 goto closed;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3089
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3090 } else if (n == -1) {
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3091 err = ngx_socket_errno;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3092
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3093 if (err != NGX_EAGAIN) {
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3094 rev->eof = 1;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3095 c->error = 1;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3096
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3097 goto closed;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3098 }
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3099 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3100
59
e8cdc2989cee nginx-0.0.1-2003-02-06-20:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 57
diff changeset
3101 /* aio does not call this handler */
e8cdc2989cee nginx-0.0.1-2003-02-06-20:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 57
diff changeset
3102
1061
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3103 if ((ngx_event_flags & NGX_USE_LEVEL_EVENT) && rev->active) {
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3104
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
3105 if (ngx_del_event(rev, NGX_READ_EVENT, 0) != NGX_OK) {
89
29bf798b583f nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
3106 ngx_http_close_request(r, 0);
29bf798b583f nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents: 87
diff changeset
3107 }
59
e8cdc2989cee nginx-0.0.1-2003-02-06-20:21:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 57
diff changeset
3108 }
1061
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3109
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3110 return;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3111
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3112 closed:
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3113
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3114 if (err) {
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3115 rev->error = 1;
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3116 }
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3117
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3118 ngx_log_error(NGX_LOG_INFO, c->log, err,
4593
834049edae24 Fixed grammar in error messages.
Ruslan Ermilov <ru@nginx.com>
parents: 4552
diff changeset
3119 "client prematurely closed connection");
1061
9aca452fe12a if client closes a connection prematurely, then epoll (at least
Igor Sysoev <igor@sysoev.ru>
parents: 1059
diff changeset
3120
5289
aadfadd5af2b Fixed ngx_http_test_reading() to finalize request properly.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5210
diff changeset
3121 ngx_http_finalize_request(r, NGX_HTTP_CLIENT_CLOSED_REQUEST);
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3122 }
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3123
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3124
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3125 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3126 ngx_http_set_keepalive(ngx_http_request_t *r)
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3127 {
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3128 int tcp_nodelay;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3129 ngx_buf_t *b, *f;
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3130 ngx_chain_t *cl, *ln;
95
b48066122884 nginx-0.0.1-2003-05-23-15:53:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 94
diff changeset
3131 ngx_event_t *rev, *wev;
b48066122884 nginx-0.0.1-2003-05-23-15:53:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 94
diff changeset
3132 ngx_connection_t *c;
432
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 430
diff changeset
3133 ngx_http_connection_t *hc;
95
b48066122884 nginx-0.0.1-2003-05-23-15:53:01 import
Igor Sysoev <igor@sysoev.ru>
parents: 94
diff changeset
3134 ngx_http_core_loc_conf_t *clcf;
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3135
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
3136 c = r->connection;
65
4222c496acb3 nginx-0.0.1-2003-03-05-09:37:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
3137 rev = c->read;
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3138
1373
fdea12ffb24a discard request body before going to keep-alive state and use lingering timeouts
Igor Sysoev <igor@sysoev.ru>
parents: 1368
diff changeset
3139 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
fdea12ffb24a discard request body before going to keep-alive state and use lingering timeouts
Igor Sysoev <igor@sysoev.ru>
parents: 1368
diff changeset
3140
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 233
diff changeset
3141 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "set http keepalive handler");
94
8220378432a8 nginx-0.0.1-2003-05-22-19:23:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
3142
1373
fdea12ffb24a discard request body before going to keep-alive state and use lingering timeouts
Igor Sysoev <igor@sysoev.ru>
parents: 1368
diff changeset
3143 if (r->discard_body) {
2489
d1a7203a8a44 avoid a double redirect response if
Igor Sysoev <igor@sysoev.ru>
parents: 2388
diff changeset
3144 r->write_event_handler = ngx_http_request_empty_handler;
1373
fdea12ffb24a discard request body before going to keep-alive state and use lingering timeouts
Igor Sysoev <igor@sysoev.ru>
parents: 1368
diff changeset
3145 r->lingering_time = ngx_time() + (time_t) (clcf->lingering_time / 1000);
fdea12ffb24a discard request body before going to keep-alive state and use lingering timeouts
Igor Sysoev <igor@sysoev.ru>
parents: 1368
diff changeset
3146 ngx_add_timer(rev, clcf->lingering_timeout);
fdea12ffb24a discard request body before going to keep-alive state and use lingering timeouts
Igor Sysoev <igor@sysoev.ru>
parents: 1368
diff changeset
3147 return;
fdea12ffb24a discard request body before going to keep-alive state and use lingering timeouts
Igor Sysoev <igor@sysoev.ru>
parents: 1368
diff changeset
3148 }
fdea12ffb24a discard request body before going to keep-alive state and use lingering timeouts
Igor Sysoev <igor@sysoev.ru>
parents: 1368
diff changeset
3149
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3150 c->log->action = "closing request";
432
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 430
diff changeset
3151
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 430
diff changeset
3152 hc = r->http_connection;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3153 b = r->header_in;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3154
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3155 if (b->pos < b->last) {
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3156
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3157 /* the pipelined request */
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3158
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3159 if (b != c->buffer) {
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3160
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3161 /*
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3162 * If the large header buffers were allocated while the previous
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3163 * request processing then we do not use c->buffer for
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3164 * the pipelined request (see ngx_http_create_request()).
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3165 *
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3166 * Now we would move the large header buffers to the free list.
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3167 */
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3168
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3169 for (cl = hc->busy; cl; /* void */) {
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3170 ln = cl;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3171 cl = cl->next;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3172
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3173 if (ln->buf == b) {
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3174 ngx_free_chain(c->pool, ln);
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3175 continue;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3176 }
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3177
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3178 f = ln->buf;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3179 f->pos = f->start;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3180 f->last = f->start;
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3181
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3182 ln->next = hc->free;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3183 hc->free = ln;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3184 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3185
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3186 cl = ngx_alloc_chain_link(c->pool);
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3187 if (cl == NULL) {
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3188 ngx_http_close_request(r, 0);
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3189 return;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3190 }
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3191
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3192 cl->buf = b;
6942
1c43ac026c1d Fixed CPU hog while freeing hc->busy after e662cbf1b932 (1.11.11).
Maxim Dounin <mdounin@mdounin.ru>
parents: 6926
diff changeset
3193 cl->next = NULL;
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3194
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3195 hc->busy = cl;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3196 hc->nbusy = 1;
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3197 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3198 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3199
5096
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3200 /* guard against recursive call from ngx_http_finalize_connection() */
3180
0e420f3f8e18 clear r->keepalive to disable preventively calling
Igor Sysoev <igor@sysoev.ru>
parents: 3176
diff changeset
3201 r->keepalive = 0;
0e420f3f8e18 clear r->keepalive to disable preventively calling
Igor Sysoev <igor@sysoev.ru>
parents: 3176
diff changeset
3202
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3203 ngx_http_free_request(r, 0);
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
3204
432
11362a3e3911 nginx-0.0.11-2004-09-21-09:38:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 430
diff changeset
3205 c->data = hc;
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3206
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
3207 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3208 ngx_http_close_connection(c);
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3209 return;
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3210 }
65
4222c496acb3 nginx-0.0.1-2003-03-05-09:37:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
3211
259
d30f2c39caae nginx-0.0.2-2004-02-12-23:57:10 import
Igor Sysoev <igor@sysoev.ru>
parents: 258
diff changeset
3212 wev = c->write;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3213 wev->handler = ngx_http_empty_handler;
65
4222c496acb3 nginx-0.0.1-2003-03-05-09:37:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
3214
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 335
diff changeset
3215 if (b->pos < b->last) {
65
4222c496acb3 nginx-0.0.1-2003-03-05-09:37:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
3216
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 233
diff changeset
3217 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "pipelined request");
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
3218
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3219 c->log->action = "reading client pipelined request line";
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
3220
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3221 r = ngx_http_create_request(c);
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3222 if (r == NULL) {
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3223 ngx_http_close_connection(c);
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3224 return;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3225 }
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3226
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3227 r->pipeline = 1;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3228
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3229 c->data = r;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3230
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3231 c->sent = 0;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3232 c->destroyed = 0;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3233
5102
f597c9be5c92 Use "client_header_timeout" for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5101
diff changeset
3234 if (rev->timer_set) {
f597c9be5c92 Use "client_header_timeout" for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5101
diff changeset
3235 ngx_del_timer(rev);
f597c9be5c92 Use "client_header_timeout" for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5101
diff changeset
3236 }
f597c9be5c92 Use "client_header_timeout" for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5101
diff changeset
3237
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3238 rev->handler = ngx_http_process_request_line;
2014
4151c33e4dfa avoid recursive loop
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
3239 ngx_post_event(rev, &ngx_posted_events);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3240 return;
65
4222c496acb3 nginx-0.0.1-2003-03-05-09:37:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
3241 }
4222c496acb3 nginx-0.0.1-2003-03-05-09:37:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
3242
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3243 /*
5096
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3244 * To keep a memory footprint as small as possible for an idle keepalive
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3245 * connection we try to free c->buffer's memory if it was allocated outside
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3246 * the c->pool. The large header buffers are always allocated outside the
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3247 * c->pool and are freed too.
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3248 */
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3249
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3250 b = c->buffer;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3251
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3252 if (ngx_pfree(c->pool, b->start) == NGX_OK) {
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3253
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3254 /*
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3255 * the special note for ngx_http_keepalive_handler() that
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3256 * c->buffer's memory was freed
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3257 */
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3258
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3259 b->pos = NULL;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3260
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3261 } else {
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3262 b->pos = b->start;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3263 b->last = b->start;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3264 }
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3265
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3266 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, "hc free: %p",
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3267 hc->free);
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3268
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3269 if (hc->free) {
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3270 for (cl = hc->free; cl; /* void */) {
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3271 ln = cl;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3272 cl = cl->next;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3273 ngx_pfree(c->pool, ln->buf->start);
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3274 ngx_free_chain(c->pool, ln);
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3275 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3276
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3277 hc->free = NULL;
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3278 }
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3279
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6412
diff changeset
3280 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0, "hc busy: %p %i",
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3281 hc->busy, hc->nbusy);
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3282
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3283 if (hc->busy) {
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3284 for (cl = hc->busy; cl; /* void */) {
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3285 ln = cl;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3286 cl = cl->next;
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3287 ngx_pfree(c->pool, ln->buf->start);
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3288 ngx_free_chain(c->pool, ln);
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3289 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3290
6926
e662cbf1b932 Converted hc->busy/hc->free to use chain links.
Maxim Dounin <mdounin@mdounin.ru>
parents: 6901
diff changeset
3291 hc->busy = NULL;
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3292 hc->nbusy = 0;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3293 }
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3294
1779
06014cfdb5b1 create ssl buffer on demand and free it before keep-alive
Igor Sysoev <igor@sysoev.ru>
parents: 1776
diff changeset
3295 #if (NGX_HTTP_SSL)
06014cfdb5b1 create ssl buffer on demand and free it before keep-alive
Igor Sysoev <igor@sysoev.ru>
parents: 1776
diff changeset
3296 if (c->ssl) {
06014cfdb5b1 create ssl buffer on demand and free it before keep-alive
Igor Sysoev <igor@sysoev.ru>
parents: 1776
diff changeset
3297 ngx_ssl_free_buffer(c);
06014cfdb5b1 create ssl buffer on demand and free it before keep-alive
Igor Sysoev <igor@sysoev.ru>
parents: 1776
diff changeset
3298 }
06014cfdb5b1 create ssl buffer on demand and free it before keep-alive
Igor Sysoev <igor@sysoev.ru>
parents: 1776
diff changeset
3299 #endif
06014cfdb5b1 create ssl buffer on demand and free it before keep-alive
Igor Sysoev <igor@sysoev.ru>
parents: 1776
diff changeset
3300
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3301 rev->handler = ngx_http_keepalive_handler;
65
4222c496acb3 nginx-0.0.1-2003-03-05-09:37:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 64
diff changeset
3302
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3303 if (wev->active && (ngx_event_flags & NGX_USE_LEVEL_EVENT)) {
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
3304 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) != NGX_OK) {
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3305 ngx_http_close_connection(c);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3306 return;
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3307 }
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3308 }
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3309
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3310 c->log->action = "keepalive";
64
34d647deb1da nginx-0.0.1-2003-03-04-09:33:48 import
Igor Sysoev <igor@sysoev.ru>
parents: 60
diff changeset
3311
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 343
diff changeset
3312 if (c->tcp_nopush == NGX_TCP_NOPUSH_SET) {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3313 if (ngx_tcp_push(c->fd) == -1) {
328
fb4dfb2ac0fc nginx-0.0.3-2004-04-28-10:14:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 326
diff changeset
3314 ngx_connection_error(c, ngx_socket_errno, ngx_tcp_push_n " failed");
fb4dfb2ac0fc nginx-0.0.3-2004-04-28-10:14:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 326
diff changeset
3315 ngx_http_close_connection(c);
fb4dfb2ac0fc nginx-0.0.3-2004-04-28-10:14:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 326
diff changeset
3316 return;
101
2e069b6e6920 nginx-0.0.1-2003-06-04-21:28:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
3317 }
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3318
344
e366ba5db8f8 nginx-0.0.3-2004-06-01-10:04:46 import
Igor Sysoev <igor@sysoev.ru>
parents: 343
diff changeset
3319 c->tcp_nopush = NGX_TCP_NOPUSH_UNSET;
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
3320 tcp_nodelay = ngx_tcp_nodelay_and_tcp_nopush ? 1 : 0;
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3321
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3322 } else {
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
3323 tcp_nodelay = 1;
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
3324 }
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
3325
7007
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 7006
diff changeset
3326 if (tcp_nodelay && clcf->tcp_nodelay && ngx_tcp_nodelay(c) != NGX_OK) {
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 7006
diff changeset
3327 ngx_http_close_connection(c);
ed1101bbf19f Introduced ngx_tcp_nodelay().
Ruslan Ermilov <ru@nginx.com>
parents: 7006
diff changeset
3328 return;
101
2e069b6e6920 nginx-0.0.1-2003-06-04-21:28:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
3329 }
2e069b6e6920 nginx-0.0.1-2003-06-04-21:28:33 import
Igor Sysoev <igor@sysoev.ru>
parents: 100
diff changeset
3330
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3331 #if 0
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3332 /* if ngx_http_request_t was freed then we need some other place */
367
ceec87d1c2b3 nginx-0.0.7-2004-06-24-11:53:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
3333 r->http_state = NGX_HTTP_KEEPALIVE_STATE;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3334 #endif
367
ceec87d1c2b3 nginx-0.0.7-2004-06-24-11:53:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
3335
1135
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1115
diff changeset
3336 c->idle = 1;
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3848
diff changeset
3337 ngx_reusable_connection(c, 1);
1135
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1115
diff changeset
3338
5102
f597c9be5c92 Use "client_header_timeout" for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5101
diff changeset
3339 ngx_add_timer(rev, clcf->keepalive_timeout);
f597c9be5c92 Use "client_header_timeout" for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5101
diff changeset
3340
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 161
diff changeset
3341 if (rev->ready) {
2014
4151c33e4dfa avoid recursive loop
Igor Sysoev <igor@sysoev.ru>
parents: 2007
diff changeset
3342 ngx_post_event(rev, &ngx_posted_events);
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3343 }
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3344 }
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3345
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3346
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3347 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3348 ngx_http_keepalive_handler(ngx_event_t *rev)
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
3349 {
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3350 size_t size;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3351 ssize_t n;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3352 ngx_buf_t *b;
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3353 ngx_connection_t *c;
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
3354
394
e7a68e14ccd3 nginx-0.0.7-2004-07-16-10:33:35 import
Igor Sysoev <igor@sysoev.ru>
parents: 393
diff changeset
3355 c = rev->data;
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 12
diff changeset
3356
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 233
diff changeset
3357 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0, "http keepalive handler");
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3358
1135
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1115
diff changeset
3359 if (rev->timedout || c->close) {
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3360 ngx_http_close_connection(c);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3361 return;
68
d549fdc17d7e nginx-0.0.1-2003-03-12-20:32:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 67
diff changeset
3362 }
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3363
469
2ff194b74f1e nginx-0.1.9-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 461
diff changeset
3364 #if (NGX_HAVE_KQUEUE)
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3365
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3366 if (ngx_event_flags & NGX_USE_KQUEUE_EVENT) {
587
284cc140593b nginx-0.3.15-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 583
diff changeset
3367 if (rev->pending_eof) {
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3368 c->log->handler = NULL;
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3369 ngx_log_error(NGX_LOG_INFO, c->log, rev->kq_errno,
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
3370 "kevent() reported that client %V closed "
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3371 "keepalive connection", &c->addr_text);
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
3372 #if (NGX_HTTP_SSL)
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
3373 if (c->ssl) {
547
818fbd4750b9 nginx-0.2.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 543
diff changeset
3374 c->ssl->no_send_shutdown = 1;
473
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
3375 }
8e8f3af115b5 nginx-0.1.11-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 469
diff changeset
3376 #endif
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3377 ngx_http_close_connection(c);
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3378 return;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3379 }
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3380 }
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3381
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3382 #endif
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3383
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3384 b = c->buffer;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3385 size = b->end - b->start;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3386
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3387 if (b->pos == NULL) {
455
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3388
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3389 /*
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3390 * The c->buffer's memory was freed by ngx_http_set_keepalive().
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3391 * However, the c->buffer->start and c->buffer->end were not changed
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3392 * to keep the buffer size.
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3393 */
295d97d70c69 nginx-0.1.2-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 452
diff changeset
3394
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3395 b->pos = ngx_palloc(c->pool, size);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3396 if (b->pos == NULL) {
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3397 ngx_http_close_connection(c);
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3398 return;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3399 }
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3400
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3401 b->start = b->pos;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3402 b->last = b->pos;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3403 b->end = b->pos + size;
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3404 }
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3405
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3406 /*
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3407 * MSIE closes a keepalive connection with RST flag
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3408 * so we ignore ECONNRESET here.
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3409 */
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3410
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 253
diff changeset
3411 c->log_error = NGX_ERROR_IGNORE_ECONNRESET;
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3412 ngx_set_socket_errno(0);
396
6f3b20c1ac50 nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents: 395
diff changeset
3413
437
470270fa84d2 nginx-0.0.12-2004-09-23-20:39:34 import
Igor Sysoev <igor@sysoev.ru>
parents: 436
diff changeset
3414 n = c->recv(c, b->last, size);
256
8e39cab6abd5 nginx-0.0.2-2004-02-10-19:23:38 import
Igor Sysoev <igor@sysoev.ru>
parents: 253
diff changeset
3415 c->log_error = NGX_ERROR_INFO;
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 12
diff changeset
3416
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3417 if (n == NGX_AGAIN) {
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
3418 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
475
c3c2848fc081 nginx-0.1.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
3419 ngx_http_close_connection(c);
5082
42a888fdad0b Fixed potential segfault in ngx_http_keepalive_handler().
Valentin Bartenev <vbart@nginx.com>
parents: 5072
diff changeset
3420 return;
475
c3c2848fc081 nginx-0.1.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
3421 }
c3c2848fc081 nginx-0.1.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
3422
4891
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3423 /*
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3424 * Like ngx_http_set_keepalive() we are trying to not hold
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3425 * c->buffer's memory for a keepalive connection.
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3426 */
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3427
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3428 if (ngx_pfree(c->pool, b->start) == NGX_OK) {
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3429
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3430 /*
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3431 * the special note that c->buffer's memory was freed
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3432 */
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3433
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3434 b->pos = NULL;
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3435 }
1e666c78a42c ngx_http_keepalive_handler() is now trying to not keep c->buffer's memory for
Valentin Bartenev <vbart@nginx.com>
parents: 4884
diff changeset
3436
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3437 return;
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3438 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3439
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3440 if (n == NGX_ERROR) {
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3441 ngx_http_close_connection(c);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3442 return;
68
d549fdc17d7e nginx-0.0.1-2003-03-12-20:32:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 67
diff changeset
3443 }
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 12
diff changeset
3444
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3445 c->log->handler = NULL;
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
3446
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 12
diff changeset
3447 if (n == 0) {
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3448 ngx_log_error(NGX_LOG_INFO, c->log, ngx_socket_errno,
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3449 "client %V closed keepalive connection", &c->addr_text);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3450 ngx_http_close_connection(c);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3451 return;
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 12
diff changeset
3452 }
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
3453
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3454 b->last += n;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3455
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3456 c->log->handler = ngx_http_log_error;
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3457 c->log->action = "reading client request line";
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
3458
1135
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1115
diff changeset
3459 c->idle = 0;
3880
e3cb8e27e413 reuse keepalive connections if there are no free worker connections
Igor Sysoev <igor@sysoev.ru>
parents: 3848
diff changeset
3460 ngx_reusable_connection(c, 0);
1135
03f1133f24e8 close keep-alive connections in the shuting down processes
Igor Sysoev <igor@sysoev.ru>
parents: 1115
diff changeset
3461
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3462 c->data = ngx_http_create_request(c);
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3463 if (c->data == NULL) {
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3464 ngx_http_close_connection(c);
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3465 return;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3466 }
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3467
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3468 c->sent = 0;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3469 c->destroyed = 0;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3470
5102
f597c9be5c92 Use "client_header_timeout" for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5101
diff changeset
3471 ngx_del_timer(rev);
f597c9be5c92 Use "client_header_timeout" for all requests in a connection.
Valentin Bartenev <vbart@nginx.com>
parents: 5101
diff changeset
3472
5105
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3473 rev->handler = ngx_http_process_request_line;
4d67b696388f Refactored ngx_http_init_request().
Valentin Bartenev <vbart@nginx.com>
parents: 5104
diff changeset
3474 ngx_http_process_request_line(rev);
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
3475 }
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
3476
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
3477
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3478 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3479 ngx_http_set_lingering_close(ngx_http_request_t *r)
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3480 {
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3481 ngx_event_t *rev, *wev;
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3482 ngx_connection_t *c;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
3483 ngx_http_core_loc_conf_t *clcf;
44
0e81ac0bb3e2 nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 41
diff changeset
3484
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3485 c = r->connection;
53
d1e42f1b8fd4 nginx-0.0.1-2003-01-27-00:08:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 52
diff changeset
3486
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
3487 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
44
0e81ac0bb3e2 nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 41
diff changeset
3488
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3489 rev = c->read;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3490 rev->handler = ngx_http_lingering_close_handler;
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3491
557
ecd9c160f25b nginx-0.3.0-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 553
diff changeset
3492 r->lingering_time = ngx_time() + (time_t) (clcf->lingering_time / 1000);
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3493 ngx_add_timer(rev, clcf->lingering_timeout);
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3494
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
3495 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3496 ngx_http_close_request(r, 0);
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3497 return;
53
d1e42f1b8fd4 nginx-0.0.1-2003-01-27-00:08:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 52
diff changeset
3498 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3499
144
ef8c87afcfc5 nginx-0.0.1-2003-10-12-20:49:16 import
Igor Sysoev <igor@sysoev.ru>
parents: 143
diff changeset
3500 wev = c->write;
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3501 wev->handler = ngx_http_empty_handler;
53
d1e42f1b8fd4 nginx-0.0.1-2003-01-27-00:08:14 import
Igor Sysoev <igor@sysoev.ru>
parents: 52
diff changeset
3502
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3503 if (wev->active && (ngx_event_flags & NGX_USE_LEVEL_EVENT)) {
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
3504 if (ngx_del_event(wev, NGX_WRITE_EVENT, 0) != NGX_OK) {
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3505 ngx_http_close_request(r, 0);
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3506 return;
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3507 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3508 }
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3509
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3510 if (ngx_shutdown_socket(c->fd, NGX_WRITE_SHUTDOWN) == -1) {
328
fb4dfb2ac0fc nginx-0.0.3-2004-04-28-10:14:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 326
diff changeset
3511 ngx_connection_error(c, ngx_socket_errno,
fb4dfb2ac0fc nginx-0.0.3-2004-04-28-10:14:50 import
Igor Sysoev <igor@sysoev.ru>
parents: 326
diff changeset
3512 ngx_shutdown_socket_n " failed");
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3513 ngx_http_close_request(r, 0);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3514 return;
60
50186b49f2ad nginx-0.0.1-2003-02-11-10:14:40 import
Igor Sysoev <igor@sysoev.ru>
parents: 59
diff changeset
3515 }
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3516
164
84036764e215 nginx-0.0.1-2003-10-29-11:30:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 161
diff changeset
3517 if (rev->ready) {
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3518 ngx_http_lingering_close_handler(rev);
67
5a7d1aaa1618 nginx-0.0.1-2003-03-11-23:38:13 import
Igor Sysoev <igor@sysoev.ru>
parents: 66
diff changeset
3519 }
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3520 }
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3521
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3522
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3523 static void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3524 ngx_http_lingering_close_handler(ngx_event_t *rev)
26
53cb81681040 nginx-0.0.1-2002-12-15-09:25:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 24
diff changeset
3525 {
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3526 ssize_t n;
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3527 ngx_msec_t timer;
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3528 ngx_connection_t *c;
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3529 ngx_http_request_t *r;
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
3530 ngx_http_core_loc_conf_t *clcf;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3531 u_char buffer[NGX_HTTP_LINGERING_BUFFER_SIZE];
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3532
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
3533 c = rev->data;
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
3534 r = c->data;
57
a499e0d1f16e nginx-0.0.1-2003-01-30-10:28:09 import
Igor Sysoev <igor@sysoev.ru>
parents: 55
diff changeset
3535
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 233
diff changeset
3536 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, c->log, 0,
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 233
diff changeset
3537 "http lingering close handler");
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3538
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3539 if (rev->timedout) {
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3540 ngx_http_close_request(r, 0);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3541 return;
38
2ffaa35fba42 nginx-0.0.1-2002-12-24-10:09:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 37
diff changeset
3542 }
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3543
5210
ea2ba6dbe361 Fixed lingering_time check.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5200
diff changeset
3544 timer = (ngx_msec_t) r->lingering_time - (ngx_msec_t) ngx_time();
ea2ba6dbe361 Fixed lingering_time check.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5200
diff changeset
3545 if ((ngx_msec_int_t) timer <= 0) {
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3546 ngx_http_close_request(r, 0);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3547 return;
38
2ffaa35fba42 nginx-0.0.1-2002-12-24-10:09:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 37
diff changeset
3548 }
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3549
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3550 do {
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3551 n = c->recv(c, buffer, NGX_HTTP_LINGERING_BUFFER_SIZE);
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3552
6480
f01ab2dbcfdc Fixed logging.
Sergey Kandaurov <pluknet@nginx.com>
parents: 6412
diff changeset
3553 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0, "lingering read: %z", n);
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3554
7351
2b5528023f6b Lingering close changed to handle NGX_AGAIN.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7318
diff changeset
3555 if (n == NGX_AGAIN) {
2b5528023f6b Lingering close changed to handle NGX_AGAIN.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7318
diff changeset
3556 break;
2b5528023f6b Lingering close changed to handle NGX_AGAIN.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7318
diff changeset
3557 }
2b5528023f6b Lingering close changed to handle NGX_AGAIN.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7318
diff changeset
3558
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3559 if (n == NGX_ERROR || n == 0) {
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3560 ngx_http_close_request(r, 0);
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3561 return;
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3562 }
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3563
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3564 } while (rev->ready);
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3565
2388
722b5aff05ae use "!= NGX_OK" instead of "== NGX_ERROR"
Igor Sysoev <igor@sysoev.ru>
parents: 2385
diff changeset
3566 if (ngx_handle_read_event(rev, 0) != NGX_OK) {
477
ad1e9ebf93bb nginx-0.1.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 475
diff changeset
3567 ngx_http_close_request(r, 0);
475
c3c2848fc081 nginx-0.1.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
3568 return;
c3c2848fc081 nginx-0.1.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
3569 }
c3c2848fc081 nginx-0.1.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 473
diff changeset
3570
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3571 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3572
13
2aba961a1d34 nginx-0.0.1-2002-09-16-19:01:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 12
diff changeset
3573 timer *= 1000;
436
9549fc9508e5 nginx-0.0.11-2004-09-23-10:32:00 import
Igor Sysoev <igor@sysoev.ru>
parents: 435
diff changeset
3574
96
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
3575 if (timer > clcf->lingering_timeout) {
a23d010f356d nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 95
diff changeset
3576 timer = clcf->lingering_timeout;
38
2ffaa35fba42 nginx-0.0.1-2002-12-24-10:09:57 import
Igor Sysoev <igor@sysoev.ru>
parents: 37
diff changeset
3577 }
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3578
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3579 ngx_add_timer(rev, timer);
12
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3580 }
055ed05235ae nginx-0.0.1-2002-09-13-18:47:42 import
Igor Sysoev <igor@sysoev.ru>
parents: 11
diff changeset
3581
3
34a521b1a148 nginx-0.0.1-2002-08-20-18:48:28 import
Igor Sysoev <igor@sysoev.ru>
parents: 2
diff changeset
3582
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3583 void
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3584 ngx_http_empty_handler(ngx_event_t *wev)
94
8220378432a8 nginx-0.0.1-2003-05-22-19:23:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
3585 {
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 233
diff changeset
3586 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, wev->log, 0, "http empty handler");
94
8220378432a8 nginx-0.0.1-2003-05-22-19:23:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
3587
8220378432a8 nginx-0.0.1-2003-05-22-19:23:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
3588 return;
8220378432a8 nginx-0.0.1-2003-05-22-19:23:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
3589 }
8220378432a8 nginx-0.0.1-2003-05-22-19:23:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
3590
8220378432a8 nginx-0.0.1-2003-05-22-19:23:47 import
Igor Sysoev <igor@sysoev.ru>
parents: 93
diff changeset
3591
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3592 void
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3593 ngx_http_request_empty_handler(ngx_http_request_t *r)
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3594 {
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3595 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3596 "http request empty handler");
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3597
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3598 return;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3599 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3600
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3601
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3602 ngx_int_t
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
3603 ngx_http_send_special(ngx_http_request_t *r, ngx_uint_t flags)
142
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
3604 {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 335
diff changeset
3605 ngx_buf_t *b;
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
3606 ngx_chain_t out;
142
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
3607
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3608 b = ngx_calloc_buf(r->pool);
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3609 if (b == NULL) {
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 335
diff changeset
3610 return NGX_ERROR;
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 335
diff changeset
3611 }
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 335
diff changeset
3612
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
3613 if (flags & NGX_HTTP_LAST) {
2971
87ddbe960172 fix ngx_http_send_special() for subrequests handled by perl
Igor Sysoev <igor@sysoev.ru>
parents: 2951
diff changeset
3614
87ddbe960172 fix ngx_http_send_special() for subrequests handled by perl
Igor Sysoev <igor@sysoev.ru>
parents: 2951
diff changeset
3615 if (r == r->main && !r->post_action) {
87ddbe960172 fix ngx_http_send_special() for subrequests handled by perl
Igor Sysoev <igor@sysoev.ru>
parents: 2951
diff changeset
3616 b->last_buf = 1;
87ddbe960172 fix ngx_http_send_special() for subrequests handled by perl
Igor Sysoev <igor@sysoev.ru>
parents: 2951
diff changeset
3617
87ddbe960172 fix ngx_http_send_special() for subrequests handled by perl
Igor Sysoev <igor@sysoev.ru>
parents: 2951
diff changeset
3618 } else {
2993
f592d466bbda fix r2972, it caused "zero size buf" alert.
Igor Sysoev <igor@sysoev.ru>
parents: 2992
diff changeset
3619 b->sync = 1;
2971
87ddbe960172 fix ngx_http_send_special() for subrequests handled by perl
Igor Sysoev <igor@sysoev.ru>
parents: 2951
diff changeset
3620 b->last_in_chain = 1;
87ddbe960172 fix ngx_http_send_special() for subrequests handled by perl
Igor Sysoev <igor@sysoev.ru>
parents: 2951
diff changeset
3621 }
581
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
3622 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
3623
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
3624 if (flags & NGX_HTTP_FLUSH) {
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
3625 b->flush = 1;
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
3626 }
326634fb9d47 nginx-0.3.12-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 577
diff changeset
3627
343
6bdf858bff8c nginx-0.0.3-2004-05-28-19:49:23 import; rename ngx_hunk_t to ngx_buf_t
Igor Sysoev <igor@sysoev.ru>
parents: 335
diff changeset
3628 out.buf = b;
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
3629 out.next = NULL;
142
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
3630
153
c71aeb75c071 nginx-0.0.1-2003-10-21-20:49:56 import
Igor Sysoev <igor@sysoev.ru>
parents: 152
diff changeset
3631 return ngx_http_output_filter(r, &out);
142
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
3632 }
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
3633
cb77c084acdb nginx-0.0.1-2003-10-09-11:00:45 import
Igor Sysoev <igor@sysoev.ru>
parents: 137
diff changeset
3634
613
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3635 static ngx_int_t
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3636 ngx_http_post_action(ngx_http_request_t *r)
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3637 {
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3638 ngx_http_core_loc_conf_t *clcf;
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3639
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3640 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3641
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3642 if (clcf->post_action.data == NULL) {
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3643 return NGX_DECLINED;
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3644 }
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3645
4472
c95b828912a3 Core: protection from cycles with named locations and post_action.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4471
diff changeset
3646 if (r->post_action && r->uri_changes == 0) {
c95b828912a3 Core: protection from cycles with named locations and post_action.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4471
diff changeset
3647 return NGX_DECLINED;
c95b828912a3 Core: protection from cycles with named locations and post_action.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4471
diff changeset
3648 }
c95b828912a3 Core: protection from cycles with named locations and post_action.
Maxim Dounin <mdounin@mdounin.ru>
parents: 4471
diff changeset
3649
623
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 615
diff changeset
3650 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, r->connection->log, 0,
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 615
diff changeset
3651 "post action: \"%V\"", &clcf->post_action);
0216fd1471f3 nginx-0.3.33-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 615
diff changeset
3652
3145
9160a117a46a fix request counter for post_action, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3076
diff changeset
3653 r->main->count--;
9160a117a46a fix request counter for post_action, the bug was introduced in r3050
Igor Sysoev <igor@sysoev.ru>
parents: 3076
diff changeset
3654
613
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3655 r->http_version = NGX_HTTP_VERSION_9;
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3656 r->header_only = 1;
629
65bf042c0b4f nginx-0.3.36-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 623
diff changeset
3657 r->post_action = 1;
613
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3658
1368
202cae9a0c2b rename ngx_http_block_read() and ngx_http_test_read() to ..._reading()
Igor Sysoev <igor@sysoev.ru>
parents: 1283
diff changeset
3659 r->read_event_handler = ngx_http_block_reading;
895
49d03c183ad2 fix post_action for disconnected client
Igor Sysoev <igor@sysoev.ru>
parents: 884
diff changeset
3660
1894
22e28e77246b named locations in post_action
Igor Sysoev <igor@sysoev.ru>
parents: 1858
diff changeset
3661 if (clcf->post_action.data[0] == '/') {
22e28e77246b named locations in post_action
Igor Sysoev <igor@sysoev.ru>
parents: 1858
diff changeset
3662 ngx_http_internal_redirect(r, &clcf->post_action, NULL);
22e28e77246b named locations in post_action
Igor Sysoev <igor@sysoev.ru>
parents: 1858
diff changeset
3663
22e28e77246b named locations in post_action
Igor Sysoev <igor@sysoev.ru>
parents: 1858
diff changeset
3664 } else {
22e28e77246b named locations in post_action
Igor Sysoev <igor@sysoev.ru>
parents: 1858
diff changeset
3665 ngx_http_named_location(r, &clcf->post_action);
22e28e77246b named locations in post_action
Igor Sysoev <igor@sysoev.ru>
parents: 1858
diff changeset
3666 }
613
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3667
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3668 return NGX_OK;
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3669 }
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3670
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3671
c73c5c58c619 nginx-0.3.28-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 611
diff changeset
3672 static void
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3673 ngx_http_close_request(ngx_http_request_t *r, ngx_int_t rc)
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3674 {
639
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3675 ngx_connection_t *c;
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
3676
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3677 r = r->main;
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
3678 c = r->connection;
639
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3679
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
3680 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, c->log, 0,
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
3681 "http request count:%d blk:%d", r->count, r->blocked);
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3682
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3683 if (r->count == 0) {
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3684 ngx_log_error(NGX_LOG_ALERT, c->log, 0, "http request count is zero");
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3685 }
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3686
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3687 r->count--;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3688
3052
6060225e9261 FreeBSD and Linux AIO support
Igor Sysoev <igor@sysoev.ru>
parents: 3051
diff changeset
3689 if (r->count || r->blocked) {
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3690 return;
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3691 }
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3692
6246
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
3693 #if (NGX_HTTP_V2)
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
3694 if (r->stream) {
257b51c37c5a The HTTP/2 implementation (RFC 7240, 7241).
Valentin Bartenev <vbart@nginx.com>
parents: 6237
diff changeset
3695 ngx_http_v2_close_stream(r->stream, rc);
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3696 return;
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3697 }
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3698 #endif
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3699
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3700 ngx_http_free_request(r, rc);
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
3701 ngx_http_close_connection(c);
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
3702 }
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
3703
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
3704
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3705 void
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3706 ngx_http_free_request(ngx_http_request_t *r, ngx_int_t rc)
569
174f1e853e1e nginx-0.3.6-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 567
diff changeset
3707 {
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3708 ngx_log_t *log;
5096
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3709 ngx_pool_t *pool;
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3710 struct linger linger;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3711 ngx_http_cleanup_t *cln;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3712 ngx_http_log_ctx_t *ctx;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3713 ngx_http_core_loc_conf_t *clcf;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3714
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
3715 log = r->connection->log;
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
3716
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
3717 ngx_log_debug0(NGX_LOG_DEBUG_HTTP, log, 0, "http close request");
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3718
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3719 if (r->pool == NULL) {
531
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3720 ngx_log_error(NGX_LOG_ALERT, log, 0, "http request already closed");
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3721 return;
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3722 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3723
5363
31af4ae8ad9c Request cleanup code unified, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5354
diff changeset
3724 cln = r->cleanup;
31af4ae8ad9c Request cleanup code unified, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5354
diff changeset
3725 r->cleanup = NULL;
31af4ae8ad9c Request cleanup code unified, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5354
diff changeset
3726
31af4ae8ad9c Request cleanup code unified, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5354
diff changeset
3727 while (cln) {
639
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3728 if (cln->handler) {
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3729 cln->handler(cln->data);
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3730 }
5363
31af4ae8ad9c Request cleanup code unified, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5354
diff changeset
3731
31af4ae8ad9c Request cleanup code unified, no functional changes.
Maxim Dounin <mdounin@mdounin.ru>
parents: 5354
diff changeset
3732 cln = cln->next;
639
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3733 }
715d24327080 nginx-0.3.41-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 637
diff changeset
3734
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 426
diff changeset
3735 #if (NGX_STAT_STUB)
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
3736
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 426
diff changeset
3737 if (r->stat_reading) {
2951
5acd98486a33 ignore ngx_atomic_fetch_add() result
Igor Sysoev <igor@sysoev.ru>
parents: 2902
diff changeset
3738 (void) ngx_atomic_fetch_add(ngx_stat_reading, -1);
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 426
diff changeset
3739 }
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 426
diff changeset
3740
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 426
diff changeset
3741 if (r->stat_writing) {
2951
5acd98486a33 ignore ngx_atomic_fetch_add() result
Igor Sysoev <igor@sysoev.ru>
parents: 2902
diff changeset
3742 (void) ngx_atomic_fetch_add(ngx_stat_writing, -1);
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 426
diff changeset
3743 }
567
1af2fcb3be8a nginx-0.3.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 563
diff changeset
3744
427
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 426
diff changeset
3745 #endif
0d08eabe5c7b nginx-0.0.10-2004-09-15-20:00:43 import
Igor Sysoev <igor@sysoev.ru>
parents: 426
diff changeset
3746
3049
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3747 if (rc > 0 && (r->headers_out.status == 0 || r->connection->sent == 0)) {
67254117b774 request reference counter
Igor Sysoev <igor@sysoev.ru>
parents: 3000
diff changeset
3748 r->headers_out.status = rc;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3749 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3750
7462
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
3751 if (!r->logged) {
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
3752 log->action = "logging request";
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
3753
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
3754 ngx_http_log_request(r);
be2af41d3620 SSL: variables support in ssl_certificate and ssl_certificate_key.
Maxim Dounin <mdounin@mdounin.ru>
parents: 7458
diff changeset
3755 }
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3756
2077
479440385e35 fix error message
Igor Sysoev <igor@sysoev.ru>
parents: 2067
diff changeset
3757 log->action = "closing request";
479440385e35 fix error message
Igor Sysoev <igor@sysoev.ru>
parents: 2067
diff changeset
3758
346
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3759 if (r->connection->timedout) {
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3760 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3761
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3762 if (clcf->reset_timedout_connection) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3763 linger.l_onoff = 1;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3764 linger.l_linger = 0;
346
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3765
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3766 if (setsockopt(r->connection->fd, SOL_SOCKET, SO_LINGER,
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3767 (const void *) &linger, sizeof(struct linger)) == -1)
346
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3768 {
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3769 ngx_log_error(NGX_LOG_ALERT, log, ngx_socket_errno,
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3770 "setsockopt(SO_LINGER) failed");
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3771 }
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3772 }
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3773 }
55e496a8ece3 nginx-0.0.3-2004-06-06-23:49:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 344
diff changeset
3774
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3775 /* the various request strings were allocated from r->pool */
201
267ea1d98683 nginx-0.0.1-2003-11-30-23:03:18 import
Igor Sysoev <igor@sysoev.ru>
parents: 200
diff changeset
3776 ctx = log->data;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
3777 ctx->request = NULL;
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3778
367
ceec87d1c2b3 nginx-0.0.7-2004-06-24-11:53:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
3779 r->request_line.len = 0;
ceec87d1c2b3 nginx-0.0.7-2004-06-24-11:53:37 import
Igor Sysoev <igor@sysoev.ru>
parents: 362
diff changeset
3780
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3781 r->connection->destroyed = 1;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3782
5096
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3783 /*
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3784 * Setting r->pool to NULL will increase probability to catch double close
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3785 * of request since the request object is allocated from its own pool.
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3786 */
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3787
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3788 pool = r->pool;
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3789 r->pool = NULL;
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3790
63014d919fec Allocate request object from its own pool.
Valentin Bartenev <vbart@nginx.com>
parents: 5095
diff changeset
3791 ngx_destroy_pool(pool);
87
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3792 }
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3793
5f6d848dcbef nginx-0.0.1-2003-05-13-20:02:32 import
Igor Sysoev <igor@sysoev.ru>
parents: 86
diff changeset
3794
531
c3bd8cdabb8f nginx-0.1.40-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 527
diff changeset
3795 static void
2261
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3796 ngx_http_log_request(ngx_http_request_t *r)
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3797 {
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3798 ngx_uint_t i, n;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3799 ngx_http_handler_pt *log_handler;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3800 ngx_http_core_main_conf_t *cmcf;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3801
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3802 cmcf = ngx_http_get_module_main_conf(r, ngx_http_core_module);
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3803
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3804 log_handler = cmcf->phases[NGX_HTTP_LOG_PHASE].handlers.elts;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3805 n = cmcf->phases[NGX_HTTP_LOG_PHASE].handlers.nelts;
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3806
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3807 for (i = 0; i < n; i++) {
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3808 log_handler[i](r);
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3809 }
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3810 }
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3811
07bf557a2e40 *) log_subrequest
Igor Sysoev <igor@sysoev.ru>
parents: 2256
diff changeset
3812
5121
c0f7b94e88ba Preliminary experimental support for SPDY draft 2.
Valentin Bartenev <vbart@nginx.com>
parents: 5119
diff changeset
3813 void
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3814 ngx_http_close_connection(ngx_connection_t *c)
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
3815 {
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
3816 ngx_pool_t *pool;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
3817
239
574bea0142be nginx-0.0.1-2004-01-26-11:52:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 233
diff changeset
3818 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, c->log, 0,
257
70e1c7d2b83d nginx-0.0.2-2004-02-11-20:08:49 import
Igor Sysoev <igor@sysoev.ru>
parents: 256
diff changeset
3819 "close http connection: %d", c->fd);
86
3973260705cc nginx-0.0.1-2003-05-12-19:52:24 import
Igor Sysoev <igor@sysoev.ru>
parents: 82
diff changeset
3820
539
371c1cee100d nginx-0.1.44-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 537
diff changeset
3821 #if (NGX_HTTP_SSL)
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3822
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3823 if (c->ssl) {
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3824 if (ngx_ssl_shutdown(c) == NGX_AGAIN) {
577
4d9ea73a627a nginx-0.3.10-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 573
diff changeset
3825 c->ssl->handler = ngx_http_close_connection;
452
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3826 return;
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3827 }
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3828 }
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3829
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3830 #endif
23fb87bddda1 nginx-0.1.1-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 449
diff changeset
3831
426
3f88935a02e8 nginx-0.0.10-2004-09-14-23:39:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
3832 #if (NGX_STAT_STUB)
2951
5acd98486a33 ignore ngx_atomic_fetch_add() result
Igor Sysoev <igor@sysoev.ru>
parents: 2902
diff changeset
3833 (void) ngx_atomic_fetch_add(ngx_stat_active, -1);
426
3f88935a02e8 nginx-0.0.10-2004-09-14-23:39:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
3834 #endif
3f88935a02e8 nginx-0.0.10-2004-09-14-23:39:54 import
Igor Sysoev <igor@sysoev.ru>
parents: 423
diff changeset
3835
583
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3836 c->destroyed = 1;
4e296b7d25bf nginx-0.3.13-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 581
diff changeset
3837
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
3838 pool = c->pool;
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
3839
417
0526206251f6 nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents: 416
diff changeset
3840 ngx_close_connection(c);
479
c52408583801 nginx-0.1.14-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 477
diff changeset
3841
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3842 ngx_destroy_pool(pool);
18
72ad26c77d2d nginx-0.0.1-2002-10-04-21:58:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 17
diff changeset
3843 }
72ad26c77d2d nginx-0.0.1-2002-10-04-21:58:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 17
diff changeset
3844
72ad26c77d2d nginx-0.0.1-2002-10-04-21:58:04 import
Igor Sysoev <igor@sysoev.ru>
parents: 17
diff changeset
3845
501
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3846 static u_char *
d4ea69372b94 nginx-0.1.25-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 499
diff changeset
3847 ngx_http_log_error(ngx_log_t *log, u_char *buf, size_t len)
6
669801705ab1 nginx-0.0.1-2002-08-26-19:18:19 import
Igor Sysoev <igor@sysoev.ru>
parents: 3
diff changeset
3848 {
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3849 u_char *p;
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3850 ngx_http_request_t *r;
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3851 ngx_http_log_ctx_t *ctx;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
3852
483
621229427cba nginx-0.1.16-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 479
diff changeset
3853 if (log->action) {
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3854 p = ngx_snprintf(buf, len, " while %s", log->action);
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
3855 len -= p - buf;
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3856 buf = p;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
3857 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
3858
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3859 ctx = log->data;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3860
1810
755e09d5c271 log server address
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
3861 p = ngx_snprintf(buf, len, ", client: %V", &ctx->connection->addr_text);
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3862 len -= p - buf;
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3863
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3864 r = ctx->request;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3865
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3866 if (r) {
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3867 return r->log_handler(r, ctx->current_request, p, len);
1810
755e09d5c271 log server address
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
3868
755e09d5c271 log server address
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
3869 } else {
755e09d5c271 log server address
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
3870 p = ngx_snprintf(p, len, ", server: %V",
755e09d5c271 log server address
Igor Sysoev <igor@sysoev.ru>
parents: 1805
diff changeset
3871 &ctx->connection->listening->addr_text);
69
e43f406e4525 nginx-0.0.1-2003-03-20-19:09:44 import
Igor Sysoev <igor@sysoev.ru>
parents: 68
diff changeset
3872 }
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
3873
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3874 return p;
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3875 }
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3876
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3877
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3878 static u_char *
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3879 ngx_http_log_error_handler(ngx_http_request_t *r, ngx_http_request_t *sr,
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3880 u_char *buf, size_t len)
509
9b8c906f6e63 nginx-0.1.29-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 507
diff changeset
3881 {
1811
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3882 char *uri_separator;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3883 u_char *p;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3884 ngx_http_upstream_t *u;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3885 ngx_http_core_srv_conf_t *cscf;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3886
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3887 cscf = ngx_http_get_module_srv_conf(r, ngx_http_core_module);
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3888
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3889 p = ngx_snprintf(buf, len, ", server: %V", &cscf->server_name);
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3890 len -= p - buf;
0d9c6fe7502b axe useless r->server_name
Igor Sysoev <igor@sysoev.ru>
parents: 1810
diff changeset
3891 buf = p;
503
b1648294f693 nginx-0.1.26-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 501
diff changeset
3892
1656
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3893 if (r->request_line.data == NULL && r->request_start) {
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3894 for (p = r->request_start; p < r->header_in->last; p++) {
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3895 if (*p == CR || *p == LF) {
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3896 break;
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3897 }
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3898 }
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3899
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3900 r->request_line.len = p - r->request_start;
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3901 r->request_line.data = r->request_start;
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3902 }
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3903
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3904 if (r->request_line.len) {
7a9b44e35c53 log entire request line instead of URI only
Igor Sysoev <igor@sysoev.ru>
parents: 1640
diff changeset
3905 p = ngx_snprintf(buf, len, ", request: \"%V\"", &r->request_line);
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3906 len -= p - buf;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3907 buf = p;
461
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
3908 }
a88a3e4e158f nginx-0.1.5-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 457
diff changeset
3909
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3910 if (r != sr) {
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3911 p = ngx_snprintf(buf, len, ", subrequest: \"%V\"", &sr->uri);
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3912 len -= p - buf;
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3913 buf = p;
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3914 }
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3915
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3916 u = sr->upstream;
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3917
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3918 if (u && u->peer.name) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3919
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3920 uri_separator = "";
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3921
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3922 #if (NGX_HAVE_UNIX_DOMAIN)
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3923 if (u->peer.sockaddr && u->peer.sockaddr->sa_family == AF_UNIX) {
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3924 uri_separator = ":";
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3925 }
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3926 #endif
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3927
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3928 p = ngx_snprintf(buf, len, ", upstream: \"%V%V%s%V\"",
1658
13f8dec720b5 proxy_pass variables support
Igor Sysoev <igor@sysoev.ru>
parents: 1656
diff changeset
3929 &u->schema, u->peer.name,
884
4d68c486fcb0 upstream choice modules
Igor Sysoev <igor@sysoev.ru>
parents: 864
diff changeset
3930 uri_separator, &u->uri);
665
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3931 len -= p - buf;
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3932 buf = p;
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3933 }
5fd7a5e99047 nginx-0.3.54-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 663
diff changeset
3934
505
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3935 if (r->headers_in.host) {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3936 p = ngx_snprintf(buf, len, ", host: \"%V\"",
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3937 &r->headers_in.host->value);
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3938 len -= p - buf;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3939 buf = p;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3940 }
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3941
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3942 if (r->headers_in.referer) {
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3943 p = ngx_snprintf(buf, len, ", referrer: \"%V\"",
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3944 &r->headers_in.referer->value);
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3945 buf = p;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3946 }
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3947
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3948 return buf;
ee66921ecd47 nginx-0.1.27-RELEASE import
Igor Sysoev <igor@sysoev.ru>
parents: 503
diff changeset
3949 }