Mercurial > hg > nginx
annotate src/http/ngx_http.c @ 2021:2022e71d26d2
split ngx_http_block()
author | Igor Sysoev <igor@sysoev.ru> |
---|---|
date | Thu, 22 May 2008 09:57:47 +0000 |
parents | 248a376403b0 |
children | 35b35b84f5ef |
rev | line source |
---|---|
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:
423
diff
changeset
|
1 |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
423
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 |
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:
423
diff
changeset
|
4 */ |
da8c5707af39
nginx-0.1.0-2004-09-28-12:34:51 import; set copyright and remove unused files
Igor Sysoev <igor@sysoev.ru>
parents:
423
diff
changeset
|
5 |
2
ffffe1499bce
nginx-0.0.1-2002-08-16-19:27:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
6 |
3
34a521b1a148
nginx-0.0.1-2002-08-20-18:48:28 import
Igor Sysoev <igor@sysoev.ru>
parents:
2
diff
changeset
|
7 #include <ngx_config.h> |
100
7ebc8b7fb816
nginx-0.0.1-2003-06-03-19:42:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
98
diff
changeset
|
8 #include <ngx_core.h> |
103
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
9 #include <ngx_event.h> |
2
ffffe1499bce
nginx-0.0.1-2002-08-16-19:27:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
10 #include <ngx_http.h> |
ffffe1499bce
nginx-0.0.1-2002-08-16-19:27:03 import
Igor Sysoev <igor@sysoev.ru>
parents:
diff
changeset
|
11 |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
12 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
13 static char *ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf); |
2021 | 14 static ngx_int_t ngx_http_init_phases(ngx_conf_t *cf, |
15 ngx_http_core_main_conf_t *cmcf); | |
16 static ngx_int_t ngx_http_init_headers_in_hash(ngx_conf_t *cf, | |
17 ngx_http_core_main_conf_t *cmcf); | |
18 static ngx_int_t ngx_http_init_phase_handlers(ngx_conf_t *cf, | |
19 ngx_http_core_main_conf_t *cmcf); | |
455 | 20 static ngx_int_t ngx_http_add_address(ngx_conf_t *cf, |
593 | 21 ngx_http_conf_in_port_t *in_port, ngx_http_listen_t *lscf, |
499 | 22 ngx_http_core_srv_conf_t *cscf); |
455 | 23 static ngx_int_t ngx_http_add_names(ngx_conf_t *cf, |
593 | 24 ngx_http_conf_in_addr_t *in_addr, ngx_http_core_srv_conf_t *cscf); |
396
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
25 static char *ngx_http_merge_locations(ngx_conf_t *cf, |
499 | 26 ngx_array_t *locations, void **loc_conf, ngx_http_module_t *module, |
27 ngx_uint_t ctx_index); | |
1956
cb8c0c8e0c27
use ngx_int_t in ngx_sort() callback
Igor Sysoev <igor@sysoev.ru>
parents:
1910
diff
changeset
|
28 static ngx_int_t ngx_http_cmp_conf_in_addrs(const void *one, const void *two); |
593 | 29 static int ngx_libc_cdecl ngx_http_cmp_dns_wildcards(const void *one, |
30 const void *two); | |
212
679f60139863
nginx-0.0.1-2003-12-19-11:15:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
201
diff
changeset
|
31 |
593 | 32 ngx_uint_t ngx_http_max_module; |
33 | |
34 ngx_uint_t ngx_http_total_requests; | |
35 uint64_t ngx_http_total_sent; | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
36 |
45
f1ee46c036a4
nginx-0.0.1-2003-01-10-09:09:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
44
diff
changeset
|
37 |
356
2e3cbc1bbe3c
nginx-0.0.7-2004-06-16-19:32:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
311
diff
changeset
|
38 ngx_int_t (*ngx_http_top_header_filter) (ngx_http_request_t *r); |
2e3cbc1bbe3c
nginx-0.0.7-2004-06-16-19:32:11 import
Igor Sysoev <igor@sysoev.ru>
parents:
311
diff
changeset
|
39 ngx_int_t (*ngx_http_top_body_filter) (ngx_http_request_t *r, ngx_chain_t *ch); |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
40 |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
41 |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
42 static ngx_command_t ngx_http_commands[] = { |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
43 |
499 | 44 { ngx_string("http"), |
45 NGX_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_NOARGS, | |
46 ngx_http_block, | |
47 0, | |
48 0, | |
49 NULL }, | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
50 |
499 | 51 ngx_null_command |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
52 }; |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
53 |
577 | 54 |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
291
diff
changeset
|
55 static ngx_core_module_t ngx_http_module_ctx = { |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
291
diff
changeset
|
56 ngx_string("http"), |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
291
diff
changeset
|
57 NULL, |
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
291
diff
changeset
|
58 NULL |
577 | 59 }; |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
291
diff
changeset
|
60 |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
61 |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
62 ngx_module_t ngx_http_module = { |
509 | 63 NGX_MODULE_V1, |
311
11ff50a35d6d
nginx-0.0.3-2004-04-12-20:38:09 import
Igor Sysoev <igor@sysoev.ru>
parents:
291
diff
changeset
|
64 &ngx_http_module_ctx, /* module context */ |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
65 ngx_http_commands, /* module directives */ |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
66 NGX_CORE_MODULE, /* module type */ |
541 | 67 NULL, /* init master */ |
116
571bcbff82c5
nginx-0.0.1-2003-07-11-08:50:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
114
diff
changeset
|
68 NULL, /* init module */ |
541 | 69 NULL, /* init process */ |
70 NULL, /* init thread */ | |
71 NULL, /* exit thread */ | |
72 NULL, /* exit process */ | |
73 NULL, /* exit master */ | |
74 NGX_MODULE_V1_PADDING | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
75 }; |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
76 |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
77 |
499 | 78 static char * |
79 ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
80 { |
419
47709bff4468
nginx-0.0.10-2004-09-09-19:40:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
417
diff
changeset
|
81 char *rv; |
2021 | 82 ngx_int_t rc; |
83 ngx_uint_t mi, m, s, l, p, a, i; | |
593 | 84 ngx_uint_t last, bind_all, done; |
216
f1d0e5f09c1e
nginx-0.0.1-2003-12-25-23:26:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
85 ngx_conf_t pcf; |
2021 | 86 ngx_array_t in_ports; |
593 | 87 ngx_hash_init_t hash; |
103
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
88 ngx_listening_t *ls; |
216
f1d0e5f09c1e
nginx-0.0.1-2003-12-25-23:26:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
89 ngx_http_listen_t *lscf; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
90 ngx_http_module_t *module; |
593 | 91 ngx_http_in_port_t *hip; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
92 ngx_http_conf_ctx_t *ctx; |
593 | 93 ngx_http_conf_in_port_t *in_port; |
94 ngx_http_conf_in_addr_t *in_addr; | |
95 ngx_hash_keys_arrays_t ha; | |
96 ngx_http_server_name_t *name; | |
97 ngx_http_virtual_names_t *vn; | |
103
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
98 ngx_http_core_srv_conf_t **cscfp, *cscf; |
401
b32ca005e025
nginx-0.0.9-2004-07-26-22:31:43 import
Igor Sysoev <igor@sysoev.ru>
parents:
396
diff
changeset
|
99 ngx_http_core_loc_conf_t *clcf; |
216
f1d0e5f09c1e
nginx-0.0.1-2003-12-25-23:26:58 import
Igor Sysoev <igor@sysoev.ru>
parents:
213
diff
changeset
|
100 ngx_http_core_main_conf_t *cmcf; |
1387 | 101 #if (NGX_PCRE) |
102 ngx_uint_t regex; | |
103 #endif | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
104 |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
105 /* the main http context */ |
477 | 106 |
501 | 107 ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_conf_ctx_t)); |
108 if (ctx == NULL) { | |
485 | 109 return NGX_CONF_ERROR; |
110 } | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
111 |
90
37530da31268
nginx-0.0.1-2003-05-16-19:27:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
89
diff
changeset
|
112 *(ngx_http_conf_ctx_t **) conf = ctx; |
37530da31268
nginx-0.0.1-2003-05-16-19:27:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
89
diff
changeset
|
113 |
485 | 114 |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
115 /* count the number of the http modules and set up their indices */ |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
116 |
71
59229033ae93
nginx-0.0.1-2003-04-08-19:40:10 import
Igor Sysoev <igor@sysoev.ru>
parents:
69
diff
changeset
|
117 ngx_http_max_module = 0; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
118 for (m = 0; ngx_modules[m]; m++) { |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
119 if (ngx_modules[m]->type != NGX_HTTP_MODULE) { |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
120 continue; |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
121 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
122 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
123 ngx_modules[m]->ctx_index = ngx_http_max_module++; |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
124 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
125 |
477 | 126 |
485 | 127 /* the http main_conf context, it is the same in the all http contexts */ |
90
37530da31268
nginx-0.0.1-2003-05-16-19:27:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
89
diff
changeset
|
128 |
485 | 129 ctx->main_conf = ngx_pcalloc(cf->pool, |
130 sizeof(void *) * ngx_http_max_module); | |
131 if (ctx->main_conf == NULL) { | |
132 return NGX_CONF_ERROR; | |
133 } | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
134 |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
135 |
485 | 136 /* |
137 * the http null srv_conf context, it is used to merge | |
138 * the server{}s' srv_conf's | |
139 */ | |
140 | |
141 ctx->srv_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module); | |
142 if (ctx->srv_conf == NULL) { | |
143 return NGX_CONF_ERROR; | |
144 } | |
145 | |
146 | |
147 /* | |
148 * the http null loc_conf context, it is used to merge | |
149 * the server{}s' loc_conf's | |
150 */ | |
151 | |
152 ctx->loc_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module); | |
153 if (ctx->loc_conf == NULL) { | |
154 return NGX_CONF_ERROR; | |
155 } | |
156 | |
157 | |
158 /* | |
159 * create the main_conf's, the null srv_conf's, and the null loc_conf's | |
160 * of the all http modules | |
161 */ | |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
162 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
163 for (m = 0; ngx_modules[m]; m++) { |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
164 if (ngx_modules[m]->type != NGX_HTTP_MODULE) { |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
165 continue; |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
166 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
167 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
168 module = ngx_modules[m]->ctx; |
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
169 mi = ngx_modules[m]->ctx_index; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
170 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
171 if (module->create_main_conf) { |
501 | 172 ctx->main_conf[mi] = module->create_main_conf(cf); |
173 if (ctx->main_conf[mi] == NULL) { | |
485 | 174 return NGX_CONF_ERROR; |
175 } | |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
176 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
177 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
178 if (module->create_srv_conf) { |
501 | 179 ctx->srv_conf[mi] = module->create_srv_conf(cf); |
180 if (ctx->srv_conf[mi] == NULL) { | |
485 | 181 return NGX_CONF_ERROR; |
182 } | |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
183 } |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
184 |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
185 if (module->create_loc_conf) { |
501 | 186 ctx->loc_conf[mi] = module->create_loc_conf(cf); |
187 if (ctx->loc_conf[mi] == NULL) { | |
485 | 188 return NGX_CONF_ERROR; |
189 } | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
190 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
191 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
192 |
509 | 193 pcf = *cf; |
194 cf->ctx = ctx; | |
195 | |
196 for (m = 0; ngx_modules[m]; m++) { | |
197 if (ngx_modules[m]->type != NGX_HTTP_MODULE) { | |
198 continue; | |
199 } | |
200 | |
201 module = ngx_modules[m]->ctx; | |
202 mi = ngx_modules[m]->ctx_index; | |
203 | |
204 if (module->preconfiguration) { | |
205 if (module->preconfiguration(cf) != NGX_OK) { | |
206 return NGX_CONF_ERROR; | |
207 } | |
208 } | |
209 } | |
485 | 210 |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
211 /* parse inside the http{} block */ |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
212 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
213 cf->module_type = NGX_HTTP_MODULE; |
88
674d333f4296
nginx-0.0.1-2003-05-14-21:13:13 import
Igor Sysoev <igor@sysoev.ru>
parents:
81
diff
changeset
|
214 cf->cmd_type = NGX_HTTP_MAIN_CONF; |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
215 rv = ngx_conf_parse(cf, NULL); |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
216 |
176
c0552e5ab567
nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
217 if (rv != NGX_CONF_OK) { |
c0552e5ab567
nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
218 *cf = pcf; |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
219 return rv; |
176
c0552e5ab567
nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
220 } |
54
27b628ef907e
nginx-0.0.1-2003-01-28-18:56:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
45
diff
changeset
|
221 |
176
c0552e5ab567
nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
222 /* |
c0552e5ab567
nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
223 * init http{} main_conf's, merge the server{}s' srv_conf's |
c0552e5ab567
nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
224 * and its location{}s' loc_conf's |
c0552e5ab567
nginx-0.0.1-2003-11-09-23:03:38 import; separate building
Igor Sysoev <igor@sysoev.ru>
parents:
144
diff
changeset
|
225 */ |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
226 |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
227 cmcf = ctx->main_conf[ngx_http_core_module.ctx_index]; |
98
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
96
diff
changeset
|
228 cscfp = cmcf->servers.elts; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
229 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
230 for (m = 0; ngx_modules[m]; m++) { |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
231 if (ngx_modules[m]->type != NGX_HTTP_MODULE) { |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
232 continue; |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
233 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
234 |
98
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
96
diff
changeset
|
235 module = ngx_modules[m]->ctx; |
96
a23d010f356d
nginx-0.0.1-2003-05-27-16:18:54 import
Igor Sysoev <igor@sysoev.ru>
parents:
95
diff
changeset
|
236 mi = ngx_modules[m]->ctx_index; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
237 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
238 /* init http{} main_conf's */ |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
239 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
240 if (module->init_main_conf) { |
119
cd54bcbaf3b5
nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
116
diff
changeset
|
241 rv = module->init_main_conf(cf, ctx->main_conf[mi]); |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
242 if (rv != NGX_CONF_OK) { |
177
4db54fdbcbe7
nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents:
176
diff
changeset
|
243 *cf = pcf; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
244 return rv; |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
245 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
246 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
247 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
248 for (s = 0; s < cmcf->servers.nelts; s++) { |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
249 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
250 /* merge the server{}s' srv_conf's */ |
54
27b628ef907e
nginx-0.0.1-2003-01-28-18:56:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
45
diff
changeset
|
251 |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
252 if (module->merge_srv_conf) { |
119
cd54bcbaf3b5
nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
116
diff
changeset
|
253 rv = module->merge_srv_conf(cf, |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
254 ctx->srv_conf[mi], |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
255 cscfp[s]->ctx->srv_conf[mi]); |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
256 if (rv != NGX_CONF_OK) { |
177
4db54fdbcbe7
nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents:
176
diff
changeset
|
257 *cf = pcf; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
258 return rv; |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
259 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
260 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
261 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
262 if (module->merge_loc_conf) { |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
263 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
264 /* merge the server{}'s loc_conf */ |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
265 |
119
cd54bcbaf3b5
nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
116
diff
changeset
|
266 rv = module->merge_loc_conf(cf, |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
267 ctx->loc_conf[mi], |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
268 cscfp[s]->ctx->loc_conf[mi]); |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
269 if (rv != NGX_CONF_OK) { |
177
4db54fdbcbe7
nginx-0.0.1-2003-11-10-20:17:31 import
Igor Sysoev <igor@sysoev.ru>
parents:
176
diff
changeset
|
270 *cf = pcf; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
271 return rv; |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
272 } |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
273 |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
274 /* merge the locations{}' loc_conf's */ |
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
275 |
396
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
276 rv = ngx_http_merge_locations(cf, &cscfp[s]->locations, |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
277 cscfp[s]->ctx->loc_conf, |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
278 module, mi); |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
279 if (rv != NGX_CONF_OK) { |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
280 *cf = pcf; |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
281 return rv; |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
282 } |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
283 } |
54
27b628ef907e
nginx-0.0.1-2003-01-28-18:56:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
45
diff
changeset
|
284 } |
27b628ef907e
nginx-0.0.1-2003-01-28-18:56:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
45
diff
changeset
|
285 } |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
286 |
485 | 287 |
2021 | 288 if (ngx_http_init_phases(cf, cmcf) != NGX_OK) { |
485 | 289 return NGX_CONF_ERROR; |
290 } | |
291 | |
2021 | 292 if (ngx_http_init_headers_in_hash(cf, cmcf) != NGX_OK) { |
649 | 293 return NGX_CONF_ERROR; |
294 } | |
295 | |
509 | 296 |
297 for (m = 0; ngx_modules[m]; m++) { | |
298 if (ngx_modules[m]->type != NGX_HTTP_MODULE) { | |
299 continue; | |
300 } | |
301 | |
302 module = ngx_modules[m]->ctx; | |
303 mi = ngx_modules[m]->ctx_index; | |
304 | |
305 if (module->postconfiguration) { | |
306 if (module->postconfiguration(cf) != NGX_OK) { | |
307 return NGX_CONF_ERROR; | |
308 } | |
309 } | |
310 } | |
311 | |
573 | 312 if (ngx_http_variables_init_vars(cf) != NGX_OK) { |
313 return NGX_CONF_ERROR; | |
314 } | |
509 | 315 |
316 /* | |
317 * http{}'s cf->ctx was needed while the configuration merging | |
318 * and in postconfiguration process | |
319 */ | |
320 | |
321 *cf = pcf; | |
322 | |
507 | 323 |
2021 | 324 if (ngx_http_init_phase_handlers(cf, cmcf) != NGX_OK) { |
681 | 325 return NGX_CONF_ERROR; |
326 } | |
327 | |
328 | |
238
674f85a4d00f
nginx-0.0.1-2004-01-23-12:26:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
236
diff
changeset
|
329 /* |
455 | 330 * create the lists of ports, addresses and server names |
331 * to quickly find the server core module configuration at run-time | |
238
674f85a4d00f
nginx-0.0.1-2004-01-23-12:26:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
236
diff
changeset
|
332 */ |
54
27b628ef907e
nginx-0.0.1-2003-01-28-18:56:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
45
diff
changeset
|
333 |
593 | 334 if (ngx_array_init(&in_ports, cf->temp_pool, 2, |
335 sizeof(ngx_http_conf_in_port_t)) | |
501 | 336 != NGX_OK) |
455 | 337 { |
338 return NGX_CONF_ERROR; | |
339 } | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
340 |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
341 /* "server" directives */ |
455 | 342 |
98
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
96
diff
changeset
|
343 cscfp = cmcf->servers.elts; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
344 for (s = 0; s < cmcf->servers.nelts; s++) { |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
345 |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
346 /* "listen" directives */ |
455 | 347 |
98
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
96
diff
changeset
|
348 lscf = cscfp[s]->listen.elts; |
91
637625a2acdb
nginx-0.0.1-2003-05-19-20:39:14 import
Igor Sysoev <igor@sysoev.ru>
parents:
90
diff
changeset
|
349 for (l = 0; l < cscfp[s]->listen.nelts; l++) { |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
350 |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
351 /* AF_INET only */ |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
352 |
98
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
96
diff
changeset
|
353 in_port = in_ports.elts; |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
354 for (p = 0; p < in_ports.nelts; p++) { |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
355 |
593 | 356 if (lscf[l].port != in_port[p].port) { |
357 continue; | |
358 } | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
359 |
593 | 360 /* the port is already in the port list */ |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
361 |
593 | 362 in_addr = in_port[p].addrs.elts; |
363 for (a = 0; a < in_port[p].addrs.nelts; a++) { | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
364 |
593 | 365 if (lscf[l].addr != in_addr[a].addr) { |
366 continue; | |
367 } | |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
368 |
593 | 369 /* the address is already in the address list */ |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
370 |
593 | 371 if (ngx_http_add_names(cf, &in_addr[a], cscfp[s]) != NGX_OK) |
372 { | |
373 return NGX_CONF_ERROR; | |
374 } | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
375 |
593 | 376 /* |
377 * check the duplicate "default" server | |
378 * for this address:port | |
379 */ | |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
380 |
593 | 381 if (lscf[l].conf.default_server) { |
455 | 382 |
593 | 383 if (in_addr[a].default_server) { |
384 ngx_log_error(NGX_LOG_ERR, cf->log, 0, | |
1489
56f1ea5baabb
u_char* is enough to keep file name
Igor Sysoev <igor@sysoev.ru>
parents:
1387
diff
changeset
|
385 "the duplicate default server in %s:%ui", |
1910 | 386 lscf[l].file_name, lscf[l].line); |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
387 |
593 | 388 return NGX_CONF_ERROR; |
389 } | |
455 | 390 |
593 | 391 in_addr[a].core_srv_conf = cscfp[s]; |
392 in_addr[a].default_server = 1; | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
393 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
394 |
593 | 395 goto found; |
455 | 396 } |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
397 |
593 | 398 /* |
399 * add the address to the addresses list that | |
400 * bound to this port | |
401 */ | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
402 |
593 | 403 if (ngx_http_add_address(cf, &in_port[p], &lscf[l], cscfp[s]) |
501 | 404 != NGX_OK) |
455 | 405 { |
406 return NGX_CONF_ERROR; | |
407 } | |
593 | 408 |
409 goto found; | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
410 } |
593 | 411 |
412 /* add the port to the in_port list */ | |
413 | |
414 in_port = ngx_array_push(&in_ports); | |
415 if (in_port == NULL) { | |
416 return NGX_CONF_ERROR; | |
417 } | |
418 | |
419 in_port->port = lscf[l].port; | |
420 in_port->addrs.elts = NULL; | |
421 | |
422 if (ngx_http_add_address(cf, in_port, &lscf[l], cscfp[s]) != NGX_OK) | |
423 { | |
424 return NGX_CONF_ERROR; | |
425 } | |
426 | |
427 found: | |
428 | |
429 continue; | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
430 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
431 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
432 |
455 | 433 |
434 /* optimize the lists of ports, addresses and server names */ | |
54
27b628ef907e
nginx-0.0.1-2003-01-28-18:56:37 import
Igor Sysoev <igor@sysoev.ru>
parents:
45
diff
changeset
|
435 |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
436 /* AF_INET only */ |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
437 |
98
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
96
diff
changeset
|
438 in_port = in_ports.elts; |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
439 for (p = 0; p < in_ports.nelts; p++) { |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
440 |
1209
c6c33f81fd79
use stable search where it is required
Igor Sysoev <igor@sysoev.ru>
parents:
751
diff
changeset
|
441 ngx_sort(in_port[p].addrs.elts, (size_t) in_port[p].addrs.nelts, |
c6c33f81fd79
use stable search where it is required
Igor Sysoev <igor@sysoev.ru>
parents:
751
diff
changeset
|
442 sizeof(ngx_http_conf_in_addr_t), ngx_http_cmp_conf_in_addrs); |
523 | 443 |
455 | 444 /* |
445 * check whether all name-based servers have the same configuraiton | |
603 | 446 * as the default server, |
609 | 447 * or some servers disable optimizing the server names |
455 | 448 */ |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
449 |
98
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
96
diff
changeset
|
450 in_addr = in_port[p].addrs.elts; |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
451 for (a = 0; a < in_port[p].addrs.nelts; a++) { |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
452 |
98
c9b243802a17
nginx-0.0.1-2003-05-30-18:27:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
96
diff
changeset
|
453 name = in_addr[a].names.elts; |
603 | 454 for (s = 0; s < in_addr[a].names.nelts; s++) { |
455 | |
456 if (in_addr[a].core_srv_conf != name[s].core_srv_conf | |
613 | 457 || name[s].core_srv_conf->optimize_server_names == 0) |
455 | 458 { |
593 | 459 goto virtual_names; |
477 | 460 } |
461 } | |
462 | |
238
674f85a4d00f
nginx-0.0.1-2004-01-23-12:26:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
236
diff
changeset
|
463 /* |
455 | 464 * if all name-based servers have the same configuration |
603 | 465 * as the default server, |
609 | 466 * and no servers disable optimizing the server names |
455 | 467 * then we do not need to check them at run-time at all |
238
674f85a4d00f
nginx-0.0.1-2004-01-23-12:26:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
236
diff
changeset
|
468 */ |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
469 |
593 | 470 in_addr[a].names.nelts = 0; |
471 | |
472 continue; | |
473 | |
474 virtual_names: | |
475 | |
619 | 476 ngx_memzero(&ha, sizeof(ngx_hash_keys_arrays_t)); |
477 | |
593 | 478 ha.temp_pool = ngx_create_pool(16384, cf->log); |
479 if (ha.temp_pool == NULL) { | |
480 return NGX_CONF_ERROR; | |
477 | 481 } |
482 | |
593 | 483 ha.pool = cf->pool; |
477 | 484 |
593 | 485 if (ngx_hash_keys_array_init(&ha, NGX_HASH_LARGE) != NGX_OK) { |
486 ngx_destroy_pool(ha.temp_pool); | |
487 return NGX_CONF_ERROR; | |
488 } | |
477 | 489 |
1387 | 490 #if (NGX_PCRE) |
491 regex = 0; | |
492 #endif | |
493 | |
593 | 494 name = in_addr[a].names.elts; |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
495 |
593 | 496 for (s = 0; s < in_addr[a].names.nelts; s++) { |
477 | 497 |
1387 | 498 #if (NGX_PCRE) |
499 if (name[s].regex) { | |
500 regex++; | |
501 continue; | |
502 } | |
503 #endif | |
504 | |
593 | 505 rc = ngx_hash_add_key(&ha, &name[s].name, name[s].core_srv_conf, |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
506 NGX_HASH_WILDCARD_KEY); |
593 | 507 |
508 if (rc == NGX_ERROR) { | |
477 | 509 return NGX_CONF_ERROR; |
510 } | |
511 | |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
512 if (rc == NGX_DECLINED) { |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
513 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
514 "invalid server name or wildcard \"%V\" on %s", |
631 | 515 &name[s].name, in_addr[a].listen_conf->addr); |
593 | 516 return NGX_CONF_ERROR; |
477 | 517 } |
518 | |
593 | 519 if (rc == NGX_BUSY) { |
520 ngx_log_error(NGX_LOG_WARN, cf->log, 0, | |
631 | 521 "conflicting server name \"%V\" on %s, ignored", |
522 &name[s].name, in_addr[a].listen_conf->addr); | |
593 | 523 } |
524 } | |
477 | 525 |
593 | 526 hash.key = ngx_hash_key_lc; |
527 hash.max_size = cmcf->server_names_hash_max_size; | |
528 hash.bucket_size = cmcf->server_names_hash_bucket_size; | |
529 hash.name = "server_names_hash"; | |
530 hash.pool = cf->pool; | |
477 | 531 |
593 | 532 if (ha.keys.nelts) { |
533 hash.hash = &in_addr[a].hash; | |
534 hash.temp_pool = NULL; | |
535 | |
536 if (ngx_hash_init(&hash, ha.keys.elts, ha.keys.nelts) != NGX_OK) | |
537 { | |
538 ngx_destroy_pool(ha.temp_pool); | |
539 return NGX_CONF_ERROR; | |
477 | 540 } |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
541 } |
593 | 542 |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
543 if (ha.dns_wc_head.nelts) { |
593 | 544 |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
545 ngx_qsort(ha.dns_wc_head.elts, |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
546 (size_t) ha.dns_wc_head.nelts, |
593 | 547 sizeof(ngx_hash_key_t), |
548 ngx_http_cmp_dns_wildcards); | |
549 | |
550 hash.hash = NULL; | |
551 hash.temp_pool = ha.temp_pool; | |
552 | |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
553 if (ngx_hash_wildcard_init(&hash, ha.dns_wc_head.elts, |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
554 ha.dns_wc_head.nelts) |
593 | 555 != NGX_OK) |
556 { | |
557 ngx_destroy_pool(ha.temp_pool); | |
558 return NGX_CONF_ERROR; | |
559 } | |
560 | |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
561 in_addr[a].wc_head = (ngx_hash_wildcard_t *) hash.hash; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
562 } |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
563 |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
564 if (ha.dns_wc_tail.nelts) { |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
565 |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
566 ngx_qsort(ha.dns_wc_tail.elts, |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
567 (size_t) ha.dns_wc_tail.nelts, |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
568 sizeof(ngx_hash_key_t), |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
569 ngx_http_cmp_dns_wildcards); |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
570 |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
571 hash.hash = NULL; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
572 hash.temp_pool = ha.temp_pool; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
573 |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
574 if (ngx_hash_wildcard_init(&hash, ha.dns_wc_tail.elts, |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
575 ha.dns_wc_tail.nelts) |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
576 != NGX_OK) |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
577 { |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
578 ngx_destroy_pool(ha.temp_pool); |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
579 return NGX_CONF_ERROR; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
580 } |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
581 |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
582 in_addr[a].wc_tail = (ngx_hash_wildcard_t *) hash.hash; |
593 | 583 } |
584 | |
585 ngx_destroy_pool(ha.temp_pool); | |
1387 | 586 |
587 #if (NGX_PCRE) | |
588 | |
589 if (regex == 0) { | |
590 continue; | |
591 } | |
592 | |
593 in_addr[a].nregex = regex; | |
594 in_addr[a].regex = ngx_palloc(cf->pool, | |
595 regex * sizeof(ngx_http_server_name_t)); | |
596 | |
597 if (in_addr[a].regex == NULL) { | |
598 return NGX_CONF_ERROR; | |
599 } | |
600 | |
601 for (i = 0, s = 0; s < in_addr[a].names.nelts; s++) { | |
602 if (name[s].regex) { | |
603 in_addr[a].regex[i++] = name[s]; | |
604 } | |
605 } | |
606 #endif | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
607 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
608 |
593 | 609 in_addr = in_port[p].addrs.elts; |
610 last = in_port[p].addrs.nelts; | |
611 | |
238
674f85a4d00f
nginx-0.0.1-2004-01-23-12:26:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
236
diff
changeset
|
612 /* |
477 | 613 * if there is the binding to the "*:port" then we need to bind() |
614 * to the "*:port" only and ignore the other bindings | |
238
674f85a4d00f
nginx-0.0.1-2004-01-23-12:26:18 import
Igor Sysoev <igor@sysoev.ru>
parents:
236
diff
changeset
|
615 */ |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
616 |
593 | 617 if (in_addr[last - 1].addr == INADDR_ANY) { |
618 in_addr[last - 1].bind = 1; | |
619 bind_all = 0; | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
620 |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
621 } else { |
593 | 622 bind_all = 1; |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
623 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
624 |
593 | 625 for (a = 0; a < last; /* void */ ) { |
626 | |
627 if (!bind_all && !in_addr[a].bind) { | |
628 a++; | |
629 continue; | |
630 } | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
631 |
417
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
416
diff
changeset
|
632 ls = ngx_listening_inet_stream_socket(cf, in_addr[a].addr, |
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
416
diff
changeset
|
633 in_port[p].port); |
0526206251f6
nginx-0.0.10-2004-09-07-19:29:22 import
Igor Sysoev <igor@sysoev.ru>
parents:
416
diff
changeset
|
634 if (ls == NULL) { |
416
b9bd635011de
nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
411
diff
changeset
|
635 return NGX_CONF_ERROR; |
b9bd635011de
nginx-0.0.10-2004-09-06-22:45:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
411
diff
changeset
|
636 } |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
637 |
419
47709bff4468
nginx-0.0.10-2004-09-09-19:40:48 import
Igor Sysoev <igor@sysoev.ru>
parents:
417
diff
changeset
|
638 ls->addr_ntop = 1; |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
639 |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
640 ls->handler = ngx_http_init_connection; |
119
cd54bcbaf3b5
nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
116
diff
changeset
|
641 |
103
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
642 cscf = in_addr[a].core_srv_conf; |
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
643 ls->pool_size = cscf->connection_pool_size; |
523 | 644 ls->post_accept_timeout = cscf->client_header_timeout; |
103
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
645 |
119
cd54bcbaf3b5
nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
116
diff
changeset
|
646 clcf = cscf->ctx->loc_conf[ngx_http_core_module.ctx_index]; |
543 | 647 |
648 ls->log = *clcf->err_log; | |
649 ls->log.data = &ls->addr_text; | |
650 ls->log.handler = ngx_accept_log_error; | |
119
cd54bcbaf3b5
nginx-0.0.1-2003-07-21-01:15:59 import
Igor Sysoev <igor@sysoev.ru>
parents:
116
diff
changeset
|
651 |
461 | 652 #if (NGX_WIN32) |
1704
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1489
diff
changeset
|
653 { |
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1489
diff
changeset
|
654 ngx_iocp_conf_t *iocpcf; |
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1489
diff
changeset
|
655 |
114
ac69ab96328d
nginx-0.0.1-2003-07-07-10:11:50 import
Igor Sysoev <igor@sysoev.ru>
parents:
113
diff
changeset
|
656 iocpcf = ngx_event_get_conf(cf->cycle->conf_ctx, ngx_iocp_module); |
103
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
657 if (iocpcf->acceptex_read) { |
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
658 ls->post_accept_buffer_size = cscf->client_header_buffer_size; |
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
659 } |
1704
e584e946e198
move condition declarations inside blocks where they are used
Igor Sysoev <igor@sysoev.ru>
parents:
1489
diff
changeset
|
660 } |
103
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
661 #endif |
6dfda4cf5200
nginx-0.0.1-2003-06-11-19:28:34 import
Igor Sysoev <igor@sysoev.ru>
parents:
100
diff
changeset
|
662 |
593 | 663 ls->backlog = in_addr[a].listen_conf->backlog; |
664 ls->rcvbuf = in_addr[a].listen_conf->rcvbuf; | |
665 ls->sndbuf = in_addr[a].listen_conf->sndbuf; | |
523 | 666 |
667 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER) | |
593 | 668 ls->accept_filter = in_addr[a].listen_conf->accept_filter; |
523 | 669 #endif |
670 | |
671 #if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT) | |
593 | 672 ls->deferred_accept = in_addr[a].listen_conf->deferred_accept; |
523 | 673 #endif |
674 | |
593 | 675 hip = ngx_palloc(cf->pool, sizeof(ngx_http_in_port_t)); |
676 if (hip == NULL) { | |
677 return NGX_CONF_ERROR; | |
678 } | |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
679 |
593 | 680 hip->port = in_port[p].port; |
681 | |
682 hip->port_text.data = ngx_palloc(cf->pool, 7); | |
683 if (hip->port_text.data == NULL) { | |
684 return NGX_CONF_ERROR; | |
685 } | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
686 |
593 | 687 ls->servers = hip; |
688 | |
689 hip->port_text.len = ngx_sprintf(hip->port_text.data, ":%d", | |
690 hip->port) | |
691 - hip->port_text.data; | |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
692 |
593 | 693 in_addr = in_port[p].addrs.elts; |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
694 |
593 | 695 if (in_addr[a].bind && in_addr[a].addr != INADDR_ANY) { |
696 hip->naddrs = 1; | |
697 done = 0; | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
698 |
593 | 699 } else if (in_port[p].addrs.nelts > 1 |
700 && in_addr[last - 1].addr == INADDR_ANY) | |
701 { | |
702 hip->naddrs = last; | |
703 done = 1; | |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
704 |
593 | 705 } else { |
706 hip->naddrs = 1; | |
707 done = 0; | |
708 } | |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
709 |
593 | 710 #if 0 |
711 ngx_log_error(NGX_LOG_ALERT, cf->log, 0, | |
712 "%ui: %V %d %ui %ui", | |
713 a, &ls->addr_text, in_addr[a].bind, | |
714 hip->naddrs, last); | |
715 #endif | |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
716 |
593 | 717 hip->addrs = ngx_pcalloc(cf->pool, |
718 hip->naddrs * sizeof(ngx_http_in_addr_t)); | |
719 if (hip->addrs == NULL) { | |
720 return NGX_CONF_ERROR; | |
721 } | |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
722 |
593 | 723 for (i = 0; i < hip->naddrs; i++) { |
724 hip->addrs[i].addr = in_addr[i].addr; | |
725 hip->addrs[i].core_srv_conf = in_addr[i].core_srv_conf; | |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
726 |
593 | 727 if (in_addr[i].hash.buckets == NULL |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
728 && (in_addr[i].wc_head == NULL |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
729 || in_addr[i].wc_head->hash.buckets == NULL) |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
730 && (in_addr[i].wc_head == NULL |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
731 || in_addr[i].wc_head->hash.buckets == NULL)) |
593 | 732 { |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
733 continue; |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
734 } |
593 | 735 |
736 vn = ngx_palloc(cf->pool, sizeof(ngx_http_virtual_names_t)); | |
737 if (vn == NULL) { | |
738 return NGX_CONF_ERROR; | |
739 } | |
740 hip->addrs[i].virtual_names = vn; | |
741 | |
1387 | 742 vn->names.hash = in_addr[i].hash; |
743 vn->names.wc_head = in_addr[i].wc_head; | |
744 vn->names.wc_tail = in_addr[i].wc_tail; | |
745 #if (NGX_PCRE) | |
746 vn->nregex = in_addr[i].nregex; | |
747 vn->regex = in_addr[i].regex; | |
748 #endif | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
749 } |
89
29bf798b583f
nginx-0.0.1-2003-05-15-19:42:53 import
Igor Sysoev <igor@sysoev.ru>
parents:
88
diff
changeset
|
750 |
593 | 751 if (done) { |
752 break; | |
753 } | |
754 | |
755 in_addr++; | |
756 in_port[p].addrs.elts = in_addr; | |
757 last--; | |
758 | |
759 a = 0; | |
44
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
760 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
761 } |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
762 |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
763 return NGX_CONF_OK; |
0e81ac0bb3e2
nginx-0.0.1-2003-01-09-08:36:00 import
Igor Sysoev <igor@sysoev.ru>
parents:
41
diff
changeset
|
764 } |
396
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
765 |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
766 |
2021 | 767 static ngx_int_t |
768 ngx_http_init_phases(ngx_conf_t *cf, ngx_http_core_main_conf_t *cmcf) | |
769 { | |
770 if (ngx_array_init(&cmcf->phases[NGX_HTTP_POST_READ_PHASE].handlers, | |
771 cf->pool, 1, sizeof(ngx_http_handler_pt)) | |
772 != NGX_OK) | |
773 { | |
774 return NGX_ERROR; | |
775 } | |
776 | |
777 if (ngx_array_init(&cmcf->phases[NGX_HTTP_SERVER_REWRITE_PHASE].handlers, | |
778 cf->pool, 1, sizeof(ngx_http_handler_pt)) | |
779 != NGX_OK) | |
780 { | |
781 return NGX_ERROR; | |
782 } | |
783 | |
784 if (ngx_array_init(&cmcf->phases[NGX_HTTP_REWRITE_PHASE].handlers, | |
785 cf->pool, 1, sizeof(ngx_http_handler_pt)) | |
786 != NGX_OK) | |
787 { | |
788 return NGX_ERROR; | |
789 } | |
790 | |
791 if (ngx_array_init(&cmcf->phases[NGX_HTTP_PREACCESS_PHASE].handlers, | |
792 cf->pool, 1, sizeof(ngx_http_handler_pt)) | |
793 != NGX_OK) | |
794 { | |
795 return NGX_ERROR; | |
796 } | |
797 | |
798 if (ngx_array_init(&cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers, | |
799 cf->pool, 2, sizeof(ngx_http_handler_pt)) | |
800 != NGX_OK) | |
801 { | |
802 return NGX_ERROR; | |
803 } | |
804 | |
805 if (ngx_array_init(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers, | |
806 cf->pool, 4, sizeof(ngx_http_handler_pt)) | |
807 != NGX_OK) | |
808 { | |
809 return NGX_ERROR; | |
810 } | |
811 | |
812 if (ngx_array_init(&cmcf->phases[NGX_HTTP_LOG_PHASE].handlers, | |
813 cf->pool, 1, sizeof(ngx_http_handler_pt)) | |
814 != NGX_OK) | |
815 { | |
816 return NGX_ERROR; | |
817 } | |
818 | |
819 return NGX_OK; | |
820 } | |
821 | |
822 | |
823 static ngx_int_t | |
824 ngx_http_init_headers_in_hash(ngx_conf_t *cf, ngx_http_core_main_conf_t *cmcf) | |
825 { | |
826 ngx_array_t headers_in; | |
827 ngx_hash_key_t *hk; | |
828 ngx_hash_init_t hash; | |
829 ngx_http_header_t *header; | |
830 | |
831 if (ngx_array_init(&headers_in, cf->temp_pool, 32, sizeof(ngx_hash_key_t)) | |
832 != NGX_OK) | |
833 { | |
834 return NGX_ERROR; | |
835 } | |
836 | |
837 for (header = ngx_http_headers_in; header->name.len; header++) { | |
838 hk = ngx_array_push(&headers_in); | |
839 if (hk == NULL) { | |
840 return NGX_ERROR; | |
841 } | |
842 | |
843 hk->key = header->name; | |
844 hk->key_hash = ngx_hash_key_lc(header->name.data, header->name.len); | |
845 hk->value = header; | |
846 } | |
847 | |
848 hash.hash = &cmcf->headers_in_hash; | |
849 hash.key = ngx_hash_key_lc; | |
850 hash.max_size = 512; | |
851 hash.bucket_size = ngx_align(64, ngx_cacheline_size); | |
852 hash.name = "headers_in_hash"; | |
853 hash.pool = cf->pool; | |
854 hash.temp_pool = NULL; | |
855 | |
856 if (ngx_hash_init(&hash, headers_in.elts, headers_in.nelts) != NGX_OK) { | |
857 return NGX_ERROR; | |
858 } | |
859 | |
860 return NGX_OK; | |
861 } | |
862 | |
863 | |
864 static ngx_int_t | |
865 ngx_http_init_phase_handlers(ngx_conf_t *cf, ngx_http_core_main_conf_t *cmcf) | |
866 { | |
867 ngx_int_t j; | |
868 ngx_uint_t i, n; | |
869 ngx_uint_t find_config_index, use_rewrite, use_access; | |
870 ngx_http_handler_pt *h; | |
871 ngx_http_phase_handler_t *ph; | |
872 ngx_http_phase_handler_pt checker; | |
873 | |
874 cmcf->phase_engine.server_rewrite_index = (ngx_uint_t) -1; | |
875 cmcf->phase_engine.location_rewrite_index = (ngx_uint_t) -1; | |
876 find_config_index = 0; | |
877 use_rewrite = cmcf->phases[NGX_HTTP_REWRITE_PHASE].handlers.nelts ? 1 : 0; | |
878 use_access = cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers.nelts ? 1 : 0; | |
879 | |
880 n = use_rewrite + use_access + 1; /* find config phase */ | |
881 | |
882 for (i = 0; i < NGX_HTTP_LOG_PHASE; i++) { | |
883 n += cmcf->phases[i].handlers.nelts; | |
884 } | |
885 | |
886 ph = ngx_pcalloc(cf->pool, | |
887 n * sizeof(ngx_http_phase_handler_t) + sizeof(void *)); | |
888 if (ph == NULL) { | |
889 return NGX_ERROR; | |
890 } | |
891 | |
892 cmcf->phase_engine.handlers = ph; | |
893 n = 0; | |
894 | |
895 for (i = 0; i < NGX_HTTP_LOG_PHASE; i++) { | |
896 h = cmcf->phases[i].handlers.elts; | |
897 | |
898 switch (i) { | |
899 | |
900 case NGX_HTTP_SERVER_REWRITE_PHASE: | |
901 if (cmcf->phase_engine.server_rewrite_index == (ngx_uint_t) -1) { | |
902 cmcf->phase_engine.server_rewrite_index = n; | |
903 } | |
904 checker = ngx_http_core_generic_phase; | |
905 | |
906 break; | |
907 | |
908 case NGX_HTTP_FIND_CONFIG_PHASE: | |
909 find_config_index = n; | |
910 | |
911 ph->checker = ngx_http_core_find_config_phase; | |
912 n++; | |
913 ph++; | |
914 | |
915 continue; | |
916 | |
917 case NGX_HTTP_REWRITE_PHASE: | |
918 if (cmcf->phase_engine.location_rewrite_index == (ngx_uint_t) -1) { | |
919 cmcf->phase_engine.location_rewrite_index = n; | |
920 } | |
921 checker = ngx_http_core_generic_phase; | |
922 | |
923 break; | |
924 | |
925 case NGX_HTTP_POST_REWRITE_PHASE: | |
926 if (use_rewrite) { | |
927 ph->checker = ngx_http_core_post_rewrite_phase; | |
928 ph->next = find_config_index; | |
929 n++; | |
930 ph++; | |
931 } | |
932 | |
933 continue; | |
934 | |
935 case NGX_HTTP_ACCESS_PHASE: | |
936 checker = ngx_http_core_access_phase; | |
937 n++; | |
938 break; | |
939 | |
940 case NGX_HTTP_POST_ACCESS_PHASE: | |
941 if (use_access) { | |
942 ph->checker = ngx_http_core_post_access_phase; | |
943 ph->next = n; | |
944 ph++; | |
945 } | |
946 | |
947 continue; | |
948 | |
949 case NGX_HTTP_CONTENT_PHASE: | |
950 checker = ngx_http_core_content_phase; | |
951 break; | |
952 | |
953 default: | |
954 checker = ngx_http_core_generic_phase; | |
955 } | |
956 | |
957 n += cmcf->phases[i].handlers.nelts; | |
958 | |
959 for (j = cmcf->phases[i].handlers.nelts - 1; j >=0; j--) { | |
960 ph->checker = checker; | |
961 ph->handler = h[j]; | |
962 ph->next = n; | |
963 ph++; | |
964 } | |
965 } | |
966 | |
967 return NGX_OK; | |
968 } | |
969 | |
970 | |
455 | 971 /* |
972 * add the server address, the server names and the server core module | |
973 * configurations to the port (in_port) | |
974 */ | |
975 | |
499 | 976 static ngx_int_t |
593 | 977 ngx_http_add_address(ngx_conf_t *cf, ngx_http_conf_in_port_t *in_port, |
499 | 978 ngx_http_listen_t *lscf, ngx_http_core_srv_conf_t *cscf) |
455 | 979 { |
593 | 980 ngx_http_conf_in_addr_t *in_addr; |
455 | 981 |
982 if (in_port->addrs.elts == NULL) { | |
593 | 983 if (ngx_array_init(&in_port->addrs, cf->temp_pool, 4, |
1385 | 984 sizeof(ngx_http_conf_in_addr_t)) |
985 != NGX_OK) | |
455 | 986 { |
987 return NGX_ERROR; | |
988 } | |
989 } | |
990 | |
501 | 991 in_addr = ngx_array_push(&in_port->addrs); |
992 if (in_addr == NULL) { | |
455 | 993 return NGX_ERROR; |
994 } | |
995 | |
996 in_addr->addr = lscf->addr; | |
593 | 997 in_addr->hash.buckets = NULL; |
998 in_addr->hash.size = 0; | |
1253
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
999 in_addr->wc_head = NULL; |
8ef04207c84f
the "www.example.*" wildcard hash support
Igor Sysoev <igor@sysoev.ru>
parents:
1236
diff
changeset
|
1000 in_addr->wc_tail = NULL; |
455 | 1001 in_addr->names.elts = NULL; |
1387 | 1002 #if (NGX_PCRE) |
1003 in_addr->nregex = 0; | |
1004 in_addr->regex = NULL; | |
1005 #endif | |
455 | 1006 in_addr->core_srv_conf = cscf; |
593 | 1007 in_addr->default_server = lscf->conf.default_server; |
1008 in_addr->bind = lscf->conf.bind; | |
1009 in_addr->listen_conf = &lscf->conf; | |
455 | 1010 |
1011 #if (NGX_DEBUG) | |
1012 { | |
1013 u_char text[20]; | |
1014 ngx_inet_ntop(AF_INET, &in_addr->addr, text, 20); | |
1015 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, cf->log, 0, "address: %s:%d", | |
1016 text, in_port->port); | |
1017 } | |
1018 #endif | |
1019 | |
1020 return ngx_http_add_names(cf, in_addr, cscf); | |
1021 } | |
1022 | |
1023 | |
1024 /* | |
1025 * add the server names and the server core module | |
1026 * configurations to the address:port (in_addr) | |
1027 */ | |
1028 | |
499 | 1029 static ngx_int_t |
593 | 1030 ngx_http_add_names(ngx_conf_t *cf, ngx_http_conf_in_addr_t *in_addr, |
499 | 1031 ngx_http_core_srv_conf_t *cscf) |
455 | 1032 { |
477 | 1033 ngx_uint_t i, n; |
455 | 1034 ngx_http_server_name_t *server_names, *name; |
1035 | |
1036 if (in_addr->names.elts == NULL) { | |
593 | 1037 if (ngx_array_init(&in_addr->names, cf->temp_pool, 4, |
1385 | 1038 sizeof(ngx_http_server_name_t)) |
1039 != NGX_OK) | |
477 | 1040 { |
1041 return NGX_ERROR; | |
1042 } | |
1043 } | |
1044 | |
455 | 1045 server_names = cscf->server_names.elts; |
1387 | 1046 |
455 | 1047 for (i = 0; i < cscf->server_names.nelts; i++) { |
1048 | |
477 | 1049 for (n = 0; n < server_names[i].name.len; n++) { |
1050 server_names[i].name.data[n] = | |
1051 ngx_tolower(server_names[i].name.data[n]); | |
1052 } | |
1053 | |
455 | 1054 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, cf->log, 0, |
461 | 1055 "name: %V", &server_names[i].name); |
455 | 1056 |
593 | 1057 name = ngx_array_push(&in_addr->names); |
501 | 1058 if (name == NULL) { |
455 | 1059 return NGX_ERROR; |
1060 } | |
1061 | |
1062 *name = server_names[i]; | |
1063 } | |
1064 | |
1065 return NGX_OK; | |
1066 } | |
1067 | |
1068 | |
499 | 1069 static char * |
1070 ngx_http_merge_locations(ngx_conf_t *cf, ngx_array_t *locations, | |
1071 void **loc_conf, ngx_http_module_t *module, ngx_uint_t ctx_index) | |
396
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1072 { |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1073 char *rv; |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1074 ngx_uint_t i; |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1075 ngx_http_core_loc_conf_t **clcfp; |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1076 |
593 | 1077 clcfp = locations->elts; |
396
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1078 |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1079 for (i = 0; i < locations->nelts; i++) { |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1080 rv = module->merge_loc_conf(cf, loc_conf[ctx_index], |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1081 clcfp[i]->loc_conf[ctx_index]); |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1082 if (rv != NGX_CONF_OK) { |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1083 return rv; |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1084 } |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1085 |
1236
5e4d3b5d7ad0
use pointer to an array instead of array for inclusive locations inside location
Igor Sysoev <igor@sysoev.ru>
parents:
1209
diff
changeset
|
1086 if (clcfp[i]->locations == NULL) { |
5e4d3b5d7ad0
use pointer to an array instead of array for inclusive locations inside location
Igor Sysoev <igor@sysoev.ru>
parents:
1209
diff
changeset
|
1087 continue; |
5e4d3b5d7ad0
use pointer to an array instead of array for inclusive locations inside location
Igor Sysoev <igor@sysoev.ru>
parents:
1209
diff
changeset
|
1088 } |
5e4d3b5d7ad0
use pointer to an array instead of array for inclusive locations inside location
Igor Sysoev <igor@sysoev.ru>
parents:
1209
diff
changeset
|
1089 |
5e4d3b5d7ad0
use pointer to an array instead of array for inclusive locations inside location
Igor Sysoev <igor@sysoev.ru>
parents:
1209
diff
changeset
|
1090 rv = ngx_http_merge_locations(cf, clcfp[i]->locations, |
396
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1091 clcfp[i]->loc_conf, module, ctx_index); |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1092 if (rv != NGX_CONF_OK) { |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1093 return rv; |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1094 } |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1095 } |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1096 |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1097 return NGX_CONF_OK; |
6f3b20c1ac50
nginx-0.0.7-2004-07-18-23:11:20 import
Igor Sysoev <igor@sysoev.ru>
parents:
368
diff
changeset
|
1098 } |
593 | 1099 |
1100 | |
1956
cb8c0c8e0c27
use ngx_int_t in ngx_sort() callback
Igor Sysoev <igor@sysoev.ru>
parents:
1910
diff
changeset
|
1101 static ngx_int_t |
593 | 1102 ngx_http_cmp_conf_in_addrs(const void *one, const void *two) |
1103 { | |
1104 ngx_http_conf_in_addr_t *first, *second; | |
1105 | |
1106 first = (ngx_http_conf_in_addr_t *) one; | |
1107 second = (ngx_http_conf_in_addr_t *) two; | |
1108 | |
1109 if (first->addr == INADDR_ANY) { | |
1110 /* the INADDR_ANY must be the last resort, shift it to the end */ | |
1111 return 1; | |
1112 } | |
1113 | |
1114 if (first->bind && !second->bind) { | |
1115 /* shift explicit bind()ed addresses to the start */ | |
1116 return -1; | |
1117 } | |
1118 | |
1119 if (!first->bind && second->bind) { | |
1120 /* shift explicit bind()ed addresses to the start */ | |
1121 return 1; | |
1122 } | |
1123 | |
1124 /* do not sort by default */ | |
1125 | |
1126 return 0; | |
1127 } | |
1128 | |
1129 | |
1130 static int ngx_libc_cdecl | |
1131 ngx_http_cmp_dns_wildcards(const void *one, const void *two) | |
1132 { | |
1133 ngx_hash_key_t *first, *second; | |
1134 | |
1135 first = (ngx_hash_key_t *) one; | |
1136 second = (ngx_hash_key_t *) two; | |
1137 | |
1138 return ngx_strcmp(first->key.data, second->key.data); | |
1139 } |