Mercurial > hg > nginx-vendor-0-8
diff src/core/ngx_inet.c @ 266:251bcd11a5b8 NGINX_0_5_3
nginx 0.5.3
*) Feature: the ngx_http_perl_module supports the $r->status,
$r->log_error, and $r->sleep methods.
*) Feature: the $r->variable method supports variables that do not
exist in nginx configuration.
*) Bugfix: the $r->has_request_body method did not work.
author | Igor Sysoev <http://sysoev.ru> |
---|---|
date | Wed, 13 Dec 2006 00:00:00 +0300 |
parents | e0b1d0a6c629 |
children | 5bef04fc3fd5 |
line wrap: on
line diff
--- a/src/core/ngx_inet.c +++ b/src/core/ngx_inet.c @@ -221,8 +221,8 @@ ngx_ptocidr(ngx_str_t *text, void *cidr) ngx_int_t ngx_parse_url(ngx_conf_t *cf, ngx_url_t *u) { - u_char *p, *host; - size_t len; + u_char *p, *host, *port_start; + size_t len, port_len; ngx_int_t port; ngx_uint_t i; struct hostent *h; @@ -290,8 +290,7 @@ ngx_parse_url(ngx_conf_t *cf, ngx_url_t u->host.len = len; u->host.data = p; - u->host_header.len = sizeof("localhost") - 1; - u->host_header.data = (u_char *) "localhost"; + u->unix_socket = 1; return NGX_OK; @@ -309,17 +308,18 @@ ngx_parse_url(ngx_conf_t *cf, ngx_url_t } u->host.data = p; - u->host_header.len = len; - u->host_header.data = p; + + port_start = NULL; + port_len = 0; for (i = 0; i < len; i++) { if (p[i] == ':') { - u->port.data = &p[i + 1]; + port_start = &p[i + 1]; u->host.len = i; if (!u->uri_part) { - u->port.len = len - (i + 1); + port_len = len - (i + 1); break; } } @@ -327,20 +327,19 @@ ngx_parse_url(ngx_conf_t *cf, ngx_url_t if (p[i] == '/') { u->uri.len = len - i; u->uri.data = &p[i]; - u->host_header.len = i; if (u->host.len == 0) { u->host.len = i; } - if (u->port.data == NULL) { + if (port_start == NULL) { u->no_port = 1; goto no_port; } - u->port.len = &p[i] - u->port.data; + port_len = &p[i] - port_start; - if (u->port.len == 0) { + if (port_len == 0) { u->err = "invalid port"; return NGX_ERROR; } @@ -349,18 +348,18 @@ ngx_parse_url(ngx_conf_t *cf, ngx_url_t } } - if (u->port.data) { + if (port_start) { - if (u->port.len == 0) { - u->port.len = &p[i] - u->port.data; + if (port_len == 0) { + port_len = &p[i] - port_start; - if (u->port.len == 0) { + if (port_len == 0) { u->err = "invalid port"; return NGX_ERROR; } } - port = ngx_atoi(u->port.data, u->port.len); + port = ngx_atoi(port_start, port_len); if (port == NGX_ERROR || port < 1 || port > 65536) { u->err = "invalid port"; @@ -377,24 +376,22 @@ ngx_parse_url(ngx_conf_t *cf, ngx_url_t goto no_port; } - u->port.len = len; - u->port.data = p; u->wildcard = 1; } - u->portn = (in_port_t) port; + u->port = (in_port_t) port; no_port: if (u->listen) { - if (u->portn == 0) { - if (u->default_portn == 0) { + if (u->port == 0) { + if (u->default_port == 0) { u->err = "no port"; return NGX_ERROR; } - u->portn = u->default_portn; + u->port = u->default_port; } if (u->host.len == 1 && u->host.data[0] == '*') { @@ -422,7 +419,7 @@ no_port: return NGX_ERROR; } - u->addr.in_addr = *(in_addr_t *)(h->h_addr_list[0]); + u->addr.in_addr = *(in_addr_t *) (h->h_addr_list[0]); } } else { @@ -432,28 +429,6 @@ no_port: return NGX_OK; } - if (u->no_port) { - - if (u->default_portn == 0 && !u->upstream) { - u->err = "no port"; - return NGX_ERROR; - } - - u->portn = u->default_portn; - - u->port.data = ngx_palloc(cf->pool, sizeof("65536") - 1); - if (u->port.data == NULL) { - return NGX_ERROR; - } - - u->port.len = ngx_sprintf(u->port.data, "%d", u->portn) - u->port.data; - - } else if (u->portn == 0) { - - u->err = "no port"; - return NGX_ERROR; - } - if (u->host.len == 0) { u->err = "no host"; return NGX_ERROR; @@ -463,6 +438,15 @@ no_port: return NGX_OK; } + if (u->no_port) { + u->port = u->default_port; + } + + if (u->port == 0) { + u->err = "no port"; + return NGX_ERROR; + } + if (ngx_inet_resolve_host(cf, u) != NGX_OK) { return NGX_ERROR; } @@ -474,7 +458,7 @@ no_port: ngx_int_t ngx_inet_resolve_host(ngx_conf_t *cf, ngx_url_t *u) { - u_char *host; + u_char *p, *host; size_t len; in_addr_t in_addr; ngx_uint_t i; @@ -524,7 +508,7 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng } sin->sin_family = AF_INET; - sin->sin_port = htons(u->portn); + sin->sin_port = htons(u->port); sin->sin_addr.s_addr = *(in_addr_t *) (h->h_addr_list[i]); u->addrs[i].sockaddr = (struct sockaddr *) sin; @@ -532,17 +516,15 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng len = INET_ADDRSTRLEN - 1 + 1 + sizeof(":65536") - 1; - u->addrs[i].name.data = ngx_palloc(cf->pool, len); - if (u->addrs[i].name.data == NULL) { + p = ngx_palloc(cf->pool, len); + if (p == NULL) { return NGX_ERROR; } - len = ngx_sock_ntop(AF_INET, (struct sockaddr *) sin, - u->addrs[i].name.data, len); + len = ngx_sock_ntop(AF_INET, (struct sockaddr *) sin, p, len); - u->addrs[i].name.len = ngx_sprintf(&u->addrs[i].name.data[len], - ":%d", u->portn) - - u->addrs[i].name.data; + u->addrs[i].name.len = ngx_sprintf(&p[len], ":%d", u->port) - p; + u->addrs[i].name.data = p; } } else { @@ -562,21 +544,19 @@ ngx_inet_resolve_host(ngx_conf_t *cf, ng u->naddrs = 1; sin->sin_family = AF_INET; - sin->sin_port = htons(u->portn); + sin->sin_port = htons(u->port); sin->sin_addr.s_addr = in_addr; u->addrs[0].sockaddr = (struct sockaddr *) sin; u->addrs[0].socklen = sizeof(struct sockaddr_in); - u->addrs[0].name.data = ngx_palloc(cf->pool, - u->host.len + sizeof(":65536") - 1); - if (u->addrs[0].name.data == NULL) { + p = ngx_palloc(cf->pool, u->host.len + sizeof(":65536") - 1); + if (p == NULL) { return NGX_ERROR; } - u->addrs[0].name.len = ngx_sprintf(u->addrs[0].name.data, "%V:%d", - &u->host, u->portn) - - u->addrs[0].name.data; + u->addrs[0].name.len = ngx_sprintf(p, "%V:%d", &u->host, u->port) - p; + u->addrs[0].name.data = p; } return NGX_OK;