mirror of
https://github.com/nginx/nginx.git
synced 2025-06-08 02:02:38 +08:00
change ngx_parse_addr() interface
This commit is contained in:
parent
72e928755b
commit
8b816d88a9
@ -416,66 +416,57 @@ ngx_ptocidr(ngx_str_t *text, ngx_cidr_t *cidr)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
ngx_addr_t *
|
ngx_int_t
|
||||||
ngx_parse_addr(ngx_pool_t *pool, ngx_str_t *addr)
|
ngx_parse_addr(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text, size_t len)
|
||||||
{
|
{
|
||||||
size_t len;
|
|
||||||
in_addr_t inaddr;
|
in_addr_t inaddr;
|
||||||
ngx_uint_t family;
|
ngx_uint_t family;
|
||||||
ngx_addr_t *a;
|
|
||||||
struct sockaddr_in *sin;
|
struct sockaddr_in *sin;
|
||||||
#if (NGX_HAVE_INET6)
|
#if (NGX_HAVE_INET6)
|
||||||
struct in6_addr inaddr6;
|
struct in6_addr inaddr6;
|
||||||
struct sockaddr_in6 *sin6;
|
struct sockaddr_in6 *sin6;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
inaddr = ngx_inet_addr(addr->data, addr->len);
|
inaddr = ngx_inet_addr(text, len);
|
||||||
|
|
||||||
if (inaddr != INADDR_NONE) {
|
if (inaddr != INADDR_NONE) {
|
||||||
family = AF_INET;
|
family = AF_INET;
|
||||||
len = sizeof(struct sockaddr_in);
|
len = sizeof(struct sockaddr_in);
|
||||||
|
|
||||||
#if (NGX_HAVE_INET6)
|
#if (NGX_HAVE_INET6)
|
||||||
} else if (ngx_inet6_addr(addr->data, addr->len, inaddr6.s6_addr) == NGX_OK)
|
} else if (ngx_inet6_addr(text, len, inaddr6.s6_addr) == NGX_OK) {
|
||||||
{
|
|
||||||
family = AF_INET6;
|
family = AF_INET6;
|
||||||
len = sizeof(struct sockaddr_in6);
|
len = sizeof(struct sockaddr_in6);
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
} else {
|
} else {
|
||||||
return NULL;
|
return NGX_DECLINED;
|
||||||
}
|
}
|
||||||
|
|
||||||
a = ngx_palloc(pool, sizeof(ngx_addr_t));
|
addr->sockaddr = ngx_pcalloc(pool, len);
|
||||||
if (a == NULL) {
|
if (addr->sockaddr == NULL) {
|
||||||
return NULL;
|
return NGX_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
a->sockaddr = ngx_pcalloc(pool, len);
|
addr->sockaddr->sa_family = (u_char) family;
|
||||||
if (a->sockaddr == NULL) {
|
addr->socklen = len;
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
a->sockaddr->sa_family = family;
|
|
||||||
a->socklen = len;
|
|
||||||
a->name = *addr;
|
|
||||||
|
|
||||||
switch (family) {
|
switch (family) {
|
||||||
|
|
||||||
#if (NGX_HAVE_INET6)
|
#if (NGX_HAVE_INET6)
|
||||||
case AF_INET6:
|
case AF_INET6:
|
||||||
sin6 = (struct sockaddr_in6 *) a->sockaddr;
|
sin6 = (struct sockaddr_in6 *) addr->sockaddr;
|
||||||
ngx_memcpy(sin6->sin6_addr.s6_addr, inaddr6.s6_addr, 16);
|
ngx_memcpy(sin6->sin6_addr.s6_addr, inaddr6.s6_addr, 16);
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
default: /* AF_INET */
|
default: /* AF_INET */
|
||||||
sin = (struct sockaddr_in *) a->sockaddr;
|
sin = (struct sockaddr_in *) addr->sockaddr;
|
||||||
sin->sin_addr.s_addr = inaddr;
|
sin->sin_addr.s_addr = inaddr;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return a;
|
return NGX_OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -109,7 +109,8 @@ size_t ngx_sock_ntop(struct sockaddr *sa, u_char *text, size_t len,
|
|||||||
ngx_uint_t port);
|
ngx_uint_t port);
|
||||||
size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len);
|
size_t ngx_inet_ntop(int family, void *addr, u_char *text, size_t len);
|
||||||
ngx_int_t ngx_ptocidr(ngx_str_t *text, ngx_cidr_t *cidr);
|
ngx_int_t ngx_ptocidr(ngx_str_t *text, ngx_cidr_t *cidr);
|
||||||
ngx_addr_t *ngx_parse_addr(ngx_pool_t *pool, ngx_str_t *addr);
|
ngx_int_t ngx_parse_addr(ngx_pool_t *pool, ngx_addr_t *addr, u_char *text,
|
||||||
|
size_t len);
|
||||||
ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u);
|
ngx_int_t ngx_parse_url(ngx_pool_t *pool, ngx_url_t *u);
|
||||||
ngx_int_t ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u);
|
ngx_int_t ngx_inet_resolve_host(ngx_pool_t *pool, ngx_url_t *u);
|
||||||
|
|
||||||
|
@ -4204,22 +4204,32 @@ ngx_http_upsteam_bind_set_slot(ngx_conf_t *cf, ngx_command_t *cmd,
|
|||||||
{
|
{
|
||||||
char *p = conf;
|
char *p = conf;
|
||||||
|
|
||||||
|
ngx_int_t rc;
|
||||||
ngx_str_t *value;
|
ngx_str_t *value;
|
||||||
ngx_addr_t **paddr;
|
ngx_addr_t **paddr;
|
||||||
|
|
||||||
paddr = (ngx_addr_t **) (p + cmd->offset);
|
paddr = (ngx_addr_t **) (p + cmd->offset);
|
||||||
|
|
||||||
value = cf->args->elts;
|
*paddr = ngx_palloc(cf->pool, sizeof(ngx_addr_t));
|
||||||
|
if (*paddr == NULL) {
|
||||||
*paddr = ngx_parse_addr(cf->pool, &value[1]);
|
return NGX_CONF_ERROR;
|
||||||
if (*paddr) {
|
|
||||||
return NGX_CONF_OK;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
value = cf->args->elts;
|
||||||
"invalid address \"%V\"", &value[1]);
|
|
||||||
|
|
||||||
return NGX_CONF_ERROR;
|
rc = ngx_parse_addr(cf->pool, *paddr, value[1].data, value[1].len);
|
||||||
|
|
||||||
|
switch (rc) {
|
||||||
|
case NGX_OK:
|
||||||
|
(*paddr)->name = value[1];
|
||||||
|
return NGX_CONF_OK;
|
||||||
|
|
||||||
|
case NGX_DECLINED:
|
||||||
|
ngx_conf_log_error(NGX_LOG_EMERG, cf, 0,
|
||||||
|
"invalid address \"%V\"", &value[1]);
|
||||||
|
default:
|
||||||
|
return NGX_CONF_ERROR;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user