Changeset c7670f
- Timestamp:
- 10/30/09 18:13:41 (3 years ago)
- Branches:
- nginx-v0.8
- Parents:
- 178a98
- git-author:
- George Potapov <nephrite@…> (10/30/09 18:13:41)
- git-committer:
- George Potapov <nephrite@…> (10/30/09 18:13:41)
- Location:
- server
- Files:
-
- 19 edited
-
CHANGES (modified) (2 diffs)
-
CHANGES.ru (modified) (1 diff)
-
src/core/nginx.c (modified) (1 diff)
-
src/core/nginx.h (modified) (1 diff)
-
src/core/ngx_connection.c (modified) (5 diffs)
-
src/core/ngx_cycle.c (modified) (1 diff)
-
src/core/ngx_inet.c (modified) (2 diffs)
-
src/core/ngx_inet.h (modified) (2 diffs)
-
src/event/ngx_event_accept.c (modified) (1 diff)
-
src/http/modules/ngx_http_ssl_module.c (modified) (1 diff)
-
src/http/modules/perl/nginx.pm (modified) (1 diff)
-
src/http/ngx_http.c (modified) (30 diffs)
-
src/http/ngx_http.h (modified) (2 diffs)
-
src/http/ngx_http_core_module.c (modified) (16 diffs)
-
src/http/ngx_http_core_module.h (modified) (10 diffs)
-
src/http/ngx_http_parse_time.c (modified) (4 diffs)
-
src/http/ngx_http_request.c (modified) (7 diffs)
-
src/http/ngx_http_request_body.c (modified) (8 diffs)
-
src/os/unix/ngx_process_cycle.c (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
server/CHANGES
r178a98 rc7670f 1 2 Changes with nginx 0.8.21 26 Oct 2009 3 4 *) Feature: now the "-V" switch shows TLS SNI support. 5 6 *) Feature: the "listen" directive of the HTTP module supports unix 7 domain sockets. 8 Thanks to Hongli Lai. 9 10 *) Feature: the "default_server" parameter of the "listen" directive. 11 12 *) Feature: now a "default" parameter is not required to set listen 13 socket options. 14 15 *) Bugfix: nginx did not support dates in 2038 year on 32-bit platforms; 16 17 *) Bugfix: socket leak; the bug had appeared in 0.8.11. 18 1 19 2 20 Changes with nginx 0.8.20 14 Oct 2009 … … 14 32 15 33 *) Bugfix: nginx/Windows might not create temporary file, a cache file, 16 or "proxy/fastcgi_store"d file if a worker ha sno enough access34 or "proxy/fastcgi_store"d file if a worker had no enough access 17 35 rights for top level directories. 18 36 -
server/CHANGES.ru
r178a98 rc7670f 1 2 éÚÍÅÎÅÎÉÑ × nginx 0.8.21 26.10.2009 3 4 *) äÏÂÁ×ÌÅÎÉÅ: ÔÅÐÅÒØ ËÌÀÞ -V ÐÏËÁÚÙ×ÁÅÔ ÓÔÁÔÕÓ ÐÏÄÄÅÒÖËÉ TLS SNI. 5 6 *) äÏÂÁ×ÌÅÎÉÅ: ÄÉÒÅËÔÉ×Á listen ÍÏÄÕÌÑ HTTP ÐÏÄÄÅÒÖÉ×ÁÅÔ unix domain 7 ÓÏËÅÔÙ. 8 óÐÁÓÉÂÏ Hongli Lai. 9 10 *) äÏÂÁ×ÌÅÎÉÅ: ÐÁÒÁÍÅÔÒ "default_server" × ÄÉÒÅËÔÉ×Å listen. 11 12 *) äÏÂÁ×ÌÅÎÉÅ: ÔÅÐÅÒØ ÐÁÒÁÍÅÔÒ "default" ÎÅ ÏÂÑÚÁÔÅÌÅÎ ÄÌÑ ÕÓÔÁÎÏ×ËÉ 13 ÐÁÒÁÍÅÔÒÏ× listen-ÓÏËÅÔÁ. 14 15 *) éÓÐÒÁ×ÌÅÎÉÅ: nginx ÎÅ ÐÏÄÄÅÒÖÉ×ÁÌ ÄÁÔÙ × 2038 ÇÏÄÕ ÎÁ 32-ÂÉÔÎÙÈ 16 ÐÌÁÔÆÏÒÍÁÈ; 17 18 *) éÓÐÒÁ×ÌÅÎÉÅ: ÕÔÅÞËÉ ÓÏËÅÔÏ×; ÏÛÉÂËÁ ÐÏÑ×ÉÌÁÓØ × 0.8.11. 19 1 20 2 21 éÚÍÅÎÅÎÉÑ × nginx 0.8.20 14.10.2009 -
server/src/core/nginx.c
r178a98 rc7670f 240 240 ngx_log_stderr(0, "built by " NGX_COMPILER); 241 241 #endif 242 #if (NGX_SSL) 243 #ifdef SSL_CTRL_SET_TLSEXT_HOSTNAME 244 ngx_log_stderr(0, "TLS SNI support enabled"); 245 #else 246 ngx_log_stderr(0, "TLS SNI support disabled"); 247 #endif 248 #endif 242 249 ngx_log_stderr(0, "configure arguments:" NGX_CONFIGURE); 243 250 } -
server/src/core/nginx.h
r178a98 rc7670f 9 9 10 10 11 #define nginx_version 802 012 #define NGINX_VERSION "0.8.2 0"11 #define nginx_version 8021 12 #define NGINX_VERSION "0.8.21" 13 13 #define NGINX_VER "nginx/" NGINX_VERSION 14 14 -
server/src/core/ngx_connection.c
r39134b rc7670f 16 16 ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen) 17 17 { 18 size_t len; 18 19 ngx_listening_t *ls; 19 20 struct sockaddr *sa; … … 37 38 ls->socklen = socklen; 38 39 39 ls->addr_text.len = ngx_sock_ntop(sa, text, NGX_SOCKADDR_STRLEN, 1); 40 41 ls->addr_text.data = ngx_pnalloc(cf->pool, ls->addr_text.len); 42 if (ls->addr_text.data == NULL) { 43 return NULL; 44 } 45 46 ngx_memcpy(ls->addr_text.data, text, ls->addr_text.len); 47 48 ls->fd = (ngx_socket_t) -1; 49 ls->type = SOCK_STREAM; 40 len = ngx_sock_ntop(sa, text, NGX_SOCKADDR_STRLEN, 1); 41 ls->addr_text.len = len; 50 42 51 43 switch (ls->sockaddr->sa_family) { … … 53 45 case AF_INET6: 54 46 ls->addr_text_max_len = NGX_INET6_ADDRSTRLEN; 47 break; 48 #endif 49 #if (NGX_HAVE_UNIX_DOMAIN) 50 case AF_UNIX: 51 ls->addr_text_max_len = NGX_UNIX_ADDRSTRLEN; 52 len++; 55 53 break; 56 54 #endif … … 62 60 break; 63 61 } 62 63 ls->addr_text.data = ngx_pnalloc(cf->pool, len); 64 if (ls->addr_text.data == NULL) { 65 return NULL; 66 } 67 68 ngx_memcpy(ls->addr_text.data, text, len); 69 70 ls->fd = (ngx_socket_t) -1; 71 ls->type = SOCK_STREAM; 64 72 65 73 ls->backlog = NGX_LISTEN_BACKLOG; … … 604 612 ngx_close_socket_n " %V failed", &ls[i].addr_text); 605 613 } 614 615 #if (NGX_HAVE_UNIX_DOMAIN) 616 617 if (ls[i].sockaddr->sa_family == AF_UNIX 618 && ngx_process != NGX_PROCESS_WORKER) 619 { 620 u_char *name = ls[i].addr_text.data + sizeof("unix:") - 1; 621 622 if (ngx_delete_file(name) == -1) { 623 ngx_log_error(NGX_LOG_EMERG, cycle->log, ngx_socket_errno, 624 ngx_delete_file_n " %s failed", name); 625 } 626 } 627 628 #endif 606 629 607 630 ls[i].fd = (ngx_socket_t) -1; -
server/src/core/ngx_cycle.c
r7ae6a5 rc7670f 205 205 } 206 206 207 ngx_ memcpy(cycle->hostname.data,hostname, cycle->hostname.len);207 ngx_strlow(cycle->hostname.data, (u_char *) hostname, cycle->hostname.len); 208 208 209 209 -
server/src/core/ngx_inet.c
r963ce7 rc7670f 68 68 size_t n; 69 69 struct sockaddr_in6 *sin6; 70 #endif 71 #if (NGX_HAVE_UNIX_DOMAIN) 72 struct sockaddr_un *saun; 70 73 #endif 71 74 … … 107 110 108 111 return n; 112 #endif 113 114 #if (NGX_HAVE_UNIX_DOMAIN) 115 116 case AF_UNIX: 117 saun = (struct sockaddr_un *) sa; 118 119 /* we do not include trailing zero in address length */ 120 121 return ngx_snprintf(text, len, "unix:%s%Z", saun->sun_path) - text - 1; 122 109 123 #endif 110 124 -
server/src/core/ngx_inet.h
r963ce7 rc7670f 13 13 14 14 15 #define NGX_INET_ADDRSTRLEN (sizeof("255.255.255.255") - 1)16 #define NGX_INET6_ADDRSTRLEN \17 (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") - 1)18 19 #define NGX_SOCKADDR_STRLEN (NGX_INET6_ADDRSTRLEN + sizeof(":65535") - 1)20 21 22 15 /* 23 * TODO: autoconfigure NGX_SOCKADDRLEN a s16 * TODO: autoconfigure NGX_SOCKADDRLEN and NGX_SOCKADDR_STRLEN as 24 17 * sizeof(struct sockaddr_storage) 25 18 * sizeof(struct sockaddr_un) … … 27 20 * sizeof(struct sockaddr_in) 28 21 */ 22 23 #define NGX_INET_ADDRSTRLEN (sizeof("255.255.255.255") - 1) 24 #define NGX_INET6_ADDRSTRLEN \ 25 (sizeof("ffff:ffff:ffff:ffff:ffff:ffff:255.255.255.255") - 1) 26 #define NGX_UNIX_ADDRSTRLEN \ 27 (sizeof(struct sockaddr_un) - offsetof(struct sockaddr_un, sun_path)) 28 29 #if (NGX_HAVE_UNIX_DOMAIN) 30 #define NGX_SOCKADDR_STRLEN (sizeof("unix:") - 1 + NGX_UNIX_ADDRSTRLEN) 31 #else 32 #define NGX_SOCKADDR_STRLEN (NGX_INET6_ADDRSTRLEN + sizeof(":65535") - 1) 33 #endif 29 34 30 35 #if (NGX_HAVE_UNIX_DOMAIN) -
server/src/event/ngx_event_accept.c
rf7c38d rc7670f 157 157 c->unexpected_eof = 1; 158 158 159 #if (NGX_HAVE_UNIX_DOMAIN) 160 if (c->sockaddr->sa_family == AF_UNIX) { 161 c->tcp_nopush = NGX_TCP_NOPUSH_DISABLED; 162 c->tcp_nodelay = NGX_TCP_NODELAY_DISABLED; 163 #if (NGX_SOLARIS) 164 /* Solaris's sendfilev() supports AF_NCA, AF_INET, and AF_INET6 */ 165 c->sendfile = 0; 166 #endif 167 } 168 #endif 169 159 170 rev = c->read; 160 171 wev = c->write; -
server/src/http/modules/ngx_http_ssl_module.c
r178a98 rc7670f 410 410 { 411 411 ngx_log_error(NGX_LOG_WARN, cf->log, 0, 412 "nginx was buil dwith SNI support, however, now it is linked "412 "nginx was built with SNI support, however, now it is linked " 413 413 "dynamically to an OpenSSL library which has no tlsext support, " 414 414 "therefore SNI is not available"); -
server/src/http/modules/perl/nginx.pm
r178a98 rc7670f 48 48 ); 49 49 50 our $VERSION = '0.8.2 0';50 our $VERSION = '0.8.21'; 51 51 52 52 require XSLoader; -
server/src/http/ngx_http.c
r096554 rc7670f 18 18 ngx_http_core_main_conf_t *cmcf); 19 19 20 static ngx_int_t ngx_http_init_server_lists(ngx_conf_t *cf,21 ngx_array_t *servers, ngx_array_t *ports);22 static ngx_int_t ngx_http_add_ports(ngx_conf_t *cf,23 ngx_http_core_srv_conf_t *cscf, ngx_array_t *ports,24 ngx_http_listen_t *listen);25 20 static ngx_int_t ngx_http_add_addresses(ngx_conf_t *cf, 26 21 ngx_http_core_srv_conf_t *cscf, ngx_http_conf_port_t *port, 27 ngx_http_listen_ t *listen);22 ngx_http_listen_opt_t *lsopt); 28 23 static ngx_int_t ngx_http_add_address(ngx_conf_t *cf, 29 24 ngx_http_core_srv_conf_t *cscf, ngx_http_conf_port_t *port, 30 ngx_http_listen_ t *listen);31 static ngx_int_t ngx_http_add_ names(ngx_conf_t *cf,25 ngx_http_listen_opt_t *lsopt); 26 static ngx_int_t ngx_http_add_server(ngx_conf_t *cf, 32 27 ngx_http_core_srv_conf_t *cscf, ngx_http_conf_addr_t *addr); 33 28 … … 123 118 ngx_uint_t mi, m, s; 124 119 ngx_conf_t pcf; 125 ngx_array_t ports;126 120 ngx_http_module_t *module; 127 121 ngx_http_conf_ctx_t *ctx; … … 363 357 364 358 365 /*366 * create the lists of ports, addresses and server names367 * to find quickly the server core module configuration at run-time368 */369 370 if (ngx_http_init_server_lists(cf, &cmcf->servers, &ports) != NGX_OK) {371 return NGX_CONF_ERROR;372 }373 374 375 359 /* optimize the lists of ports, addresses and server names */ 376 360 377 if (ngx_http_optimize_servers(cf, cmcf, &ports) != NGX_OK) {361 if (ngx_http_optimize_servers(cf, cmcf, cmcf->ports) != NGX_OK) { 378 362 return NGX_CONF_ERROR; 379 363 } … … 1110 1094 1111 1095 1112 static ngx_int_t 1113 ngx_http_init_server_lists(ngx_conf_t *cf, ngx_array_t *servers, 1114 ngx_array_t *ports) 1115 { 1116 ngx_uint_t s, i; 1117 ngx_http_listen_t *listen; 1118 ngx_http_core_srv_conf_t **cscfp; 1119 1120 if (ngx_array_init(ports, cf->temp_pool, 2, sizeof(ngx_http_conf_port_t)) 1121 != NGX_OK) 1122 { 1123 return NGX_ERROR; 1124 } 1125 1126 /* "server" directives */ 1127 1128 cscfp = servers->elts; 1129 for (s = 0; s < servers->nelts; s++) { 1130 1131 /* "listen" directives */ 1132 1133 listen = cscfp[s]->listen.elts; 1134 for (i = 0; i < cscfp[s]->listen.nelts; i++) { 1135 1136 if (ngx_http_add_ports(cf, cscfp[s], ports, &listen[i]) != NGX_OK) { 1137 return NGX_ERROR; 1138 } 1139 } 1140 } 1141 1142 return NGX_OK; 1143 } 1144 1145 1146 static ngx_int_t 1147 ngx_http_add_ports(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, 1148 ngx_array_t *ports, ngx_http_listen_t *listen) 1149 { 1150 in_port_t p; 1151 ngx_uint_t i; 1152 struct sockaddr *sa; 1153 struct sockaddr_in *sin; 1154 ngx_http_conf_port_t *port; 1096 ngx_int_t 1097 ngx_http_add_listen(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, 1098 ngx_http_listen_opt_t *lsopt) 1099 { 1100 in_port_t p; 1101 ngx_uint_t i; 1102 struct sockaddr *sa; 1103 struct sockaddr_in *sin; 1104 ngx_http_conf_port_t *port; 1105 ngx_http_core_main_conf_t *cmcf; 1155 1106 #if (NGX_HAVE_INET6) 1156 struct sockaddr_in6 *sin6; 1157 #endif 1158 1159 sa = (struct sockaddr *) &listen->sockaddr; 1107 struct sockaddr_in6 *sin6; 1108 #endif 1109 1110 cmcf = ngx_http_conf_get_module_main_conf(cf, ngx_http_core_module); 1111 1112 if (cmcf->ports == NULL) { 1113 cmcf->ports = ngx_array_create(cf->temp_pool, 2, 1114 sizeof(ngx_http_conf_port_t)); 1115 if (cmcf->ports == NULL) { 1116 return NGX_ERROR; 1117 } 1118 } 1119 1120 sa = (struct sockaddr *) &lsopt->sockaddr; 1160 1121 1161 1122 switch (sa->sa_family) { … … 1168 1129 #endif 1169 1130 1131 #if (NGX_HAVE_UNIX_DOMAIN) 1132 case AF_UNIX: 1133 p = 0; 1134 break; 1135 #endif 1136 1170 1137 default: /* AF_INET */ 1171 1138 sin = (struct sockaddr_in *) sa; … … 1174 1141 } 1175 1142 1176 port = ports->elts;1177 for (i = 0; i < ports->nelts; i++) {1143 port = cmcf->ports->elts; 1144 for (i = 0; i < cmcf->ports->nelts; i++) { 1178 1145 1179 1146 if (p != port[i].port || sa->sa_family != port[i].family) { … … 1183 1150 /* a port is already in the port list */ 1184 1151 1185 return ngx_http_add_addresses(cf, cscf, &port[i], l isten);1152 return ngx_http_add_addresses(cf, cscf, &port[i], lsopt); 1186 1153 } 1187 1154 1188 1155 /* add a port to the port list */ 1189 1156 1190 port = ngx_array_push( ports);1157 port = ngx_array_push(cmcf->ports); 1191 1158 if (port == NULL) { 1192 1159 return NGX_ERROR; … … 1197 1164 port->addrs.elts = NULL; 1198 1165 1199 return ngx_http_add_address(cf, cscf, port, l isten);1166 return ngx_http_add_address(cf, cscf, port, lsopt); 1200 1167 } 1201 1168 … … 1203 1170 static ngx_int_t 1204 1171 ngx_http_add_addresses(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, 1205 ngx_http_conf_port_t *port, ngx_http_listen_ t *listen)1172 ngx_http_conf_port_t *port, ngx_http_listen_opt_t *lsopt) 1206 1173 { 1207 1174 u_char *p; 1208 1175 size_t len, off; 1209 ngx_uint_t i ;1176 ngx_uint_t i, default_server; 1210 1177 struct sockaddr *sa; 1211 1178 ngx_http_conf_addr_t *addr; 1179 #if (NGX_HAVE_UNIX_DOMAIN) 1180 struct sockaddr_un *saun; 1181 #endif 1212 1182 1213 1183 /* … … 1216 1186 */ 1217 1187 1218 sa = (struct sockaddr *) &l isten->sockaddr;1188 sa = (struct sockaddr *) &lsopt->sockaddr; 1219 1189 1220 1190 switch (sa->sa_family) { … … 1227 1197 #endif 1228 1198 1199 #if (NGX_HAVE_UNIX_DOMAIN) 1200 case AF_UNIX: 1201 off = offsetof(struct sockaddr_un, sun_path); 1202 len = sizeof(saun->sun_path); 1203 break; 1204 #endif 1205 1229 1206 default: /* AF_INET */ 1230 1207 off = offsetof(struct sockaddr_in, sin_addr); … … 1233 1210 } 1234 1211 1235 p = l isten->sockaddr + off;1212 p = lsopt->sockaddr + off; 1236 1213 1237 1214 addr = port->addrs.elts; … … 1239 1216 for (i = 0; i < port->addrs.nelts; i++) { 1240 1217 1241 if (ngx_memcmp(p, (u_char *) addr[i]. sockaddr + off, len) != 0) {1218 if (ngx_memcmp(p, (u_char *) addr[i].opt.sockaddr + off, len) != 0) { 1242 1219 continue; 1243 1220 } … … 1245 1222 /* the address is already in the address list */ 1246 1223 1247 if (ngx_http_add_ names(cf, cscf, &addr[i]) != NGX_OK) {1224 if (ngx_http_add_server(cf, cscf, &addr[i]) != NGX_OK) { 1248 1225 return NGX_ERROR; 1249 1226 } 1250 1227 1228 /* preserve default_server bit during listen options overwriting */ 1229 default_server = addr[i].opt.default_server; 1230 1231 if (lsopt->set) { 1232 1233 if (addr[i].opt.set) { 1234 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 1235 "a duplicate listen options for %s", addr[i].opt.addr); 1236 return NGX_ERROR; 1237 } 1238 1239 addr[i].opt = *lsopt; 1240 } 1241 1251 1242 /* check the duplicate "default" server for this address:port */ 1252 1243 1253 if (listen->conf.default_server) { 1254 1255 if (addr[i].default_server) { 1256 ngx_log_error(NGX_LOG_ERR, cf->log, 0, 1257 "the duplicate default server in %s:%ui", 1258 listen->file_name, listen->line); 1259 1244 if (lsopt->default_server) { 1245 1246 if (default_server) { 1247 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 1248 "a duplicate default server for %s", addr[i].opt.addr); 1260 1249 return NGX_ERROR; 1261 1250 } 1262 1251 1263 addr[i].core_srv_conf = cscf; 1264 addr[i].default_server = 1; 1265 #if (NGX_HTTP_SSL) 1266 addr[i].ssl = listen->conf.ssl; 1267 #endif 1268 addr[i].listen_conf = &listen->conf; 1269 } 1252 default_server = 1; 1253 addr[i].default_server = cscf; 1254 } 1255 1256 addr[i].opt.default_server = default_server; 1270 1257 1271 1258 return NGX_OK; … … 1274 1261 /* add the address to the addresses list that bound to this port */ 1275 1262 1276 return ngx_http_add_address(cf, cscf, port, l isten);1263 return ngx_http_add_address(cf, cscf, port, lsopt); 1277 1264 } 1278 1265 … … 1285 1272 static ngx_int_t 1286 1273 ngx_http_add_address(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, 1287 ngx_http_conf_port_t *port, ngx_http_listen_ t *listen)1274 ngx_http_conf_port_t *port, ngx_http_listen_opt_t *lsopt) 1288 1275 { 1289 1276 ngx_http_conf_addr_t *addr; … … 1303 1290 } 1304 1291 1305 addr->sockaddr = (struct sockaddr *) &listen->sockaddr; 1306 addr->socklen = listen->socklen; 1292 addr->opt = *lsopt; 1307 1293 addr->hash.buckets = NULL; 1308 1294 addr->hash.size = 0; 1309 1295 addr->wc_head = NULL; 1310 1296 addr->wc_tail = NULL; 1311 addr->names.elts = NULL;1312 1297 #if (NGX_PCRE) 1313 1298 addr->nregex = 0; 1314 1299 addr->regex = NULL; 1315 1300 #endif 1316 addr->core_srv_conf = cscf; 1317 addr->default_server = listen->conf.default_server; 1318 addr->bind = listen->conf.bind; 1319 addr->wildcard = listen->conf.wildcard; 1320 #if (NGX_HTTP_SSL) 1321 addr->ssl = listen->conf.ssl; 1322 #endif 1323 addr->listen_conf = &listen->conf; 1324 1325 return ngx_http_add_names(cf, cscf, addr); 1326 } 1327 1328 1329 /* 1330 * add the server names and the server core module 1331 * configurations to the address:port 1332 */ 1301 addr->default_server = cscf; 1302 addr->servers.elts = NULL; 1303 1304 return ngx_http_add_server(cf, cscf, addr); 1305 } 1306 1307 1308 /* add the server core module configuration to the address:port */ 1333 1309 1334 1310 static ngx_int_t 1335 ngx_http_add_ names(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf,1311 ngx_http_add_server(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, 1336 1312 ngx_http_conf_addr_t *addr) 1337 1313 { 1338 ngx_uint_t i;1339 ngx_http_ server_name_t *server_names, *name;1340 1341 if (addr-> names.elts == NULL) {1342 if (ngx_array_init(&addr-> names, cf->temp_pool, 4,1343 sizeof(ngx_http_ server_name_t))1314 ngx_uint_t i; 1315 ngx_http_core_srv_conf_t **server; 1316 1317 if (addr->servers.elts == NULL) { 1318 if (ngx_array_init(&addr->servers, cf->temp_pool, 4, 1319 sizeof(ngx_http_core_srv_conf_t *)) 1344 1320 != NGX_OK) 1345 1321 { 1346 1322 return NGX_ERROR; 1347 1323 } 1348 } 1349 1350 server_names = cscf->server_names.elts; 1351 1352 for (i = 0; i < cscf->server_names.nelts; i++) { 1353 1354 ngx_strlow(server_names[i].name.data, server_names[i].name.data, 1355 server_names[i].name.len); 1356 1357 ngx_log_debug1(NGX_LOG_DEBUG_HTTP, cf->log, 0, 1358 "name: %V", &server_names[i].name); 1359 1360 name = ngx_array_push(&addr->names); 1361 if (name == NULL) { 1362 return NGX_ERROR; 1363 } 1364 1365 *name = server_names[i]; 1366 } 1324 1325 } else { 1326 server = addr->servers.elts; 1327 for (i = 0; i < addr->servers.nelts; i++) { 1328 if (server[i] == cscf) { 1329 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 1330 "a duplicate listen %s", addr->opt.addr); 1331 return NGX_ERROR; 1332 } 1333 } 1334 } 1335 1336 server = ngx_array_push(&addr->servers); 1337 if (server == NULL) { 1338 return NGX_ERROR; 1339 } 1340 1341 *server = cscf; 1367 1342 1368 1343 return NGX_OK; … … 1374 1349 ngx_array_t *ports) 1375 1350 { 1376 ngx_uint_t s, p, a; 1377 ngx_http_conf_port_t *port; 1378 ngx_http_conf_addr_t *addr; 1379 ngx_http_server_name_t *name; 1351 ngx_uint_t p, a; 1352 ngx_http_conf_port_t *port; 1353 ngx_http_conf_addr_t *addr; 1380 1354 1381 1355 port = ports->elts; … … 1393 1367 for (a = 0; a < port[p].addrs.nelts; a++) { 1394 1368 1395 name = addr[a].names.elts; 1396 for (s = 0; s < addr[a].names.nelts; s++) { 1397 1398 if (addr[a].core_srv_conf == name[s].core_srv_conf 1369 if (addr[a].servers.nelts > 1 1399 1370 #if (NGX_PCRE) 1400 && name[s].captures == 0 1401 #endif 1402 ) 1403 { 1404 continue; 1405 } 1406 1371 || addr[a].default_server->captures 1372 #endif 1373 ) 1374 { 1407 1375 if (ngx_http_server_names(cf, cmcf, &addr[a]) != NGX_OK) { 1408 1376 return NGX_ERROR; 1409 1377 } 1410 1411 break;1412 1378 } 1413 1379 } … … 1426 1392 ngx_http_conf_addr_t *addr) 1427 1393 { 1428 ngx_int_t rc; 1429 ngx_uint_t s; 1430 ngx_hash_init_t hash; 1431 ngx_hash_keys_arrays_t ha; 1432 ngx_http_server_name_t *name; 1394 ngx_int_t rc; 1395 ngx_uint_t n, s; 1396 ngx_hash_init_t hash; 1397 ngx_hash_keys_arrays_t ha; 1398 ngx_http_server_name_t *name; 1399 ngx_http_core_srv_conf_t **cscfp; 1433 1400 #if (NGX_PCRE) 1434 ngx_uint_t regex, i;1401 ngx_uint_t regex, i; 1435 1402 1436 1403 regex = 0; … … 1450 1417 } 1451 1418 1452 name = addr->names.elts; 1453 1454 for (s = 0; s < addr->names.nelts; s++) { 1419 cscfp = addr->servers.elts; 1420 1421 for (s = 0; s < addr->servers.nelts; s++) { 1422 1423 name = cscfp[s]->server_names.elts; 1424 1425 for (n = 0; n < cscfp[s]->server_names.nelts; n++) { 1455 1426 1456 1427 #if (NGX_PCRE) 1457 if (name[s].regex) {1458 regex++;1459 continue;1460 }1461 #endif 1462 1463 rc = ngx_hash_add_key(&ha, &name[s].name, name[s].core_srv_conf,1464 NGX_HASH_WILDCARD_KEY);1465 1466 if (rc == NGX_ERROR) {1467 return NGX_ERROR;1468 }1469 1470 if (rc == NGX_DECLINED) {1471 ngx_log_error(NGX_LOG_EMERG, cf->log, 0,1472 "invalid server name or wildcard \"%V\" on %s",1473 &name[s].name, addr->listen_conf->addr);1474 return NGX_ERROR;1475 }1476 1477 if (rc == NGX_BUSY) {1428 if (name[n].regex) { 1429 regex++; 1430 continue; 1431 } 1432 #endif 1433 1434 rc = ngx_hash_add_key(&ha, &name[n].name, name[n].server, 1435 NGX_HASH_WILDCARD_KEY); 1436 1437 if (rc == NGX_ERROR) { 1438 return NGX_ERROR; 1439 } 1440 1441 if (rc == NGX_DECLINED) { 1442 ngx_log_error(NGX_LOG_EMERG, cf->log, 0, 1443 "invalid server name or wildcard \"%V\" on %s", 1444 &name[n].name, addr->opt.addr); 1445 return NGX_ERROR; 1446 } 1447 1448 if (rc == NGX_BUSY) { 1478 1449 ngx_log_error(NGX_LOG_WARN, cf->log, 0, 1479 "conflicting server name \"%V\" on %s, ignored", 1480 &name[s].name, addr->listen_conf->addr); 1450 "conflicting server name \"%V\" on %s, ignored", 1451 &name[n].name, addr->opt.addr); 1452 } 1481 1453 } 1482 1454 } … … 1547 1519 } 1548 1520 1549 for (i = 0, s = 0; s < addr->names.nelts; s++) { 1550 if (name[s].regex) { 1551 addr->regex[i++] = name[s]; 1521 i = 0; 1522 1523 for (s = 0; s < addr->servers.nelts; s++) { 1524 1525 name = cscfp[s]->server_names.elts; 1526 1527 for (n = 0; n < cscfp[s]->server_names.nelts; n++) { 1528 if (name[n].regex) { 1529 addr->regex[i++] = name[n]; 1530 } 1552 1531 } 1553 1532 } … … 1573 1552 second = (ngx_http_conf_addr_t *) two; 1574 1553 1575 if (first-> wildcard) {1554 if (first->opt.wildcard) { 1576 1555 /* a wildcard address must be the last resort, shift it to the end */ 1577 1556 return 1; 1578 1557 } 1579 1558 1580 if (first-> bind && !second->bind) {1559 if (first->opt.bind && !second->opt.bind) { 1581 1560 /* shift explicit bind()ed addresses to the start */ 1582 1561 return -1; 1583 1562 } 1584 1563 1585 if (!first-> bind && second->bind) {1564 if (!first->opt.bind && second->opt.bind) { 1586 1565 /* shift explicit bind()ed addresses to the start */ 1587 1566 return 1; … … 1624 1603 */ 1625 1604 1626 if (addr[last - 1]. wildcard) {1627 addr[last - 1]. bind = 1;1605 if (addr[last - 1].opt.wildcard) { 1606 addr[last - 1].opt.bind = 1; 1628 1607 bind_wildcard = 1; 1629 1608 … … 1636 1615 while (i < last) { 1637 1616 1638 if (bind_wildcard && !addr[i]. bind) {1617 if (bind_wildcard && !addr[i].opt.bind) { 1639 1618 i++; 1640 1619 continue; … … 1692 1671 ngx_http_core_srv_conf_t *cscf; 1693 1672 1694 ls = ngx_create_listening(cf, addr-> sockaddr, addr->socklen);1673 ls = ngx_create_listening(cf, addr->opt.sockaddr, addr->opt.socklen); 1695 1674 if (ls == NULL) { 1696 1675 return NULL; … … 1701 1680 ls->handler = ngx_http_init_connection; 1702 1681 1703 cscf = addr-> core_srv_conf;1682 cscf = addr->default_server; 1704 1683 ls->pool_size = cscf->connection_pool_size; 1705 1684 ls->post_accept_timeout = cscf->client_header_timeout; … … 1722 1701 #endif 1723 1702 1724 ls->backlog = addr-> listen_conf->backlog;1725 ls->rcvbuf = addr-> listen_conf->rcvbuf;1726 ls->sndbuf = addr-> listen_conf->sndbuf;1703 ls->backlog = addr->opt.backlog; 1704 ls->rcvbuf = addr->opt.rcvbuf; 1705 ls->sndbuf = addr->opt.sndbuf; 1727 1706 1728 1707 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER) 1729 ls->accept_filter = addr-> listen_conf->accept_filter;1708 ls->accept_filter = addr->opt.accept_filter; 1730 1709 #endif 1731 1710 1732 1711 #if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT) 1733 ls->deferred_accept = addr-> listen_conf->deferred_accept;1712 ls->deferred_accept = addr->opt.deferred_accept; 1734 1713 #endif 1735 1714 1736 1715 #if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) 1737 ls->ipv6only = addr-> listen_conf->ipv6only;1716 ls->ipv6only = addr->opt.ipv6only; 1738 1717 #endif 1739 1718 … … 1761 1740 for (i = 0; i < hport->naddrs; i++) { 1762 1741 1763 sin = (struct sockaddr_in *) addr[i]. sockaddr;1742 sin = (struct sockaddr_in *) addr[i].opt.sockaddr; 1764 1743 addrs[i].addr = sin->sin_addr.s_addr; 1765 addrs[i].conf. core_srv_conf = addr[i].core_srv_conf;1744 addrs[i].conf.default_server = addr[i].default_server; 1766 1745 #if (NGX_HTTP_SSL) 1767 addrs[i].conf.ssl = addr[i]. ssl;1746 addrs[i].conf.ssl = addr[i].opt.ssl; 1768 1747 #endif 1769 1748 … … 1822 1801 for (i = 0; i < hport->naddrs; i++) { 1823 1802 1824 sin6 = (struct sockaddr_in6 *) addr[i]. sockaddr;1803 sin6 = (struct sockaddr_in6 *) addr[i].opt.sockaddr; 1825 1804 addrs6[i].addr6 = sin6->sin6_addr; 1826 addrs6[i].conf. core_srv_conf = addr[i].core_srv_conf;1805 addrs6[i].conf.default_server = addr[i].default_server; 1827 1806 #if (NGX_HTTP_SSL) 1828 addrs6[i].conf.ssl = addr[i]. ssl;1807 addrs6[i].conf.ssl = addr[i].opt.ssl; 1829 1808 #endif 1830 1809 -
server/src/http/ngx_http.h
r5ff46b rc7670f 58 58 ngx_int_t ngx_http_add_location(ngx_conf_t *cf, ngx_queue_t **locations, 59 59 ngx_http_core_loc_conf_t *clcf); 60 ngx_int_t ngx_http_add_listen(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, 61 ngx_http_listen_opt_t *lsopt); 60 62 61 63 … … 119 121 120 122 ngx_int_t ngx_http_discard_request_body(ngx_http_request_t *r); 123 void ngx_http_discarded_request_body_handler(ngx_http_request_t *r); 121 124 void ngx_http_block_reading(ngx_http_request_t *r); 122 125 void ngx_http_test_reading(ngx_http_request_t *r); -
server/src/http/ngx_http_core_module.c
r89d9dc rc7670f 2808 2808 */ 2809 2809 2810 if (ngx_array_init(&cscf->listen, cf->temp_pool, 4,2811 sizeof(ngx_http_listen_t))2812 != NGX_OK)2813 {2814 return NULL;2815 }2816 2817 2810 if (ngx_array_init(&cscf->server_names, cf->temp_pool, 4, 2818 2811 sizeof(ngx_http_server_name_t)) … … 2840 2833 ngx_http_core_srv_conf_t *conf = child; 2841 2834 2842 ngx_http_listen_t *ls;2843 2835 struct sockaddr_in *sin; 2836 ngx_http_listen_opt_t lsopt; 2844 2837 ngx_http_server_name_t *sn; 2845 2838 2846 2839 /* TODO: it does not merge, it inits only */ 2847 2840 2848 if (conf->listen.nelts == 0) { 2849 ls = ngx_array_push(&conf->listen); 2850 if (ls == NULL) { 2851 return NGX_CONF_ERROR; 2852 } 2853 2854 ngx_memzero(ls, sizeof(ngx_http_listen_t)); 2855 2856 sin = (struct sockaddr_in *) &ls->sockaddr; 2841 if (!conf->listen) { 2842 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); 2843 2844 sin = (struct sockaddr_in *) &lsopt.sockaddr; 2857 2845 2858 2846 sin->sin_family = AF_INET; … … 2864 2852 sin->sin_addr.s_addr = INADDR_ANY; 2865 2853 2866 ls ->socklen = sizeof(struct sockaddr_in);2867 2868 ls ->conf.backlog = NGX_LISTEN_BACKLOG;2869 ls ->conf.rcvbuf = -1;2870 ls ->conf.sndbuf = -1;2871 ls ->conf.wildcard = 1;2872 2873 (void) ngx_sock_ntop((struct sockaddr *) &ls ->sockaddr, ls->conf.addr,2854 lsopt.socklen = sizeof(struct sockaddr_in); 2855 2856 lsopt.backlog = NGX_LISTEN_BACKLOG; 2857 lsopt.rcvbuf = -1; 2858 lsopt.sndbuf = -1; 2859 lsopt.wildcard = 1; 2860 2861 (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr, 2874 2862 NGX_SOCKADDR_STRLEN, 1); 2863 2864 if (ngx_http_add_listen(cf, conf, &lsopt) == NGX_OK) { 2865 return NGX_CONF_OK; 2866 } 2875 2867 } 2876 2868 … … 2885 2877 #if (NGX_PCRE) 2886 2878 sn->regex = NULL; 2887 sn->captures = 0;2888 2879 #endif 2889 sn-> core_srv_conf= conf;2880 sn->server = conf; 2890 2881 sn->name.len = conf->server_name.len; 2891 2882 sn->name.data = conf->server_name.data; … … 3274 3265 ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 3275 3266 { 3276 ngx_http_core_srv_conf_t *scf = conf; 3277 3278 ngx_str_t *value, size; 3279 ngx_url_t u; 3280 ngx_uint_t n; 3281 ngx_http_listen_t *ls; 3282 3283 /* 3284 * TODO: check duplicate 'listen' directives, 3285 * add resolved name to server names ??? 3286 */ 3267 ngx_http_core_srv_conf_t *cscf = conf; 3268 3269 ngx_str_t *value, size; 3270 ngx_url_t u; 3271 ngx_uint_t n; 3272 ngx_http_listen_opt_t lsopt; 3273 3274 cscf->listen = 1; 3287 3275 3288 3276 value = cf->args->elts; … … 3304 3292 } 3305 3293 3306 ls = ngx_array_push(&scf->listen); 3307 if (ls == NULL) { 3308 return NGX_CONF_ERROR; 3309 } 3310 3311 ngx_memzero(ls, sizeof(ngx_http_listen_t)); 3312 3313 ngx_memcpy(ls->sockaddr, u.sockaddr, u.socklen); 3314 3315 ls->socklen = u.socklen; 3316 ls->file_name = cf->conf_file->file.name.data; 3317 ls->line = cf->conf_file->line; 3318 ls->conf.backlog = NGX_LISTEN_BACKLOG; 3319 ls->conf.rcvbuf = -1; 3320 ls->conf.sndbuf = -1; 3321 ls->conf.wildcard = u.wildcard; 3322 3323 (void) ngx_sock_ntop((struct sockaddr *) &ls->sockaddr, ls->conf.addr, 3294 ngx_memzero(&lsopt, sizeof(ngx_http_listen_opt_t)); 3295 3296 ngx_memcpy(lsopt.sockaddr, u.sockaddr, u.socklen); 3297 3298 lsopt.socklen = u.socklen; 3299 lsopt.backlog = NGX_LISTEN_BACKLOG; 3300 lsopt.rcvbuf = -1; 3301 lsopt.sndbuf = -1; 3302 lsopt.wildcard = u.wildcard; 3303 3304 (void) ngx_sock_ntop((struct sockaddr *) &lsopt.sockaddr, lsopt.addr, 3324 3305 NGX_SOCKADDR_STRLEN, 1); 3325 3306 3326 if (cf->args->nelts == 2) { 3327 return NGX_CONF_OK; 3328 } 3329 3330 if (ngx_strcmp(value[2].data, "default") == 0) { 3331 ls->conf.default_server = 1; 3332 n = 3; 3333 3334 } else { 3335 n = 2; 3336 } 3337 3338 for ( /* void */ ; n < cf->args->nelts; n++) { 3339 3340 if (ls->conf.default_server == 0) { 3341 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 3342 "\"%V\" parameter can be specified for " 3343 "the default \"listen\" directive only", 3344 &value[n]); 3345 return NGX_CONF_ERROR; 3307 for (n = 2; n < cf->args->nelts; n++) { 3308 3309 if (ngx_strcmp(value[n].data, "default_server") == 0 3310 || ngx_strcmp(value[n].data, "default") == 0) 3311 { 3312 lsopt.default_server = 1; 3313 continue; 3346 3314 } 3347 3315 3348 3316 if (ngx_strcmp(value[n].data, "bind") == 0) { 3349 ls->conf.bind = 1; 3317 lsopt.set = 1; 3318 lsopt.bind = 1; 3350 3319 continue; 3351 3320 } 3352 3321 3353 3322 if (ngx_strncmp(value[n].data, "backlog=", 8) == 0) { 3354 ls->conf.backlog = ngx_atoi(value[n].data + 8, value[n].len - 8); 3355 ls->conf.bind = 1; 3356 3357 if (ls->conf.backlog == NGX_ERROR || ls->conf.backlog == 0) { 3323 lsopt.backlog = ngx_atoi(value[n].data + 8, value[n].len - 8); 3324 lsopt.set = 1; 3325 lsopt.bind = 1; 3326 3327 if (lsopt.backlog == NGX_ERROR || lsopt.backlog == 0) { 3358 3328 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 3359 3329 "invalid backlog \"%V\"", &value[n]); … … 3368 3338 size.data = value[n].data + 7; 3369 3339 3370 ls->conf.rcvbuf = ngx_parse_size(&size); 3371 ls->conf.bind = 1; 3372 3373 if (ls->conf.rcvbuf == NGX_ERROR) { 3340 lsopt.rcvbuf = ngx_parse_size(&size); 3341 lsopt.set = 1; 3342 lsopt.bind = 1; 3343 3344 if (lsopt.rcvbuf == NGX_ERROR) { 3374 3345 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 3375 3346 "invalid rcvbuf \"%V\"", &value[n]); … … 3384 3355 size.data = value[n].data + 7; 3385 3356 3386 ls->conf.sndbuf = ngx_parse_size(&size); 3387 ls->conf.bind = 1; 3388 3389 if (ls->conf.sndbuf == NGX_ERROR) { 3357 lsopt.sndbuf = ngx_parse_size(&size); 3358 lsopt.set = 1; 3359 lsopt.bind = 1; 3360 3361 if (lsopt.sndbuf == NGX_ERROR) { 3390 3362 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 3391 3363 "invalid sndbuf \"%V\"", &value[n]); … … 3398 3370 if (ngx_strncmp(value[n].data, "accept_filter=", 14) == 0) { 3399 3371 #if (NGX_HAVE_DEFERRED_ACCEPT && defined SO_ACCEPTFILTER) 3400 ls->conf.accept_filter = (char *) &value[n].data[14]; 3401 ls->conf.bind = 1; 3372 lsopt.accept_filter = (char *) &value[n].data[14]; 3373 lsopt.set = 1; 3374 lsopt.bind = 1; 3402 3375 #else 3403 3376 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, … … 3411 3384 if (ngx_strcmp(value[n].data, "deferred") == 0) { 3412 3385 #if (NGX_HAVE_DEFERRED_ACCEPT && defined TCP_DEFER_ACCEPT) 3413 ls->conf.deferred_accept = 1; 3414 ls->conf.bind = 1; 3386 lsopt.deferred_accept = 1; 3387 lsopt.set = 1; 3388 lsopt.bind = 1; 3415 3389 #else 3416 3390 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, … … 3425 3399 struct sockaddr *sa; 3426 3400 3427 sa = (struct sockaddr *) ls ->sockaddr;3401 sa = (struct sockaddr *) lsopt.sockaddr; 3428 3402 3429 3403 if (sa->sa_family == AF_INET6) { 3430 3404 3431 3405 if (ngx_strcmp(&value[n].data[10], "n") == 0) { 3432 ls ->conf.ipv6only = 1;3406 lsopt.ipv6only = 1; 3433 3407 3434 3408 } else if (ngx_strcmp(&value[n].data[10], "ff") == 0) { 3435 ls ->conf.ipv6only = 2;3409 lsopt.ipv6only = 2; 3436 3410 3437 3411 } else { … … 3442 3416 } 3443 3417 3444 ls->conf.bind = 1; 3418 lsopt.set = 1; 3419 lsopt.bind = 1; 3445 3420 3446 3421 } else { 3447 3422 ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 3448 3423 "ipv6only is not supported " 3449 "on addr \"%s\", ignored", 3450 ls->conf.addr); 3424 "on addr \"%s\", ignored", lsopt.addr); 3451 3425 } 3452 3426 … … 3462 3436 if (ngx_strcmp(value[n].data, "ssl") == 0) { 3463 3437 #if (NGX_HTTP_SSL) 3464 ls->conf.ssl = 1; 3438 lsopt.set = 1; 3439 lsopt.ssl = 1; 3465 3440 continue; 3466 3441 #else … … 3477 3452 } 3478 3453 3479 return NGX_CONF_OK; 3454 if (ngx_http_add_listen(cf, cscf, &lsopt) == NGX_OK) { 3455 return NGX_CONF_OK; 3456 } 3457 3458 return NGX_CONF_ERROR; 3480 3459 } 3481 3460 … … 3549 3528 #if (NGX_PCRE) 3550 3529 sn->regex = NULL; 3551 sn->captures = 0;3552 3530 #endif 3553 sn-> core_srv_conf= cscf;3531 sn->server = cscf; 3554 3532 sn->name = value[i]; 3533 3534 ngx_strlow(sn->name.data, sn->name.data, sn->name.len); 3555 3535 3556 3536 if (value[i].data[0] != '~') { … … 3582 3562 } 3583 3563 3584 sn->captures = (ngx_regex_capture_count(sn->regex) > 0);3585 3564 sn->name = value[i]; 3565 cscf->captures = (ngx_regex_capture_count(sn->regex) > 0); 3586 3566 } 3587 3567 #else -
server/src/http/ngx_http_core_module.h
r89d9dc rc7670f 44 44 45 45 typedef struct { 46 u_char sockaddr[NGX_SOCKADDRLEN]; 47 socklen_t socklen; 48 49 unsigned set:1; 46 50 unsigned default_server:1; 47 51 unsigned bind:1; … … 66 70 67 71 u_char addr[NGX_SOCKADDR_STRLEN + 1]; 68 } ngx_http_listen_conf_t; 69 70 71 typedef struct { 72 u_char sockaddr[NGX_SOCKADDRLEN]; 73 socklen_t socklen; 74 75 u_char *file_name; 76 ngx_uint_t line; 77 78 ngx_http_listen_conf_t conf; 79 } ngx_http_listen_t; 72 } ngx_http_listen_opt_t; 80 73 81 74 … … 143 136 ngx_hash_keys_arrays_t *variables_keys; 144 137 138 ngx_array_t *ports; 139 145 140 ngx_uint_t try_files; /* unsigned try_files:1 */ 146 141 … … 150 145 151 146 typedef struct { 152 /* array of the ngx_http_listen_t, "listen" directive */153 ngx_array_t listen;154 155 147 /* array of the ngx_http_server_name_t, "server_name" directive */ 156 148 ngx_array_t server_names; … … 173 165 ngx_flag_t underscores_in_headers; 174 166 167 unsigned listen:1; 168 #if (NGX_PCRE) 169 unsigned captures:1; 170 #endif 171 175 172 ngx_http_core_loc_conf_t **named_locations; 176 173 } ngx_http_core_srv_conf_t; … … 182 179 typedef struct { 183 180 /* the default server configuration for this address:port */ 184 ngx_http_core_srv_conf_t * core_srv_conf;181 ngx_http_core_srv_conf_t *default_server; 185 182 186 183 ngx_http_virtual_names_t *virtual_names; … … 223 220 224 221 typedef struct { 225 struct sockaddr *sockaddr; 226 socklen_t socklen; 222 ngx_http_listen_opt_t opt; 227 223 228 224 ngx_hash_t hash; … … 230 226 ngx_hash_wildcard_t *wc_tail; 231 227 232 ngx_array_t names; /* array of ngx_http_server_name_t */233 234 228 #if (NGX_PCRE) 235 229 ngx_uint_t nregex; … … 238 232 239 233 /* the default server configuration for this address:port */ 240 ngx_http_core_srv_conf_t *core_srv_conf; 241 242 unsigned default_server:1; 243 unsigned bind:1; 244 unsigned wildcard:1; 245 #if (NGX_HTTP_SSL) 246 unsigned ssl:1; 247 #endif 248 249 ngx_http_listen_conf_t *listen_conf; 234 ngx_http_core_srv_conf_t *default_server; 235 ngx_array_t servers; /* array of ngx_http_core_srv_conf_t */ 250 236 } ngx_http_conf_addr_t; 251 237 … … 254 240 #if (NGX_PCRE) 255 241 ngx_regex_t *regex; 256 ngx_uint_t captures; /* unsigned captures:1; */ 257 #endif 258 ngx_http_core_srv_conf_t *core_srv_conf; /* virtual name server conf */ 242 #endif 243 ngx_http_core_srv_conf_t *server; /* virtual name server conf */ 259 244 ngx_str_t name; 260 245 }; -
server/src/http/ngx_http_parse_time.c
r2edd9f rc7670f 9 9 10 10 11 static intmday[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };11 static ngx_uint_t mday[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 12 12 13 13 time_t 14 14 ngx_http_parse_time(u_char *value, size_t len) 15 15 { 16 u_char *p, *end; 17 int day, month, year, hour, min, sec; 16 u_char *p, *end; 17 ngx_int_t month; 18 ngx_uint_t day, year, hour, min, sec; 19 uint64_t time; 18 20 enum { 19 21 no = 0, … … 230 232 } 231 233 232 #if (NGX_TIME_T_SIZE <= 4)233 234 if (year >= 2038) {235 return NGX_ERROR;236 }237 238 #endif239 240 234 /* 241 235 * shift new year to March 1 and start months from 1 (not 0), … … 250 244 /* Gauss' formula for Grigorian days since March 1, 1 BC */ 251 245 252 return(246 time = (uint64_t) ( 253 247 /* days in years including leap years since March 1, 1 BC */ 254 248 … … 269 263 270 264 - 719527 + 31 + 28) * 86400 + hour * 3600 + min * 60 + sec; 265 266 #if (NGX_TIME_T_SIZE <= 4) 267 268 if (time > 0x7fffffff) { 269 return NGX_ERROR; 270 } 271 272 #endif 273 274 return (time_t) time; 271 275 } -
server/src/http/ngx_http_request.c
r89d9dc rc7670f 382 382 383 383 /* the default server configuration for the address:port */ 384 cscf = addr_conf-> core_srv_conf;384 cscf = addr_conf->default_server; 385 385 386 386 r->main_conf = cscf->ctx->main_conf; … … 1689 1689 #if (NGX_PCRE) 1690 1690 1691 if ( r->virtual_names->nregex) {1691 if (len && r->virtual_names->nregex) { 1692 1692 size_t ncaptures; 1693 1693 ngx_int_t n; … … 1705 1705 for (i = 0; i < r->virtual_names->nregex; i++) { 1706 1706 1707 if (sn[i]. captures && r->captures == NULL) {1707 if (sn[i].server->captures && r->captures == NULL) { 1708 1708 1709 1709 ncaptures = (NGX_HTTP_MAX_CAPTURES + 1) * 3; … … 1731 1731 /* match */ 1732 1732 1733 cscf = sn[i]. core_srv_conf;1733 cscf = sn[i].server; 1734 1734 1735 1735 r->ncaptures = ncaptures; … … 2102 2102 ngx_http_core_loc_conf_t *clcf; 2103 2103 2104 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); 2105 2104 2106 if (r->main->count != 1) { 2107 2108 if (r->discard_body) { 2109 r->read_event_handler = ngx_http_discarded_request_body_handler; 2110 2111 if (r->lingering_time == 0) { 2112 r->lingering_time = ngx_time() 2113 + (time_t) (clcf->lingering_time / 1000); 2114 ngx_add_timer(r->connection->read, clcf->lingering_timeout); 2115 } 2116 } 2117 2105 2118 ngx_http_close_request(r, 0); 2106 2119 return; 2107 2120 } 2108 2109 clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module);2110 2121 2111 2122 if (!ngx_terminate … … 2134 2145 r->http_state = NGX_HTTP_WRITING_REQUEST_STATE; 2135 2146 2136 r->read_event_handler = ngx_http_test_reading; 2147 r->read_event_handler = r->discard_body ? 2148 ngx_http_discarded_request_body_handler: 2149 ngx_http_test_reading; 2137 2150 r->write_event_handler = ngx_http_writer; 2138 2151 … … 2235 2248 ngx_log_debug2(NGX_LOG_DEBUG_HTTP, wev->log, 0, 2236 2249 "http writer done: \"%V?%V\"", &r->uri, &r->args); 2250 2251 r->write_event_handler = ngx_http_request_empty_handler; 2237 2252 2238 2253 ngx_http_finalize_request(r, rc); -
server/src/http/ngx_http_request_body.c
r89d9dc rc7670f 14 14 static ngx_int_t ngx_http_write_request_body(ngx_http_request_t *r, 15 15 ngx_chain_t *body); 16 static void ngx_http_read_discarded_request_body_handler(ngx_http_request_t *r);17 16 static ngx_int_t ngx_http_read_discarded_request_body(ngx_http_request_t *r); 18 17 static ngx_int_t ngx_http_test_expect(ngx_http_request_t *r); … … 461 460 if (size) { 462 461 if (r->headers_in.content_length_n > size) { 462 r->header_in->pos += size; 463 463 r->headers_in.content_length_n -= size; 464 464 … … 470 470 } 471 471 472 r->read_event_handler = ngx_http_ read_discarded_request_body_handler;472 r->read_event_handler = ngx_http_discarded_request_body_handler; 473 473 474 474 if (ngx_handle_read_event(rev, 0) != NGX_OK) { … … 488 488 489 489 490 staticvoid491 ngx_http_ read_discarded_request_body_handler(ngx_http_request_t *r)490 void 491 ngx_http_discarded_request_body_handler(ngx_http_request_t *r) 492 492 { 493 493 ngx_int_t rc; … … 503 503 c->timedout = 1; 504 504 c->error = 1; 505 ngx_http_finalize_request(r, 0);505 ngx_http_finalize_request(r, NGX_ERROR); 506 506 return; 507 507 } … … 513 513 r->discard_body = 0; 514 514 r->lingering_close = 0; 515 ngx_http_finalize_request(r, 0);515 ngx_http_finalize_request(r, NGX_ERROR); 516 516 return; 517 517 } … … 524 524 525 525 if (rc == NGX_OK) { 526 527 526 r->discard_body = 0; 528 527 r->lingering_close = 0; 529 530 if (r->done) { 531 ngx_http_finalize_request(r, 0); 532 } 533 528 ngx_http_finalize_request(r, NGX_DONE); 534 529 return; 535 530 } … … 539 534 if (ngx_handle_read_event(rev, 0) != NGX_OK) { 540 535 c->error = 1; 541 ngx_http_finalize_request(r, rc);536 ngx_http_finalize_request(r, NGX_ERROR); 542 537 return; 543 538 } -
server/src/os/unix/ngx_process_cycle.c
ra9a481 rc7670f 676 676 } 677 677 678 ngx_close_listening_sockets(cycle); 679 678 680 /* 679 681 * Copy ngx_cycle->log related data to the special static exit cycle,
Note: See TracChangeset
for help on using the changeset viewer.
