Resolver: renamed UDP-specific structures, fields and variables.

They will be used for TCP connections as well.
This commit is contained in:
Roman Arutyunyan 2016-01-28 15:28:20 +03:00
parent 52d3601155
commit 1945fff7bf
2 changed files with 63 additions and 63 deletions

View File

@ -53,7 +53,7 @@ typedef struct {
((u_char *) (n) - offsetof(ngx_resolver_node_t, node)) ((u_char *) (n) - offsetof(ngx_resolver_node_t, node))
ngx_int_t ngx_udp_connect(ngx_udp_connection_t *uc); ngx_int_t ngx_udp_connect(ngx_resolver_connection_t *rec);
static void ngx_resolver_cleanup(void *data); static void ngx_resolver_cleanup(void *data);
@ -110,12 +110,12 @@ static ngx_resolver_node_t *ngx_resolver_lookup_addr6(ngx_resolver_t *r,
ngx_resolver_t * ngx_resolver_t *
ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n) ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
{ {
ngx_str_t s; ngx_str_t s;
ngx_url_t u; ngx_url_t u;
ngx_uint_t i, j; ngx_uint_t i, j;
ngx_resolver_t *r; ngx_resolver_t *r;
ngx_pool_cleanup_t *cln; ngx_pool_cleanup_t *cln;
ngx_udp_connection_t *uc; ngx_resolver_connection_t *rec;
cln = ngx_pool_cleanup_add(cf->pool, 0); cln = ngx_pool_cleanup_add(cf->pool, 0);
if (cln == NULL) { if (cln == NULL) {
@ -172,8 +172,8 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
r->log_level = NGX_LOG_ERR; r->log_level = NGX_LOG_ERR;
if (n) { if (n) {
if (ngx_array_init(&r->udp_connections, cf->pool, n, if (ngx_array_init(&r->connections, cf->pool, n,
sizeof(ngx_udp_connection_t)) sizeof(ngx_resolver_connection_t))
!= NGX_OK) != NGX_OK)
{ {
return NULL; return NULL;
@ -230,17 +230,17 @@ ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names, ngx_uint_t n)
return NULL; return NULL;
} }
uc = ngx_array_push_n(&r->udp_connections, u.naddrs); rec = ngx_array_push_n(&r->connections, u.naddrs);
if (uc == NULL) { if (rec == NULL) {
return NULL; return NULL;
} }
ngx_memzero(uc, u.naddrs * sizeof(ngx_udp_connection_t)); ngx_memzero(rec, u.naddrs * sizeof(ngx_resolver_connection_t));
for (j = 0; j < u.naddrs; j++) { for (j = 0; j < u.naddrs; j++) {
uc[j].sockaddr = u.addrs[j].sockaddr; rec[j].sockaddr = u.addrs[j].sockaddr;
uc[j].socklen = u.addrs[j].socklen; rec[j].socklen = u.addrs[j].socklen;
uc[j].server = u.addrs[j].name; rec[j].server = u.addrs[j].name;
} }
} }
@ -253,8 +253,8 @@ ngx_resolver_cleanup(void *data)
{ {
ngx_resolver_t *r = data; ngx_resolver_t *r = data;
ngx_uint_t i; ngx_uint_t i;
ngx_udp_connection_t *uc; ngx_resolver_connection_t *rec;
if (r) { if (r) {
ngx_log_debug0(NGX_LOG_DEBUG_CORE, ngx_cycle->log, 0, ngx_log_debug0(NGX_LOG_DEBUG_CORE, ngx_cycle->log, 0,
@ -273,11 +273,11 @@ ngx_resolver_cleanup(void *data)
} }
uc = r->udp_connections.elts; rec = r->connections.elts;
for (i = 0; i < r->udp_connections.nelts; i++) { for (i = 0; i < r->connections.nelts; i++) {
if (uc[i].connection) { if (rec[i].udp) {
ngx_close_connection(uc[i].connection); ngx_close_connection(rec[i].udp);
} }
} }
@ -340,7 +340,7 @@ ngx_resolve_start(ngx_resolver_t *r, ngx_resolver_ctx_t *temp)
} }
} }
if (r->udp_connections.nelts == 0) { if (r->connections.nelts == 0) {
return NGX_NO_RESOLVER; return NGX_NO_RESOLVER;
} }
@ -1094,55 +1094,55 @@ ngx_resolver_expire(ngx_resolver_t *r, ngx_rbtree_t *tree, ngx_queue_t *queue)
static ngx_int_t static ngx_int_t
ngx_resolver_send_query(ngx_resolver_t *r, ngx_resolver_node_t *rn) ngx_resolver_send_query(ngx_resolver_t *r, ngx_resolver_node_t *rn)
{ {
ssize_t n; ssize_t n;
ngx_udp_connection_t *uc; ngx_resolver_connection_t *rec;
uc = r->udp_connections.elts; rec = r->connections.elts;
uc = &uc[r->last_connection++]; rec = &rec[r->last_connection++];
if (r->last_connection == r->udp_connections.nelts) { if (r->last_connection == r->connections.nelts) {
r->last_connection = 0; r->last_connection = 0;
} }
if (uc->connection == NULL) { if (rec->udp == NULL) {
uc->log = *r->log; rec->log = *r->log;
uc->log.handler = ngx_resolver_log_error; rec->log.handler = ngx_resolver_log_error;
uc->log.data = uc; rec->log.data = rec;
uc->log.action = "resolving"; rec->log.action = "resolving";
if (ngx_udp_connect(uc) != NGX_OK) { if (ngx_udp_connect(rec) != NGX_OK) {
return NGX_ERROR; return NGX_ERROR;
} }
uc->connection->data = r; rec->udp->data = r;
uc->connection->read->handler = ngx_resolver_read_response; rec->udp->read->handler = ngx_resolver_read_response;
uc->connection->read->resolver = 1; rec->udp->read->resolver = 1;
} }
if (rn->naddrs == (u_short) -1) { if (rn->naddrs == (u_short) -1) {
n = ngx_send(uc->connection, rn->query, rn->qlen); n = ngx_send(rec->udp, rn->query, rn->qlen);
if (n == -1) { if (n == -1) {
return NGX_ERROR; return NGX_ERROR;
} }
if ((size_t) n != (size_t) rn->qlen) { if ((size_t) n != (size_t) rn->qlen) {
ngx_log_error(NGX_LOG_CRIT, &uc->log, 0, "send() incomplete"); ngx_log_error(NGX_LOG_CRIT, &rec->log, 0, "send() incomplete");
return NGX_ERROR; return NGX_ERROR;
} }
} }
#if (NGX_HAVE_INET6) #if (NGX_HAVE_INET6)
if (rn->query6 && rn->naddrs6 == (u_short) -1) { if (rn->query6 && rn->naddrs6 == (u_short) -1) {
n = ngx_send(uc->connection, rn->query6, rn->qlen); n = ngx_send(rec->udp, rn->query6, rn->qlen);
if (n == -1) { if (n == -1) {
return NGX_ERROR; return NGX_ERROR;
} }
if ((size_t) n != (size_t) rn->qlen) { if ((size_t) n != (size_t) rn->qlen) {
ngx_log_error(NGX_LOG_CRIT, &uc->log, 0, "send() incomplete"); ngx_log_error(NGX_LOG_CRIT, &rec->log, 0, "send() incomplete");
return NGX_ERROR; return NGX_ERROR;
} }
} }
@ -3074,8 +3074,8 @@ ngx_resolver_strerror(ngx_int_t err)
static u_char * static u_char *
ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len) ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len)
{ {
u_char *p; u_char *p;
ngx_udp_connection_t *uc; ngx_resolver_connection_t *rec;
p = buf; p = buf;
@ -3084,10 +3084,10 @@ ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len)
len -= p - buf; len -= p - buf;
} }
uc = log->data; rec = log->data;
if (uc) { if (rec) {
p = ngx_snprintf(p, len, ", resolver: %V", &uc->server); p = ngx_snprintf(p, len, ", resolver: %V", &rec->server);
} }
return p; return p;
@ -3095,7 +3095,7 @@ ngx_resolver_log_error(ngx_log_t *log, u_char *buf, size_t len)
ngx_int_t ngx_int_t
ngx_udp_connect(ngx_udp_connection_t *uc) ngx_udp_connect(ngx_resolver_connection_t *rec)
{ {
int rc; int rc;
ngx_int_t event; ngx_int_t event;
@ -3103,21 +3103,21 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
ngx_socket_t s; ngx_socket_t s;
ngx_connection_t *c; ngx_connection_t *c;
s = ngx_socket(uc->sockaddr->sa_family, SOCK_DGRAM, 0); s = ngx_socket(rec->sockaddr->sa_family, SOCK_DGRAM, 0);
ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &uc->log, 0, "UDP socket %d", s); ngx_log_debug1(NGX_LOG_DEBUG_EVENT, &rec->log, 0, "UDP socket %d", s);
if (s == (ngx_socket_t) -1) { if (s == (ngx_socket_t) -1) {
ngx_log_error(NGX_LOG_ALERT, &uc->log, ngx_socket_errno, ngx_log_error(NGX_LOG_ALERT, &rec->log, ngx_socket_errno,
ngx_socket_n " failed"); ngx_socket_n " failed");
return NGX_ERROR; return NGX_ERROR;
} }
c = ngx_get_connection(s, &uc->log); c = ngx_get_connection(s, &rec->log);
if (c == NULL) { if (c == NULL) {
if (ngx_close_socket(s) == -1) { if (ngx_close_socket(s) == -1) {
ngx_log_error(NGX_LOG_ALERT, &uc->log, ngx_socket_errno, ngx_log_error(NGX_LOG_ALERT, &rec->log, ngx_socket_errno,
ngx_close_socket_n "failed"); ngx_close_socket_n "failed");
} }
@ -3125,7 +3125,7 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
} }
if (ngx_nonblocking(s) == -1) { if (ngx_nonblocking(s) == -1) {
ngx_log_error(NGX_LOG_ALERT, &uc->log, ngx_socket_errno, ngx_log_error(NGX_LOG_ALERT, &rec->log, ngx_socket_errno,
ngx_nonblocking_n " failed"); ngx_nonblocking_n " failed");
goto failed; goto failed;
@ -3134,22 +3134,22 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
rev = c->read; rev = c->read;
wev = c->write; wev = c->write;
rev->log = &uc->log; rev->log = &rec->log;
wev->log = &uc->log; wev->log = &rec->log;
uc->connection = c; rec->udp = c;
c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1); c->number = ngx_atomic_fetch_add(ngx_connection_counter, 1);
ngx_log_debug3(NGX_LOG_DEBUG_EVENT, &uc->log, 0, ngx_log_debug3(NGX_LOG_DEBUG_EVENT, &rec->log, 0,
"connect to %V, fd:%d #%uA", &uc->server, s, c->number); "connect to %V, fd:%d #%uA", &rec->server, s, c->number);
rc = connect(s, uc->sockaddr, uc->socklen); rc = connect(s, rec->sockaddr, rec->socklen);
/* TODO: iocp */ /* TODO: iocp */
if (rc == -1) { if (rc == -1) {
ngx_log_error(NGX_LOG_CRIT, &uc->log, ngx_socket_errno, ngx_log_error(NGX_LOG_CRIT, &rec->log, ngx_socket_errno,
"connect() failed"); "connect() failed");
goto failed; goto failed;
@ -3172,7 +3172,7 @@ ngx_udp_connect(ngx_udp_connection_t *uc)
failed: failed:
ngx_close_connection(c); ngx_close_connection(c);
uc->connection = NULL; rec->udp = NULL;
return NGX_ERROR; return NGX_ERROR;
} }

View File

@ -37,12 +37,12 @@
typedef struct { typedef struct {
ngx_connection_t *connection; ngx_connection_t *udp;
struct sockaddr *sockaddr; struct sockaddr *sockaddr;
socklen_t socklen; socklen_t socklen;
ngx_str_t server; ngx_str_t server;
ngx_log_t log; ngx_log_t log;
} ngx_udp_connection_t; } ngx_resolver_connection_t;
typedef struct ngx_resolver_ctx_s ngx_resolver_ctx_t; typedef struct ngx_resolver_ctx_s ngx_resolver_ctx_t;
@ -107,7 +107,7 @@ typedef struct {
ngx_int_t ident; ngx_int_t ident;
/* simple round robin DNS peers balancer */ /* simple round robin DNS peers balancer */
ngx_array_t udp_connections; ngx_array_t connections;
ngx_uint_t last_connection; ngx_uint_t last_connection;
ngx_rbtree_t name_rbtree; ngx_rbtree_t name_rbtree;