annotate src/http/ngx_http.c @ 196:8759b346e431 NGINX_0_3_45

nginx 0.3.45 *) Feature: the "ssl_verify_client", "ssl_verify_depth", and "ssl_client_certificate" directives. *) Change: the $request_method variable now returns the main request method. *) Change: the ° symbol codes were changed in koi-win conversion table. *) Feature: the euro É N symbols were added to koi-win conversion table. *) Bugfix: if nginx distributed the requests among several backends and some backend failed, then requests intended for this backend was directed to one live backend only instead of being distributed among the rest.
author Igor Sysoev <http://sysoev.ru>
date Sat, 06 May 2006 00:00:00 +0400
parents 3689cd4e3228
children e6da4931e0e0
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7 #include <ngx_config.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9 #include <ngx_event.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10 #include <ngx_http.h>
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13 static char *ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf);
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
14 static ngx_int_t ngx_http_add_address(ngx_conf_t *cf,
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
15 ngx_http_conf_in_port_t *in_port, ngx_http_listen_t *lscf,
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
16 ngx_http_core_srv_conf_t *cscf);
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
17 static ngx_int_t ngx_http_add_names(ngx_conf_t *cf,
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
18 ngx_http_conf_in_addr_t *in_addr, ngx_http_core_srv_conf_t *cscf);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19 static char *ngx_http_merge_locations(ngx_conf_t *cf,
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
20 ngx_array_t *locations, void **loc_conf, ngx_http_module_t *module,
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
21 ngx_uint_t ctx_index);
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
22 static int ngx_libc_cdecl ngx_http_cmp_conf_in_addrs(const void *one,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
23 const void *two);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
24 static int ngx_libc_cdecl ngx_http_cmp_dns_wildcards(const void *one,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
25 const void *two);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
27 ngx_uint_t ngx_http_max_module;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
28
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
29 ngx_uint_t ngx_http_total_requests;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
30 uint64_t ngx_http_total_sent;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
31
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
32
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
33 ngx_int_t (*ngx_http_top_header_filter) (ngx_http_request_t *r);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34 ngx_int_t (*ngx_http_top_body_filter) (ngx_http_request_t *r, ngx_chain_t *ch);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 static ngx_command_t ngx_http_commands[] = {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
39 { ngx_string("http"),
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
40 NGX_MAIN_CONF|NGX_CONF_BLOCK|NGX_CONF_NOARGS,
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
41 ngx_http_block,
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
42 0,
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
43 0,
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
44 NULL },
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
46 ngx_null_command
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47 };
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
49
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
50 static ngx_core_module_t ngx_http_module_ctx = {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51 ngx_string("http"),
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
52 NULL,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
53 NULL
126
df17fbafec8f nginx 0.3.10
Igor Sysoev <http://sysoev.ru>
parents: 122
diff changeset
54 };
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
55
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
56
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57 ngx_module_t ngx_http_module = {
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
58 NGX_MODULE_V1,
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
59 &ngx_http_module_ctx, /* module context */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
60 ngx_http_commands, /* module directives */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
61 NGX_CORE_MODULE, /* module type */
90
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
62 NULL, /* init master */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
63 NULL, /* init module */
90
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
64 NULL, /* init process */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
65 NULL, /* init thread */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
66 NULL, /* exit thread */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
67 NULL, /* exit process */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
68 NULL, /* exit master */
71c46860eb55 nginx 0.1.45
Igor Sysoev <http://sysoev.ru>
parents: 72
diff changeset
69 NGX_MODULE_V1_PADDING
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
70 };
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
71
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
72
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
73 static char *
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
74 ngx_http_block(ngx_conf_t *cf, ngx_command_t *cmd, void *conf)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
75 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76 char *rv;
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
77 u_char ch;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
78 ngx_int_t rc;
152
396dbbc06dd7 nginx 0.3.23
Igor Sysoev <http://sysoev.ru>
parents: 144
diff changeset
79 ngx_uint_t mi, m, s, l, p, a, i;
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
80 ngx_uint_t last, bind_all, done;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
81 ngx_conf_t pcf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
82 ngx_array_t in_ports;
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
83 ngx_hash_init_t hash;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
84 ngx_listening_t *ls;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
85 ngx_http_listen_t *lscf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
86 ngx_http_module_t *module;
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
87 ngx_http_in_port_t *hip;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
88 ngx_http_handler_pt *h;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
89 ngx_http_conf_ctx_t *ctx;
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
90 ngx_http_conf_in_port_t *in_port;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
91 ngx_http_conf_in_addr_t *in_addr;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
92 ngx_hash_keys_arrays_t ha;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
93 ngx_http_server_name_t *name;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
94 ngx_http_virtual_names_t *vn;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
95 ngx_http_core_srv_conf_t **cscfp, *cscf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
96 ngx_http_core_loc_conf_t *clcf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
97 ngx_http_core_main_conf_t *cmcf;
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
98 #if (NGX_WIN32)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
99 ngx_iocp_conf_t *iocpcf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
100 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
101
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
102 /* the main http context */
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
103
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
104 ctx = ngx_pcalloc(cf->pool, sizeof(ngx_http_conf_ctx_t));
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
105 if (ctx == NULL) {
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
106 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
107 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
108
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
109 *(ngx_http_conf_ctx_t **) conf = ctx;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
110
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
111
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
112 /* count the number of the http modules and set up their indices */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
113
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
114 ngx_http_max_module = 0;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
115 for (m = 0; ngx_modules[m]; m++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
116 if (ngx_modules[m]->type != NGX_HTTP_MODULE) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
117 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
118 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
119
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
120 ngx_modules[m]->ctx_index = ngx_http_max_module++;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
121 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
122
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
123
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
124 /* the http main_conf context, it is the same in the all http contexts */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
125
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
126 ctx->main_conf = ngx_pcalloc(cf->pool,
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
127 sizeof(void *) * ngx_http_max_module);
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
128 if (ctx->main_conf == NULL) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
129 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
130 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
131
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
132
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
133 /*
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
134 * the http null srv_conf context, it is used to merge
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
135 * the server{}s' srv_conf's
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
136 */
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
137
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
138 ctx->srv_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module);
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
139 if (ctx->srv_conf == NULL) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
140 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
141 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
142
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
143
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
144 /*
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
145 * the http null loc_conf context, it is used to merge
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
146 * the server{}s' loc_conf's
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
147 */
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
148
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
149 ctx->loc_conf = ngx_pcalloc(cf->pool, sizeof(void *) * ngx_http_max_module);
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
150 if (ctx->loc_conf == NULL) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
151 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
152 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
153
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
154
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
155 /*
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
156 * create the main_conf's, the null srv_conf's, and the null loc_conf's
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
157 * of the all http modules
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
158 */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
159
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
160 for (m = 0; ngx_modules[m]; m++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
161 if (ngx_modules[m]->type != NGX_HTTP_MODULE) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
162 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
163 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
164
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
165 module = ngx_modules[m]->ctx;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
166 mi = ngx_modules[m]->ctx_index;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
167
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
168 if (module->create_main_conf) {
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
169 ctx->main_conf[mi] = module->create_main_conf(cf);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
170 if (ctx->main_conf[mi] == NULL) {
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
171 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
172 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
173 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
174
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
175 if (module->create_srv_conf) {
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
176 ctx->srv_conf[mi] = module->create_srv_conf(cf);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
177 if (ctx->srv_conf[mi] == NULL) {
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
178 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
179 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
180 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
181
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
182 if (module->create_loc_conf) {
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
183 ctx->loc_conf[mi] = module->create_loc_conf(cf);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
184 if (ctx->loc_conf[mi] == NULL) {
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
185 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
186 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
187 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
188 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
189
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
190 pcf = *cf;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
191 cf->ctx = ctx;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
192
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
193 for (m = 0; ngx_modules[m]; m++) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
194 if (ngx_modules[m]->type != NGX_HTTP_MODULE) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
195 continue;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
196 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
197
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
198 module = ngx_modules[m]->ctx;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
199 mi = ngx_modules[m]->ctx_index;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
200
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
201 if (module->preconfiguration) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
202 if (module->preconfiguration(cf) != NGX_OK) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
203 return NGX_CONF_ERROR;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
204 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
205 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
206 }
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
207
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
208 /* parse inside the http{} block */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
209
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
210 cf->module_type = NGX_HTTP_MODULE;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
211 cf->cmd_type = NGX_HTTP_MAIN_CONF;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
212 rv = ngx_conf_parse(cf, NULL);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
213
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
214 if (rv != NGX_CONF_OK) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
215 *cf = pcf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
216 return rv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
217 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
218
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
219 /*
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
220 * init http{} main_conf's, merge the server{}s' srv_conf's
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
221 * and its location{}s' loc_conf's
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
222 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
223
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
224 cmcf = ctx->main_conf[ngx_http_core_module.ctx_index];
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
225 cscfp = cmcf->servers.elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
226
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
227 for (m = 0; ngx_modules[m]; m++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
228 if (ngx_modules[m]->type != NGX_HTTP_MODULE) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
229 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
230 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
231
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
232 module = ngx_modules[m]->ctx;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
233 mi = ngx_modules[m]->ctx_index;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
234
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
235 /* init http{} main_conf's */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
236
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
237 if (module->init_main_conf) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
238 rv = module->init_main_conf(cf, ctx->main_conf[mi]);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
239 if (rv != NGX_CONF_OK) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
240 *cf = pcf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
241 return rv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
242 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
243 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
244
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
245 for (s = 0; s < cmcf->servers.nelts; s++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
246
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
247 /* merge the server{}s' srv_conf's */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
248
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
249 if (module->merge_srv_conf) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
250 rv = module->merge_srv_conf(cf,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
251 ctx->srv_conf[mi],
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
252 cscfp[s]->ctx->srv_conf[mi]);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
253 if (rv != NGX_CONF_OK) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
254 *cf = pcf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
255 return rv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
256 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
257 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
258
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
259 if (module->merge_loc_conf) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
260
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
261 /* merge the server{}'s loc_conf */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
262
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
263 rv = module->merge_loc_conf(cf,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
264 ctx->loc_conf[mi],
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
265 cscfp[s]->ctx->loc_conf[mi]);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
266 if (rv != NGX_CONF_OK) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
267 *cf = pcf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
268 return rv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
269 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
270
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
271 /* merge the locations{}' loc_conf's */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
272
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
273 rv = ngx_http_merge_locations(cf, &cscfp[s]->locations,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
274 cscfp[s]->ctx->loc_conf,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
275 module, mi);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
276 if (rv != NGX_CONF_OK) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
277 *cf = pcf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
278 return rv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
279 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
280 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
281 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
282 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
283
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
284
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
285 /* init lists of the handlers */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
286
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
287 if (ngx_array_init(&cmcf->phases[NGX_HTTP_POST_READ_PHASE].handlers,
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
288 cf->pool, 1, sizeof(ngx_http_handler_pt))
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
289 != NGX_OK)
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
290 {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
291 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
292 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
293
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
294 cmcf->phases[NGX_HTTP_POST_READ_PHASE].type = NGX_OK;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
295
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
296
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
297 if (ngx_array_init(&cmcf->phases[NGX_HTTP_SERVER_REWRITE_PHASE].handlers,
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
298 cf->pool, 1, sizeof(ngx_http_handler_pt))
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
299 != NGX_OK)
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
300 {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
301 return NGX_CONF_ERROR;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
302 }
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
303
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
304 cmcf->phases[NGX_HTTP_SERVER_REWRITE_PHASE].type = NGX_OK;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
305
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
306
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
307 /* the special find config phase for a single handler */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
308
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
309 if (ngx_array_init(&cmcf->phases[NGX_HTTP_FIND_CONFIG_PHASE].handlers,
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
310 cf->pool, 1, sizeof(ngx_http_handler_pt))
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
311 != NGX_OK)
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
312 {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
313 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
314 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
315
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
316 cmcf->phases[NGX_HTTP_FIND_CONFIG_PHASE].type = NGX_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
317
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
318 h = ngx_array_push(&cmcf->phases[NGX_HTTP_FIND_CONFIG_PHASE].handlers);
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
319 if (h == NULL) {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
320 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
321 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
322
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
323 *h = ngx_http_find_location_config;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
324
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
325
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
326 if (ngx_array_init(&cmcf->phases[NGX_HTTP_REWRITE_PHASE].handlers,
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
327 cf->pool, 1, sizeof(ngx_http_handler_pt))
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
328 != NGX_OK)
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
329 {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
330 return NGX_CONF_ERROR;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
331 }
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
332
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
333 cmcf->phases[NGX_HTTP_REWRITE_PHASE].type = NGX_OK;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
334
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
335
130
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
336 if (ngx_array_init(&cmcf->phases[NGX_HTTP_PREACCESS_PHASE].handlers,
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
337 cf->pool, 1, sizeof(ngx_http_handler_pt))
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
338 != NGX_OK)
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
339 {
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
340 return NGX_CONF_ERROR;
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
341 }
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
342
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
343 cmcf->phases[NGX_HTTP_PREACCESS_PHASE].type = NGX_OK;
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
344
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
345
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
346 if (ngx_array_init(&cmcf->phases[NGX_HTTP_ACCESS_PHASE].handlers,
130
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
347 cf->pool, 2, sizeof(ngx_http_handler_pt))
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
348 != NGX_OK)
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
349 {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
350 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
351 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
352
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
353 cmcf->phases[NGX_HTTP_ACCESS_PHASE].type = NGX_DECLINED;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
354
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
355
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
356 if (ngx_array_init(&cmcf->phases[NGX_HTTP_CONTENT_PHASE].handlers,
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
357 cf->pool, 4, sizeof(ngx_http_handler_pt))
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
358 != NGX_OK)
34
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
359 {
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
360 return NGX_CONF_ERROR;
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
361 }
aab2ea7c0458 nginx 0.1.17
Igor Sysoev <http://sysoev.ru>
parents: 26
diff changeset
362
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
363 cmcf->phases[NGX_HTTP_CONTENT_PHASE].type = NGX_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
364
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
365
130
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
366 if (ngx_array_init(&cmcf->phases[NGX_HTTP_LOG_PHASE].handlers,
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
367 cf->pool, 1, sizeof(ngx_http_handler_pt))
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
368 != NGX_OK)
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
369 {
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
370 return NGX_CONF_ERROR;
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
371 }
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
372
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
373 cmcf->phases[NGX_HTTP_LOG_PHASE].type = NGX_OK;
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
374
82d695e3d662 nginx 0.3.12
Igor Sysoev <http://sysoev.ru>
parents: 126
diff changeset
375
186
54aabf2b0bc6 nginx 0.3.40
Igor Sysoev <http://sysoev.ru>
parents: 180
diff changeset
376 cmcf->headers_in_hash.max_size = 200;
56
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
377 cmcf->headers_in_hash.bucket_limit = 1;
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
378 cmcf->headers_in_hash.bucket_size = sizeof(ngx_http_header_t);
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
379 cmcf->headers_in_hash.name = "http headers_in";
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
380
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 130
diff changeset
381 if (ngx_hash0_init(&cmcf->headers_in_hash, cf->pool, ngx_http_headers_in, 0)
56
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
382 != NGX_OK)
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
383 {
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
384 return NGX_CONF_ERROR;
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
385 }
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
386
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
387 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, cf->log, 0,
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
388 "http headers_in hash size: %ui, max buckets per entry: %ui",
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
389 cmcf->headers_in_hash.hash_size,
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
390 cmcf->headers_in_hash.min_buckets);
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
391
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
392 for (m = 0; ngx_modules[m]; m++) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
393 if (ngx_modules[m]->type != NGX_HTTP_MODULE) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
394 continue;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
395 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
396
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
397 module = ngx_modules[m]->ctx;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
398 mi = ngx_modules[m]->ctx_index;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
399
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
400 if (module->postconfiguration) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
401 if (module->postconfiguration(cf) != NGX_OK) {
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
402 return NGX_CONF_ERROR;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
403 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
404 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
405 }
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
406
122
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
407 if (ngx_http_variables_init_vars(cf) != NGX_OK) {
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
408 return NGX_CONF_ERROR;
d25a1d6034f1 nginx 0.3.8
Igor Sysoev <http://sysoev.ru>
parents: 112
diff changeset
409 }
58
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
410
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
411 /*
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
412 * http{}'s cf->ctx was needed while the configuration merging
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
413 * and in postconfiguration process
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
414 */
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
415
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
416 *cf = pcf;
b55cbf18157e nginx 0.1.29
Igor Sysoev <http://sysoev.ru>
parents: 56
diff changeset
417
56
3050baa54a26 nginx 0.1.28
Igor Sysoev <http://sysoev.ru>
parents: 52
diff changeset
418
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
419 /*
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
420 * create the lists of ports, addresses and server names
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
421 * to quickly find the server core module configuration at run-time
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
422 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
423
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
424 if (ngx_array_init(&in_ports, cf->temp_pool, 2,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
425 sizeof(ngx_http_conf_in_port_t))
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
426 != NGX_OK)
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
427 {
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
428 return NGX_CONF_ERROR;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
429 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
430
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
431 /* "server" directives */
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
432
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
433 cscfp = cmcf->servers.elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
434 for (s = 0; s < cmcf->servers.nelts; s++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
435
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
436 /* "listen" directives */
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
437
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
438 lscf = cscfp[s]->listen.elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
439 for (l = 0; l < cscfp[s]->listen.nelts; l++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
440
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
441 /* AF_INET only */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
442
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
443 in_port = in_ports.elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
444 for (p = 0; p < in_ports.nelts; p++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
445
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
446 if (lscf[l].port != in_port[p].port) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
447 continue;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
448 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
449
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
450 /* the port is already in the port list */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
451
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
452 in_addr = in_port[p].addrs.elts;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
453 for (a = 0; a < in_port[p].addrs.nelts; a++) {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
454
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
455 if (lscf[l].addr != in_addr[a].addr) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
456 continue;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
457 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
458
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
459 /* the address is already in the address list */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
460
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
461 if (ngx_http_add_names(cf, &in_addr[a], cscfp[s]) != NGX_OK)
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
462 {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
463 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
464 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
465
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
466 /*
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
467 * check the duplicate "default" server
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
468 * for this address:port
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
469 */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
470
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
471 if (lscf[l].conf.default_server) {
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
472
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
473 if (in_addr[a].default_server) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
474 ngx_log_error(NGX_LOG_ERR, cf->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
475 "the duplicate default server in %V:%d",
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
476 &lscf[l].file_name, lscf[l].line);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
477
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
478 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
479 }
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
480
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
481 in_addr[a].core_srv_conf = cscfp[s];
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
482 in_addr[a].default_server = 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
483 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
484
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
485 goto found;
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
486 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
487
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
488 /*
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
489 * add the address to the addresses list that
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
490 * bound to this port
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
491 */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
492
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
493 if (ngx_http_add_address(cf, &in_port[p], &lscf[l], cscfp[s])
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
494 != NGX_OK)
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
495 {
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
496 return NGX_CONF_ERROR;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
497 }
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
498
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
499 goto found;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
500 }
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
501
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
502 /* add the port to the in_port list */
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
503
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
504 in_port = ngx_array_push(&in_ports);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
505 if (in_port == NULL) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
506 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
507 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
508
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
509 in_port->port = lscf[l].port;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
510 in_port->addrs.elts = NULL;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
511
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
512 if (ngx_http_add_address(cf, in_port, &lscf[l], cscfp[s]) != NGX_OK)
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
513 {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
514 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
515 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
516
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
517 found:
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
518
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
519 continue;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
520 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
521 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
522
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
523
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
524 /* optimize the lists of ports, addresses and server names */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
525
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
526 /* AF_INET only */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
527
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
528 in_port = in_ports.elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
529 for (p = 0; p < in_ports.nelts; p++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
530
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
531 ngx_qsort(in_port[p].addrs.elts, (size_t) in_port[p].addrs.nelts,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
532 sizeof(ngx_http_conf_in_addr_t), ngx_http_cmp_conf_in_addrs);
72
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
533
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
534 /*
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
535 * check whether all name-based servers have the same configuraiton
152
396dbbc06dd7 nginx 0.3.23
Igor Sysoev <http://sysoev.ru>
parents: 144
diff changeset
536 * as the default server,
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 152
diff changeset
537 * or some servers disable optimizing the server names
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
538 */
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
539
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
540 in_addr = in_port[p].addrs.elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
541 for (a = 0; a < in_port[p].addrs.nelts; a++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
542
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
543 name = in_addr[a].names.elts;
152
396dbbc06dd7 nginx 0.3.23
Igor Sysoev <http://sysoev.ru>
parents: 144
diff changeset
544 for (s = 0; s < in_addr[a].names.nelts; s++) {
396dbbc06dd7 nginx 0.3.23
Igor Sysoev <http://sysoev.ru>
parents: 144
diff changeset
545
396dbbc06dd7 nginx 0.3.23
Igor Sysoev <http://sysoev.ru>
parents: 144
diff changeset
546 if (in_addr[a].core_srv_conf != name[s].core_srv_conf
162
6be073125f2e nginx 0.3.28
Igor Sysoev <http://sysoev.ru>
parents: 158
diff changeset
547 || name[s].core_srv_conf->optimize_server_names == 0)
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
548 {
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
549 goto virtual_names;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
550 }
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
551 }
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
552
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
553 /*
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
554 * if all name-based servers have the same configuration
152
396dbbc06dd7 nginx 0.3.23
Igor Sysoev <http://sysoev.ru>
parents: 144
diff changeset
555 * as the default server,
158
2d15b82126ed nginx 0.3.26
Igor Sysoev <http://sysoev.ru>
parents: 152
diff changeset
556 * and no servers disable optimizing the server names
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
557 * then we do not need to check them at run-time at all
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
558 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
559
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
560 in_addr[a].names.nelts = 0;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
561
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
562 continue;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
563
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
564 virtual_names:
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
565
168
3314be145cb9 nginx 0.3.31
Igor Sysoev <http://sysoev.ru>
parents: 162
diff changeset
566 ngx_memzero(&ha, sizeof(ngx_hash_keys_arrays_t));
3314be145cb9 nginx 0.3.31
Igor Sysoev <http://sysoev.ru>
parents: 162
diff changeset
567
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
568 ha.temp_pool = ngx_create_pool(16384, cf->log);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
569 if (ha.temp_pool == NULL) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
570 return NGX_CONF_ERROR;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
571 }
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
572
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
573 ha.pool = cf->pool;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
574
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
575 if (ngx_hash_keys_array_init(&ha, NGX_HASH_LARGE) != NGX_OK) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
576 ngx_destroy_pool(ha.temp_pool);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
577 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
578 }
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
579
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
580 name = in_addr[a].names.elts;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
581 for (s = 0; s < in_addr[a].names.nelts; s++) {
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
582
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
583 ch = name[s].name.data[0];
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
584
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
585 if (ch == '*' || ch == '.') {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
586 continue;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
587 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
588
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
589 rc = ngx_hash_add_key(&ha, &name[s].name, name[s].core_srv_conf,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
590 0);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
591
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
592 if (rc == NGX_ERROR) {
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
593 return NGX_CONF_ERROR;
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
594 }
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
595
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
596 if (rc == NGX_BUSY) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
597 ngx_log_error(NGX_LOG_WARN, cf->log, 0,
180
4cd3e70c4d60 nginx 0.3.37
Igor Sysoev <http://sysoev.ru>
parents: 170
diff changeset
598 "conflicting server name \"%V\" on %s, ignored",
4cd3e70c4d60 nginx 0.3.37
Igor Sysoev <http://sysoev.ru>
parents: 170
diff changeset
599 &name[s].name, in_addr[a].listen_conf->addr);
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
600 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
601 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
602
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
603 for (s = 0; s < in_addr[a].names.nelts; s++) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
604
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
605 ch = name[s].name.data[0];
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
606
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
607 if (ch != '*' && ch != '.') {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
608 continue;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
609 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
610
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
611 rc = ngx_hash_add_key(&ha, &name[s].name, name[s].core_srv_conf,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
612 NGX_HASH_WILDCARD_KEY);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
613
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
614 if (rc == NGX_ERROR) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
615 return NGX_CONF_ERROR;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
616 }
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
617
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
618 if (rc == NGX_BUSY) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
619 ngx_log_error(NGX_LOG_WARN, cf->log, 0,
180
4cd3e70c4d60 nginx 0.3.37
Igor Sysoev <http://sysoev.ru>
parents: 170
diff changeset
620 "conflicting server name \"%V\" on %s, ignored",
4cd3e70c4d60 nginx 0.3.37
Igor Sysoev <http://sysoev.ru>
parents: 170
diff changeset
621 &name[s].name, in_addr[a].listen_conf->addr);
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
622 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
623 }
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
624
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
625 hash.key = ngx_hash_key_lc;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
626 hash.max_size = cmcf->server_names_hash_max_size;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
627 hash.bucket_size = cmcf->server_names_hash_bucket_size;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
628 hash.name = "server_names_hash";
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
629 hash.pool = cf->pool;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
630
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
631 if (ha.keys.nelts) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
632 hash.hash = &in_addr[a].hash;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
633 hash.temp_pool = NULL;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
634
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
635 if (ngx_hash_init(&hash, ha.keys.elts, ha.keys.nelts) != NGX_OK)
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
636 {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
637 ngx_destroy_pool(ha.temp_pool);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
638 return NGX_CONF_ERROR;
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
639 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
640 }
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
641
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
642 if (ha.dns_wildcards.nelts) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
643
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
644 ngx_qsort(ha.dns_wildcards.elts,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
645 (size_t) ha.dns_wildcards.nelts,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
646 sizeof(ngx_hash_key_t),
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
647 ngx_http_cmp_dns_wildcards);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
648
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
649 hash.hash = NULL;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
650 hash.temp_pool = ha.temp_pool;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
651
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
652 if (ngx_hash_wildcard_init(&hash, ha.dns_wildcards.elts,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
653 ha.dns_wildcards.nelts)
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
654 != NGX_OK)
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
655 {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
656 ngx_destroy_pool(ha.temp_pool);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
657 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
658 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
659
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
660 in_addr[a].dns_wildcards = (ngx_hash_wildcard_t *) hash.hash;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
661 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
662
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
663 ngx_destroy_pool(ha.temp_pool);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
664 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
665
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
666 in_addr = in_port[p].addrs.elts;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
667 last = in_port[p].addrs.nelts;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
668
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
669 /*
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
670 * if there is the binding to the "*:port" then we need to bind()
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
671 * to the "*:port" only and ignore the other bindings
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
672 */
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
673
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
674 if (in_addr[last - 1].addr == INADDR_ANY) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
675 in_addr[last - 1].bind = 1;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
676 bind_all = 0;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
677
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
678 } else {
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
679 bind_all = 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
680 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
681
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
682 for (a = 0; a < last; /* void */ ) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
683
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
684 if (!bind_all && !in_addr[a].bind) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
685 a++;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
686 continue;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
687 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
688
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
689 ls = ngx_listening_inet_stream_socket(cf, in_addr[a].addr,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
690 in_port[p].port);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
691 if (ls == NULL) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
692 return NGX_CONF_ERROR;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
693 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
694
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
695 ls->addr_ntop = 1;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
696
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
697 ls->handler = ngx_http_init_connection;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
698
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
699 cscf = in_addr[a].core_srv_conf;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
700 ls->pool_size = cscf->connection_pool_size;
72
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
701 ls->post_accept_timeout = cscf->client_header_timeout;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
702
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
703 clcf = cscf->ctx->loc_conf[ngx_http_core_module.ctx_index];
92
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
704
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
705 ls->log = *clcf->err_log;
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
706 ls->log.data = &ls->addr_text;
45945fa8b8ba nginx 0.2.0
Igor Sysoev <http://sysoev.ru>
parents: 90
diff changeset
707 ls->log.handler = ngx_accept_log_error;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
708
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
709 #if (NGX_WIN32)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
710 iocpcf = ngx_event_get_conf(cf->cycle->conf_ctx, ngx_iocp_module);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
711 if (iocpcf->acceptex_read) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
712 ls->post_accept_buffer_size = cscf->client_header_buffer_size;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
713 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
714 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
715
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
716 ls->backlog = in_addr[a].listen_conf->backlog;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
717 ls->rcvbuf = in_addr[a].listen_conf->rcvbuf;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
718 ls->sndbuf = in_addr[a].listen_conf->sndbuf;
72
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
719
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
720 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER)
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
721 ls->accept_filter = in_addr[a].listen_conf->accept_filter;
72
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
722 #endif
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
723
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
724 #if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT)
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
725 ls->deferred_accept = in_addr[a].listen_conf->deferred_accept;
72
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
726 #endif
b31656313b59 nginx 0.1.36
Igor Sysoev <http://sysoev.ru>
parents: 70
diff changeset
727
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
728 hip = ngx_palloc(cf->pool, sizeof(ngx_http_in_port_t));
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
729 if (hip == NULL) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
730 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
731 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
732
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
733 hip->port = in_port[p].port;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
734
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
735 hip->port_text.data = ngx_palloc(cf->pool, 7);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
736 if (hip->port_text.data == NULL) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
737 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
738 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
739
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
740 ls->servers = hip;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
741
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
742 hip->port_text.len = ngx_sprintf(hip->port_text.data, ":%d",
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
743 hip->port)
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
744 - hip->port_text.data;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
745
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
746 in_addr = in_port[p].addrs.elts;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
747
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
748 if (in_addr[a].bind && in_addr[a].addr != INADDR_ANY) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
749 hip->naddrs = 1;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
750 done = 0;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
751
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
752 } else if (in_port[p].addrs.nelts > 1
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
753 && in_addr[last - 1].addr == INADDR_ANY)
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
754 {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
755 hip->naddrs = last;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
756 done = 1;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
757
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
758 } else {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
759 hip->naddrs = 1;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
760 done = 0;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
761 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
762
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
763 #if 0
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
764 ngx_log_error(NGX_LOG_ALERT, cf->log, 0,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
765 "%ui: %V %d %ui %ui",
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
766 a, &ls->addr_text, in_addr[a].bind,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
767 hip->naddrs, last);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
768 #endif
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
769
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
770 hip->addrs = ngx_pcalloc(cf->pool,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
771 hip->naddrs * sizeof(ngx_http_in_addr_t));
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
772 if (hip->addrs == NULL) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
773 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
774 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
775
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
776 for (i = 0; i < hip->naddrs; i++) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
777 hip->addrs[i].addr = in_addr[i].addr;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
778 hip->addrs[i].core_srv_conf = in_addr[i].core_srv_conf;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
779
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
780 if (in_addr[i].hash.buckets == NULL
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
781 && (in_addr[i].dns_wildcards == NULL
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
782 || in_addr[i].dns_wildcards->hash.buckets == NULL))
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
783 {
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
784 continue;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
785 }
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
786
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
787 vn = ngx_palloc(cf->pool, sizeof(ngx_http_virtual_names_t));
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
788 if (vn == NULL) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
789 return NGX_CONF_ERROR;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
790 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
791 hip->addrs[i].virtual_names = vn;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
792
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
793 vn->hash = in_addr[i].hash;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
794 vn->dns_wildcards = in_addr[i].dns_wildcards;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
795 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
796
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
797 if (done) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
798 break;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
799 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
800
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
801 in_addr++;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
802 in_port[p].addrs.elts = in_addr;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
803 last--;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
804
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
805 a = 0;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
806 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
807 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
808
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 130
diff changeset
809 #if 0
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
810 {
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
811 u_char address[20];
138
8e6d4d96ec4c nginx 0.3.16
Igor Sysoev <http://sysoev.ru>
parents: 130
diff changeset
812 ngx_uint_t p, a;
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
813
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
814 in_port = in_ports.elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
815 for (p = 0; p < in_ports.nelts; p++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
816 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, cf->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
817 "port: %d %p", in_port[p].port, &in_port[p]);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
818 in_addr = in_port[p].addrs.elts;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
819 for (a = 0; a < in_port[p].addrs.nelts; a++) {
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
820 ngx_inet_ntop(AF_INET, &in_addr[a].addr, address, 20);
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
821 ngx_log_debug3(NGX_LOG_DEBUG_HTTP, cf->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
822 "%s:%d %p",
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
823 address, in_port[p].port, in_addr[a].core_srv_conf);
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
824 name = in_addr[a].names.elts;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
825 for (n = 0; n < in_addr[a].names.nelts; n++) {
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
826 ngx_log_debug4(NGX_LOG_DEBUG_HTTP, cf->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
827 "%s:%d %V %p",
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
828 address, in_port[p].port, &name[n].name,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
829 name[n].core_srv_conf);
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
830 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
831 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
832 }
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
833 }
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
834 #endif
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
835
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
836 return NGX_CONF_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
837 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
838
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
839
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
840 /*
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
841 * add the server address, the server names and the server core module
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
842 * configurations to the port (in_port)
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
843 */
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
844
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
845 static ngx_int_t
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
846 ngx_http_add_address(ngx_conf_t *cf, ngx_http_conf_in_port_t *in_port,
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
847 ngx_http_listen_t *lscf, ngx_http_core_srv_conf_t *cscf)
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
848 {
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
849 ngx_http_conf_in_addr_t *in_addr;
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
850
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
851 if (in_port->addrs.elts == NULL) {
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
852 if (ngx_array_init(&in_port->addrs, cf->temp_pool, 4,
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
853 sizeof(ngx_http_conf_in_addr_t)) != NGX_OK)
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
854 {
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
855 return NGX_ERROR;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
856 }
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
857 }
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
858
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
859 in_addr = ngx_array_push(&in_port->addrs);
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
860 if (in_addr == NULL) {
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
861 return NGX_ERROR;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
862 }
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
863
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
864 in_addr->addr = lscf->addr;
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
865 in_addr->hash.buckets = NULL;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
866 in_addr->hash.size = 0;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
867 in_addr->dns_wildcards = NULL;
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
868 in_addr->names.elts = NULL;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
869 in_addr->core_srv_conf = cscf;
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
870 in_addr->default_server = lscf->conf.default_server;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
871 in_addr->bind = lscf->conf.bind;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
872 in_addr->listen_conf = &lscf->conf;
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
873
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
874 #if (NGX_DEBUG)
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
875 {
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
876 u_char text[20];
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
877 ngx_inet_ntop(AF_INET, &in_addr->addr, text, 20);
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
878 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, cf->log, 0, "address: %s:%d",
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
879 text, in_port->port);
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
880 }
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
881 #endif
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
882
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
883 return ngx_http_add_names(cf, in_addr, cscf);
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
884 }
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
885
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
886
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
887 /*
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
888 * add the server names and the server core module
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
889 * configurations to the address:port (in_addr)
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
890 */
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
891
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
892 static ngx_int_t
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
893 ngx_http_add_names(ngx_conf_t *cf, ngx_http_conf_in_addr_t *in_addr,
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
894 ngx_http_core_srv_conf_t *cscf)
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
895 {
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
896 ngx_uint_t i, n;
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
897 ngx_http_server_name_t *server_names, *name;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
898
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
899 if (in_addr->names.elts == NULL) {
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
900 if (ngx_array_init(&in_addr->names, cf->temp_pool, 4,
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
901 sizeof(ngx_http_server_name_t)) != NGX_OK)
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
902 {
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
903 return NGX_ERROR;
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
904 }
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
905 }
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
906
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
907 server_names = cscf->server_names.elts;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
908 for (i = 0; i < cscf->server_names.nelts; i++) {
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
909
26
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
910 for (n = 0; n < server_names[i].name.len; n++) {
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
911 server_names[i].name.data[n] =
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
912 ngx_tolower(server_names[i].name.data[n]);
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
913 }
45fe5b98a9de nginx 0.1.13
Igor Sysoev <http://sysoev.ru>
parents: 10
diff changeset
914
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
915 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, cf->log, 0,
10
46833bd150cb nginx 0.1.5
Igor Sysoev <http://sysoev.ru>
parents: 4
diff changeset
916 "name: %V", &server_names[i].name);
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
917
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
918
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
919 name = ngx_array_push(&in_addr->names);
50
72eb30262aac nginx 0.1.25
Igor Sysoev <http://sysoev.ru>
parents: 48
diff changeset
920 if (name == NULL) {
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
921 return NGX_ERROR;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
922 }
70
8ad297c88dcb nginx 0.1.35
Igor Sysoev <http://sysoev.ru>
parents: 58
diff changeset
923 server_names = cscf->server_names.elts;
4
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
924
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
925 *name = server_names[i];
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
926 }
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
927
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
928 return NGX_OK;
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
929 }
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
930
4b2dafa26fe2 nginx 0.1.2
Igor Sysoev <http://sysoev.ru>
parents: 0
diff changeset
931
48
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
932 static char *
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
933 ngx_http_merge_locations(ngx_conf_t *cf, ngx_array_t *locations,
6cfc63e68377 nginx 0.1.24
Igor Sysoev <http://sysoev.ru>
parents: 34
diff changeset
934 void **loc_conf, ngx_http_module_t *module, ngx_uint_t ctx_index)
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
935 {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
936 char *rv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
937 ngx_uint_t i;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
938 ngx_http_core_loc_conf_t **clcfp;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
939
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
940 clcfp = locations->elts;
0
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
941
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
942 for (i = 0; i < locations->nelts; i++) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
943 rv = module->merge_loc_conf(cf, loc_conf[ctx_index],
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
944 clcfp[i]->loc_conf[ctx_index]);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
945 if (rv != NGX_CONF_OK) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
946 return rv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
947 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
948
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
949 rv = ngx_http_merge_locations(cf, &clcfp[i]->locations,
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
950 clcfp[i]->loc_conf, module, ctx_index);
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
951 if (rv != NGX_CONF_OK) {
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
952 return rv;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
953 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
954 }
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
955
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
956 return NGX_CONF_OK;
f0b350454894 nginx 0.1.0
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
957 }
142
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
958
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
959
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
960 static int ngx_libc_cdecl
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
961 ngx_http_cmp_conf_in_addrs(const void *one, const void *two)
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
962 {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
963 ngx_http_conf_in_addr_t *first, *second;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
964
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
965 first = (ngx_http_conf_in_addr_t *) one;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
966 second = (ngx_http_conf_in_addr_t *) two;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
967
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
968 if (first->addr == INADDR_ANY) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
969 /* the INADDR_ANY must be the last resort, shift it to the end */
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
970 return 1;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
971 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
972
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
973 if (first->bind && !second->bind) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
974 /* shift explicit bind()ed addresses to the start */
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
975 return -1;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
976 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
977
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
978 if (!first->bind && second->bind) {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
979 /* shift explicit bind()ed addresses to the start */
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
980 return 1;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
981 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
982
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
983 /* do not sort by default */
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
984
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
985 return 0;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
986 }
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
987
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
988
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
989 static int ngx_libc_cdecl
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
990 ngx_http_cmp_dns_wildcards(const void *one, const void *two)
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
991 {
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
992 ngx_hash_key_t *first, *second;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
993
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
994 first = (ngx_hash_key_t *) one;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
995 second = (ngx_hash_key_t *) two;
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
996
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
997 return ngx_strcmp(first->key.data, second->key.data);
84910468f6de nginx 0.3.18
Igor Sysoev <http://sysoev.ru>
parents: 138
diff changeset
998 }