Changeset c7670f


Ignore:
Timestamp:
10/30/09 18:13:41 (3 years ago)
Author:
George Potapov <nephrite@…>
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)
Message:

Vendor drop nginx v0.8.21

Location:
server
Files:
19 edited

Legend:

Unmodified
Added
Removed
  • server/CHANGES

    r178a98 rc7670f  
     1 
     2Changes 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 
    119 
    220Changes with nginx 0.8.20                                        14 Oct 2009 
     
    1432 
    1533    *) Bugfix: nginx/Windows might not create temporary file, a cache file,  
    16        or "proxy/fastcgi_store"d file if a worker has no enough access  
     34       or "proxy/fastcgi_store"d file if a worker had no enough access  
    1735       rights for top level directories. 
    1836 
  • 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 
    120 
    221éÚÍÅÎÅÎÉÑ × nginx 0.8.20                                          14.10.2009 
  • server/src/core/nginx.c

    r178a98 rc7670f  
    240240            ngx_log_stderr(0, "built by " NGX_COMPILER); 
    241241#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 
    242249            ngx_log_stderr(0, "configure arguments:" NGX_CONFIGURE); 
    243250        } 
  • server/src/core/nginx.h

    r178a98 rc7670f  
    99 
    1010 
    11 #define nginx_version         8020 
    12 #define NGINX_VERSION      "0.8.20" 
     11#define nginx_version         8021 
     12#define NGINX_VERSION      "0.8.21" 
    1313#define NGINX_VER          "nginx/" NGINX_VERSION 
    1414 
  • server/src/core/ngx_connection.c

    r39134b rc7670f  
    1616ngx_create_listening(ngx_conf_t *cf, void *sockaddr, socklen_t socklen) 
    1717{ 
     18    size_t            len; 
    1819    ngx_listening_t  *ls; 
    1920    struct sockaddr  *sa; 
     
    3738    ls->socklen = socklen; 
    3839 
    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; 
    5042 
    5143    switch (ls->sockaddr->sa_family) { 
     
    5345    case AF_INET6: 
    5446         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++; 
    5553         break; 
    5654#endif 
     
    6260         break; 
    6361    } 
     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; 
    6472 
    6573    ls->backlog = NGX_LISTEN_BACKLOG; 
     
    604612                          ngx_close_socket_n " %V failed", &ls[i].addr_text); 
    605613        } 
     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 
    606629 
    607630        ls[i].fd = (ngx_socket_t) -1; 
  • server/src/core/ngx_cycle.c

    r7ae6a5 rc7670f  
    205205    } 
    206206 
    207     ngx_memcpy(cycle->hostname.data, hostname, cycle->hostname.len); 
     207    ngx_strlow(cycle->hostname.data, (u_char *) hostname, cycle->hostname.len); 
    208208 
    209209 
  • server/src/core/ngx_inet.c

    r963ce7 rc7670f  
    6868    size_t                n; 
    6969    struct sockaddr_in6  *sin6; 
     70#endif 
     71#if (NGX_HAVE_UNIX_DOMAIN) 
     72    struct sockaddr_un   *saun; 
    7073#endif 
    7174 
     
    107110 
    108111        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 
    109123#endif 
    110124 
  • server/src/core/ngx_inet.h

    r963ce7 rc7670f  
    1313 
    1414 
    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  
    2215/* 
    23  * TODO: autoconfigure NGX_SOCKADDRLEN as 
     16 * TODO: autoconfigure NGX_SOCKADDRLEN and NGX_SOCKADDR_STRLEN as 
    2417 *       sizeof(struct sockaddr_storage) 
    2518 *       sizeof(struct sockaddr_un) 
     
    2720 *       sizeof(struct sockaddr_in) 
    2821 */ 
     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 
    2934 
    3035#if (NGX_HAVE_UNIX_DOMAIN) 
  • server/src/event/ngx_event_accept.c

    rf7c38d rc7670f  
    157157        c->unexpected_eof = 1; 
    158158 
     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 
    159170        rev = c->read; 
    160171        wev = c->write; 
  • server/src/http/modules/ngx_http_ssl_module.c

    r178a98 rc7670f  
    410410    { 
    411411        ngx_log_error(NGX_LOG_WARN, cf->log, 0, 
    412             "nginx was build with SNI support, however, now it is linked " 
     412            "nginx was built with SNI support, however, now it is linked " 
    413413            "dynamically to an OpenSSL library which has no tlsext support, " 
    414414            "therefore SNI is not available"); 
  • server/src/http/modules/perl/nginx.pm

    r178a98 rc7670f  
    4848); 
    4949 
    50 our $VERSION = '0.8.20'; 
     50our $VERSION = '0.8.21'; 
    5151 
    5252require XSLoader; 
  • server/src/http/ngx_http.c

    r096554 rc7670f  
    1818    ngx_http_core_main_conf_t *cmcf); 
    1919 
    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); 
    2520static ngx_int_t ngx_http_add_addresses(ngx_conf_t *cf, 
    2621    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); 
    2823static ngx_int_t ngx_http_add_address(ngx_conf_t *cf, 
    2924    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); 
     26static ngx_int_t ngx_http_add_server(ngx_conf_t *cf, 
    3227    ngx_http_core_srv_conf_t *cscf, ngx_http_conf_addr_t *addr); 
    3328 
     
    123118    ngx_uint_t                   mi, m, s; 
    124119    ngx_conf_t                   pcf; 
    125     ngx_array_t                  ports; 
    126120    ngx_http_module_t           *module; 
    127121    ngx_http_conf_ctx_t         *ctx; 
     
    363357 
    364358 
    365     /* 
    366      * create the lists of ports, addresses and server names 
    367      * to find quickly the server core module configuration at run-time 
    368      */ 
    369  
    370     if (ngx_http_init_server_lists(cf, &cmcf->servers, &ports) != NGX_OK) { 
    371         return NGX_CONF_ERROR; 
    372     } 
    373  
    374  
    375359    /* optimize the lists of ports, addresses and server names */ 
    376360 
    377     if (ngx_http_optimize_servers(cf, cmcf, &ports) != NGX_OK) { 
     361    if (ngx_http_optimize_servers(cf, cmcf, cmcf->ports) != NGX_OK) { 
    378362        return NGX_CONF_ERROR; 
    379363    } 
     
    11101094 
    11111095 
    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; 
     1096ngx_int_t 
     1097ngx_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; 
    11551106#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; 
    11601121 
    11611122    switch (sa->sa_family) { 
     
    11681129#endif 
    11691130 
     1131#if (NGX_HAVE_UNIX_DOMAIN) 
     1132    case AF_UNIX: 
     1133        p = 0; 
     1134        break; 
     1135#endif 
     1136 
    11701137    default: /* AF_INET */ 
    11711138        sin = (struct sockaddr_in *) sa; 
     
    11741141    } 
    11751142 
    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++) { 
    11781145 
    11791146        if (p != port[i].port || sa->sa_family != port[i].family) { 
     
    11831150        /* a port is already in the port list */ 
    11841151 
    1185         return ngx_http_add_addresses(cf, cscf, &port[i], listen); 
     1152        return ngx_http_add_addresses(cf, cscf, &port[i], lsopt); 
    11861153    } 
    11871154 
    11881155    /* add a port to the port list */ 
    11891156 
    1190     port = ngx_array_push(ports); 
     1157    port = ngx_array_push(cmcf->ports); 
    11911158    if (port == NULL) { 
    11921159        return NGX_ERROR; 
     
    11971164    port->addrs.elts = NULL; 
    11981165 
    1199     return ngx_http_add_address(cf, cscf, port, listen); 
     1166    return ngx_http_add_address(cf, cscf, port, lsopt); 
    12001167} 
    12011168 
     
    12031170static ngx_int_t 
    12041171ngx_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) 
    12061173{ 
    12071174    u_char                *p; 
    12081175    size_t                 len, off; 
    1209     ngx_uint_t             i; 
     1176    ngx_uint_t             i, default_server; 
    12101177    struct sockaddr       *sa; 
    12111178    ngx_http_conf_addr_t  *addr; 
     1179#if (NGX_HAVE_UNIX_DOMAIN) 
     1180    struct sockaddr_un    *saun; 
     1181#endif 
    12121182 
    12131183    /* 
     
    12161186     */ 
    12171187 
    1218     sa = (struct sockaddr *) &listen->sockaddr; 
     1188    sa = (struct sockaddr *) &lsopt->sockaddr; 
    12191189 
    12201190    switch (sa->sa_family) { 
     
    12271197#endif 
    12281198 
     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 
    12291206    default: /* AF_INET */ 
    12301207        off = offsetof(struct sockaddr_in, sin_addr); 
     
    12331210    } 
    12341211 
    1235     p = listen->sockaddr + off; 
     1212    p = lsopt->sockaddr + off; 
    12361213 
    12371214    addr = port->addrs.elts; 
     
    12391216    for (i = 0; i < port->addrs.nelts; i++) { 
    12401217 
    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) { 
    12421219            continue; 
    12431220        } 
     
    12451222        /* the address is already in the address list */ 
    12461223 
    1247         if (ngx_http_add_names(cf, cscf, &addr[i]) != NGX_OK) { 
     1224        if (ngx_http_add_server(cf, cscf, &addr[i]) != NGX_OK) { 
    12481225            return NGX_ERROR; 
    12491226        } 
    12501227 
     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 
    12511242        /* check the duplicate "default" server for this address:port */ 
    12521243 
    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); 
    12601249                return NGX_ERROR; 
    12611250            } 
    12621251 
    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; 
    12701257 
    12711258        return NGX_OK; 
     
    12741261    /* add the address to the addresses list that bound to this port */ 
    12751262 
    1276     return ngx_http_add_address(cf, cscf, port, listen); 
     1263    return ngx_http_add_address(cf, cscf, port, lsopt); 
    12771264} 
    12781265 
     
    12851272static ngx_int_t 
    12861273ngx_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) 
    12881275{ 
    12891276    ngx_http_conf_addr_t  *addr; 
     
    13031290    } 
    13041291 
    1305     addr->sockaddr = (struct sockaddr *) &listen->sockaddr; 
    1306     addr->socklen = listen->socklen; 
     1292    addr->opt = *lsopt; 
    13071293    addr->hash.buckets = NULL; 
    13081294    addr->hash.size = 0; 
    13091295    addr->wc_head = NULL; 
    13101296    addr->wc_tail = NULL; 
    1311     addr->names.elts = NULL; 
    13121297#if (NGX_PCRE) 
    13131298    addr->nregex = 0; 
    13141299    addr->regex = NULL; 
    13151300#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 */ 
    13331309 
    13341310static ngx_int_t 
    1335 ngx_http_add_names(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, 
     1311ngx_http_add_server(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, 
    13361312    ngx_http_conf_addr_t *addr) 
    13371313{ 
    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 *)) 
    13441320            != NGX_OK) 
    13451321        { 
    13461322            return NGX_ERROR; 
    13471323        } 
    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; 
    13671342 
    13681343    return NGX_OK; 
     
    13741349    ngx_array_t *ports) 
    13751350{ 
    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; 
    13801354 
    13811355    port = ports->elts; 
     
    13931367        for (a = 0; a < port[p].addrs.nelts; a++) { 
    13941368 
    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 
    13991370#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            { 
    14071375                if (ngx_http_server_names(cf, cmcf, &addr[a]) != NGX_OK) { 
    14081376                    return NGX_ERROR; 
    14091377                } 
    1410  
    1411                 break; 
    14121378            } 
    14131379        } 
     
    14261392    ngx_http_conf_addr_t *addr) 
    14271393{ 
    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; 
    14331400#if (NGX_PCRE) 
    1434     ngx_uint_t               regex, i; 
     1401    ngx_uint_t                  regex, i; 
    14351402 
    14361403    regex = 0; 
     
    14501417    } 
    14511418 
    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++) { 
    14551426 
    14561427#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) { 
    14781449            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            } 
    14811453        } 
    14821454    } 
     
    15471519    } 
    15481520 
    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            } 
    15521531        } 
    15531532    } 
     
    15731552    second = (ngx_http_conf_addr_t *) two; 
    15741553 
    1575     if (first->wildcard) { 
     1554    if (first->opt.wildcard) { 
    15761555        /* a wildcard address must be the last resort, shift it to the end */ 
    15771556        return 1; 
    15781557    } 
    15791558 
    1580     if (first->bind && !second->bind) { 
     1559    if (first->opt.bind && !second->opt.bind) { 
    15811560        /* shift explicit bind()ed addresses to the start */ 
    15821561        return -1; 
    15831562    } 
    15841563 
    1585     if (!first->bind && second->bind) { 
     1564    if (!first->opt.bind && second->opt.bind) { 
    15861565        /* shift explicit bind()ed addresses to the start */ 
    15871566        return 1; 
     
    16241603     */ 
    16251604 
    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; 
    16281607        bind_wildcard = 1; 
    16291608 
     
    16361615    while (i < last) { 
    16371616 
    1638         if (bind_wildcard && !addr[i].bind) { 
     1617        if (bind_wildcard && !addr[i].opt.bind) { 
    16391618            i++; 
    16401619            continue; 
     
    16921671    ngx_http_core_srv_conf_t  *cscf; 
    16931672 
    1694     ls = ngx_create_listening(cf, addr->sockaddr, addr->socklen); 
     1673    ls = ngx_create_listening(cf, addr->opt.sockaddr, addr->opt.socklen); 
    16951674    if (ls == NULL) { 
    16961675        return NULL; 
     
    17011680    ls->handler = ngx_http_init_connection; 
    17021681 
    1703     cscf = addr->core_srv_conf; 
     1682    cscf = addr->default_server; 
    17041683    ls->pool_size = cscf->connection_pool_size; 
    17051684    ls->post_accept_timeout = cscf->client_header_timeout; 
     
    17221701#endif 
    17231702 
    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; 
    17271706 
    17281707#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; 
    17301709#endif 
    17311710 
    17321711#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; 
    17341713#endif 
    17351714 
    17361715#if (NGX_HAVE_INET6 && defined IPV6_V6ONLY) 
    1737     ls->ipv6only = addr->listen_conf->ipv6only; 
     1716    ls->ipv6only = addr->opt.ipv6only; 
    17381717#endif 
    17391718 
     
    17611740    for (i = 0; i < hport->naddrs; i++) { 
    17621741 
    1763         sin = (struct sockaddr_in *) addr[i].sockaddr; 
     1742        sin = (struct sockaddr_in *) addr[i].opt.sockaddr; 
    17641743        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; 
    17661745#if (NGX_HTTP_SSL) 
    1767         addrs[i].conf.ssl = addr[i].ssl; 
     1746        addrs[i].conf.ssl = addr[i].opt.ssl; 
    17681747#endif 
    17691748 
     
    18221801    for (i = 0; i < hport->naddrs; i++) { 
    18231802 
    1824         sin6 = (struct sockaddr_in6 *) addr[i].sockaddr; 
     1803        sin6 = (struct sockaddr_in6 *) addr[i].opt.sockaddr; 
    18251804        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; 
    18271806#if (NGX_HTTP_SSL) 
    1828         addrs6[i].conf.ssl = addr[i].ssl; 
     1807        addrs6[i].conf.ssl = addr[i].opt.ssl; 
    18291808#endif 
    18301809 
  • server/src/http/ngx_http.h

    r5ff46b rc7670f  
    5858ngx_int_t ngx_http_add_location(ngx_conf_t *cf, ngx_queue_t **locations, 
    5959    ngx_http_core_loc_conf_t *clcf); 
     60ngx_int_t ngx_http_add_listen(ngx_conf_t *cf, ngx_http_core_srv_conf_t *cscf, 
     61    ngx_http_listen_opt_t *lsopt); 
    6062 
    6163 
     
    119121 
    120122ngx_int_t ngx_http_discard_request_body(ngx_http_request_t *r); 
     123void ngx_http_discarded_request_body_handler(ngx_http_request_t *r); 
    121124void ngx_http_block_reading(ngx_http_request_t *r); 
    122125void ngx_http_test_reading(ngx_http_request_t *r); 
  • server/src/http/ngx_http_core_module.c

    r89d9dc rc7670f  
    28082808     */ 
    28092809 
    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  
    28172810    if (ngx_array_init(&cscf->server_names, cf->temp_pool, 4, 
    28182811                       sizeof(ngx_http_server_name_t)) 
     
    28402833    ngx_http_core_srv_conf_t *conf = child; 
    28412834 
    2842     ngx_http_listen_t       *ls; 
    28432835    struct sockaddr_in      *sin; 
     2836    ngx_http_listen_opt_t    lsopt; 
    28442837    ngx_http_server_name_t  *sn; 
    28452838 
    28462839    /* TODO: it does not merge, it inits only */ 
    28472840 
    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; 
    28572845 
    28582846        sin->sin_family = AF_INET; 
     
    28642852        sin->sin_addr.s_addr = INADDR_ANY; 
    28652853 
    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, 
    28742862                             NGX_SOCKADDR_STRLEN, 1); 
     2863 
     2864        if (ngx_http_add_listen(cf, conf, &lsopt) == NGX_OK) { 
     2865            return NGX_CONF_OK; 
     2866        } 
    28752867    } 
    28762868 
     
    28852877#if (NGX_PCRE) 
    28862878        sn->regex = NULL; 
    2887         sn->captures = 0; 
    28882879#endif 
    2889         sn->core_srv_conf = conf; 
     2880        sn->server = conf; 
    28902881        sn->name.len = conf->server_name.len; 
    28912882        sn->name.data = conf->server_name.data; 
     
    32743265ngx_http_core_listen(ngx_conf_t *cf, ngx_command_t *cmd, void *conf) 
    32753266{ 
    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; 
    32873275 
    32883276    value = cf->args->elts; 
     
    33043292    } 
    33053293 
    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, 
    33243305                         NGX_SOCKADDR_STRLEN, 1); 
    33253306 
    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; 
    33463314        } 
    33473315 
    33483316        if (ngx_strcmp(value[n].data, "bind") == 0) { 
    3349             ls->conf.bind = 1; 
     3317            lsopt.set = 1; 
     3318            lsopt.bind = 1; 
    33503319            continue; 
    33513320        } 
    33523321 
    33533322        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) { 
    33583328                ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 
    33593329                                   "invalid backlog \"%V\"", &value[n]); 
     
    33683338            size.data = value[n].data + 7; 
    33693339 
    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) { 
    33743345                ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 
    33753346                                   "invalid rcvbuf \"%V\"", &value[n]); 
     
    33843355            size.data = value[n].data + 7; 
    33853356 
    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) { 
    33903362                ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 
    33913363                                   "invalid sndbuf \"%V\"", &value[n]); 
     
    33983370        if (ngx_strncmp(value[n].data, "accept_filter=", 14) == 0) { 
    33993371#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; 
    34023375#else 
    34033376            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 
     
    34113384        if (ngx_strcmp(value[n].data, "deferred") == 0) { 
    34123385#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; 
    34153389#else 
    34163390            ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 
     
    34253399            struct sockaddr  *sa; 
    34263400 
    3427             sa = (struct sockaddr *) ls->sockaddr; 
     3401            sa = (struct sockaddr *) lsopt.sockaddr; 
    34283402 
    34293403            if (sa->sa_family == AF_INET6) { 
    34303404 
    34313405                if (ngx_strcmp(&value[n].data[10], "n") == 0) { 
    3432                     ls->conf.ipv6only = 1; 
     3406                    lsopt.ipv6only = 1; 
    34333407 
    34343408                } else if (ngx_strcmp(&value[n].data[10], "ff") == 0) { 
    3435                     ls->conf.ipv6only = 2; 
     3409                    lsopt.ipv6only = 2; 
    34363410 
    34373411                } else { 
     
    34423416                } 
    34433417 
    3444                 ls->conf.bind = 1; 
     3418                lsopt.set = 1; 
     3419                lsopt.bind = 1; 
    34453420 
    34463421            } else { 
    34473422                ngx_conf_log_error(NGX_LOG_EMERG, cf, 0, 
    34483423                                   "ipv6only is not supported " 
    3449                                    "on addr \"%s\", ignored", 
    3450                                    ls->conf.addr); 
     3424                                   "on addr \"%s\", ignored", lsopt.addr); 
    34513425            } 
    34523426 
     
    34623436        if (ngx_strcmp(value[n].data, "ssl") == 0) { 
    34633437#if (NGX_HTTP_SSL) 
    3464             ls->conf.ssl = 1; 
     3438            lsopt.set = 1; 
     3439            lsopt.ssl = 1; 
    34653440            continue; 
    34663441#else 
     
    34773452    } 
    34783453 
    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; 
    34803459} 
    34813460 
     
    35493528#if (NGX_PCRE) 
    35503529        sn->regex = NULL; 
    3551         sn->captures = 0; 
    35523530#endif 
    3553         sn->core_srv_conf = cscf; 
     3531        sn->server = cscf; 
    35543532        sn->name = value[i]; 
     3533 
     3534        ngx_strlow(sn->name.data, sn->name.data, sn->name.len); 
    35553535 
    35563536        if (value[i].data[0] != '~') { 
     
    35823562        } 
    35833563 
    3584         sn->captures = (ngx_regex_capture_count(sn->regex) > 0); 
    35853564        sn->name = value[i]; 
     3565        cscf->captures = (ngx_regex_capture_count(sn->regex) > 0); 
    35863566        } 
    35873567#else 
  • server/src/http/ngx_http_core_module.h

    r89d9dc rc7670f  
    4444 
    4545typedef struct { 
     46    u_char                     sockaddr[NGX_SOCKADDRLEN]; 
     47    socklen_t                  socklen; 
     48 
     49    unsigned                   set:1; 
    4650    unsigned                   default_server:1; 
    4751    unsigned                   bind:1; 
     
    6670 
    6771    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; 
    8073 
    8174 
     
    143136    ngx_hash_keys_arrays_t    *variables_keys; 
    144137 
     138    ngx_array_t               *ports; 
     139 
    145140    ngx_uint_t                 try_files;       /* unsigned  try_files:1 */ 
    146141 
     
    150145 
    151146typedef struct { 
    152     /* array of the ngx_http_listen_t, "listen" directive */ 
    153     ngx_array_t                 listen; 
    154  
    155147    /* array of the ngx_http_server_name_t, "server_name" directive */ 
    156148    ngx_array_t                 server_names; 
     
    173165    ngx_flag_t                  underscores_in_headers; 
    174166 
     167    unsigned                    listen:1; 
     168#if (NGX_PCRE) 
     169    unsigned                    captures:1; 
     170#endif 
     171 
    175172    ngx_http_core_loc_conf_t  **named_locations; 
    176173} ngx_http_core_srv_conf_t; 
     
    182179typedef struct { 
    183180    /* 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; 
    185182 
    186183    ngx_http_virtual_names_t  *virtual_names; 
     
    223220 
    224221typedef struct { 
    225     struct sockaddr           *sockaddr; 
    226     socklen_t                  socklen; 
     222    ngx_http_listen_opt_t      opt; 
    227223 
    228224    ngx_hash_t                 hash; 
     
    230226    ngx_hash_wildcard_t       *wc_tail; 
    231227 
    232     ngx_array_t                names;      /* array of ngx_http_server_name_t */ 
    233  
    234228#if (NGX_PCRE) 
    235229    ngx_uint_t                 nregex; 
     
    238232 
    239233    /* 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 */ 
    250236} ngx_http_conf_addr_t; 
    251237 
     
    254240#if (NGX_PCRE) 
    255241    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 */ 
    259244    ngx_str_t                  name; 
    260245}; 
  • server/src/http/ngx_http_parse_time.c

    r2edd9f rc7670f  
    99 
    1010 
    11 static int mday[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 
     11static ngx_uint_t mday[] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 }; 
    1212 
    1313time_t 
    1414ngx_http_parse_time(u_char *value, size_t len) 
    1515{ 
    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; 
    1820    enum { 
    1921        no = 0, 
     
    230232    } 
    231233 
    232 #if (NGX_TIME_T_SIZE <= 4) 
    233  
    234     if (year >= 2038) { 
    235         return NGX_ERROR; 
    236     } 
    237  
    238 #endif 
    239  
    240234    /* 
    241235     * shift new year to March 1 and start months from 1 (not 0), 
     
    250244    /* Gauss' formula for Grigorian days since March 1, 1 BC */ 
    251245 
    252     return ( 
     246    time = (uint64_t) ( 
    253247            /* days in years including leap years since March 1, 1 BC */ 
    254248 
     
    269263 
    270264            - 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; 
    271275} 
  • server/src/http/ngx_http_request.c

    r89d9dc rc7670f  
    382382 
    383383    /* the default server configuration for the address:port */ 
    384     cscf = addr_conf->core_srv_conf; 
     384    cscf = addr_conf->default_server; 
    385385 
    386386    r->main_conf = cscf->ctx->main_conf; 
     
    16891689#if (NGX_PCRE) 
    16901690 
    1691     if (r->virtual_names->nregex) { 
     1691    if (len && r->virtual_names->nregex) { 
    16921692        size_t                   ncaptures; 
    16931693        ngx_int_t                n; 
     
    17051705        for (i = 0; i < r->virtual_names->nregex; i++) { 
    17061706 
    1707             if (sn[i].captures && r->captures == NULL) { 
     1707            if (sn[i].server->captures && r->captures == NULL) { 
    17081708 
    17091709                ncaptures = (NGX_HTTP_MAX_CAPTURES + 1) * 3; 
     
    17311731            /* match */ 
    17321732 
    1733             cscf = sn[i].core_srv_conf; 
     1733            cscf = sn[i].server; 
    17341734 
    17351735            r->ncaptures = ncaptures; 
     
    21022102    ngx_http_core_loc_conf_t  *clcf; 
    21032103 
     2104    clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); 
     2105 
    21042106    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 
    21052118        ngx_http_close_request(r, 0); 
    21062119        return; 
    21072120    } 
    2108  
    2109     clcf = ngx_http_get_module_loc_conf(r, ngx_http_core_module); 
    21102121 
    21112122    if (!ngx_terminate 
     
    21342145    r->http_state = NGX_HTTP_WRITING_REQUEST_STATE; 
    21352146 
    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; 
    21372150    r->write_event_handler = ngx_http_writer; 
    21382151 
     
    22352248    ngx_log_debug2(NGX_LOG_DEBUG_HTTP, wev->log, 0, 
    22362249                   "http writer done: \"%V?%V\"", &r->uri, &r->args); 
     2250 
     2251    r->write_event_handler = ngx_http_request_empty_handler; 
    22372252 
    22382253    ngx_http_finalize_request(r, rc); 
  • server/src/http/ngx_http_request_body.c

    r89d9dc rc7670f  
    1414static ngx_int_t ngx_http_write_request_body(ngx_http_request_t *r, 
    1515    ngx_chain_t *body); 
    16 static void ngx_http_read_discarded_request_body_handler(ngx_http_request_t *r); 
    1716static ngx_int_t ngx_http_read_discarded_request_body(ngx_http_request_t *r); 
    1817static ngx_int_t ngx_http_test_expect(ngx_http_request_t *r); 
     
    461460    if (size) { 
    462461        if (r->headers_in.content_length_n > size) { 
     462            r->header_in->pos += size; 
    463463            r->headers_in.content_length_n -= size; 
    464464 
     
    470470    } 
    471471 
    472     r->read_event_handler = ngx_http_read_discarded_request_body_handler; 
     472    r->read_event_handler = ngx_http_discarded_request_body_handler; 
    473473 
    474474    if (ngx_handle_read_event(rev, 0) != NGX_OK) { 
     
    488488 
    489489 
    490 static void 
    491 ngx_http_read_discarded_request_body_handler(ngx_http_request_t *r) 
     490void 
     491ngx_http_discarded_request_body_handler(ngx_http_request_t *r) 
    492492{ 
    493493    ngx_int_t                  rc; 
     
    503503        c->timedout = 1; 
    504504        c->error = 1; 
    505         ngx_http_finalize_request(r, 0); 
     505        ngx_http_finalize_request(r, NGX_ERROR); 
    506506        return; 
    507507    } 
     
    513513            r->discard_body = 0; 
    514514            r->lingering_close = 0; 
    515             ngx_http_finalize_request(r, 0); 
     515            ngx_http_finalize_request(r, NGX_ERROR); 
    516516            return; 
    517517        } 
     
    524524 
    525525    if (rc == NGX_OK) { 
    526  
    527526        r->discard_body = 0; 
    528527        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); 
    534529        return; 
    535530    } 
     
    539534    if (ngx_handle_read_event(rev, 0) != NGX_OK) { 
    540535        c->error = 1; 
    541         ngx_http_finalize_request(r, rc); 
     536        ngx_http_finalize_request(r, NGX_ERROR); 
    542537        return; 
    543538    } 
  • server/src/os/unix/ngx_process_cycle.c

    ra9a481 rc7670f  
    676676    } 
    677677 
     678    ngx_close_listening_sockets(cycle); 
     679 
    678680    /* 
    679681     * Copy ngx_cycle->log related data to the special static exit cycle, 
Note: See TracChangeset for help on using the changeset viewer.