} ngx_resolver_an_t;
+#define ngx_resolver_node(n) \
+ (ngx_resolver_node_t *) \
+ ((u_char *) (n) - offsetof(ngx_resolver_node_t, node))
+
+
ngx_int_t ngx_udp_connect(ngx_udp_connection_t *uc);
while (tree->root != tree->sentinel) {
- rn = (ngx_resolver_node_t *) ngx_rbtree_min(tree->root, tree->sentinel);
+ rn = ngx_resolver_node(ngx_rbtree_min(tree->root, tree->sentinel));
ngx_queue_remove(&rn->queue);
ctx->event->handler = ngx_resolver_timeout_handler;
ctx->event->data = rn;
ctx->event->log = r->log;
- ctx->ident = -1;
+ rn->ident = -1;
ngx_add_timer(ctx->event, ctx->timeout);
}
ctx->event->handler = ngx_resolver_timeout_handler;
ctx->event->data = rn;
ctx->event->log = r->log;
- ctx->ident = -1;
+ rn->ident = -1;
ngx_add_timer(ctx->event, ctx->timeout);
/* hash == node->key */
- rn = (ngx_resolver_node_t *) node;
+ rn = ngx_resolver_node(node);
rc = ngx_memn2cmp(name->data, rn->name, name->len, rn->nlen);
/* addr == node->key */
- return (ngx_resolver_node_t *) node;
+ return ngx_resolver_node(node);
}
/* not found */
/* hash == node->key */
- rn = (ngx_resolver_node_t *) node;
+ rn = ngx_resolver_node(node);
rc = ngx_memcmp(addr, &rn->addr6, 16);
} else { /* node->key == temp->key */
- rn = (ngx_resolver_node_t *) node;
- rn_temp = (ngx_resolver_node_t *) temp;
+ rn = ngx_resolver_node(node);
+ rn_temp = ngx_resolver_node(temp);
p = (ngx_memn2cmp(rn->name, rn_temp->name, rn->nlen, rn_temp->nlen)
< 0) ? &temp->left : &temp->right;
} else { /* node->key == temp->key */
- rn = (ngx_resolver_node_t *) node;
- rn_temp = (ngx_resolver_node_t *) temp;
+ rn = ngx_resolver_node(node);
+ rn_temp = ngx_resolver_node(temp);
p = (ngx_memcmp(&rn->addr6, &rn_temp->addr6, 16)
< 0) ? &temp->left : &temp->right;
typedef struct {
- ngx_rbtree_node_t node;
- ngx_queue_t queue;
-
/* PTR: resolved name, A: name to resolve */
u_char *name;
+ ngx_queue_t queue;
+
+ /* event ident must be after 3 pointers as in ngx_connection_t */
+ ngx_int_t ident;
+
+ ngx_rbtree_node_t node;
+
#if (NGX_HAVE_INET6)
/* PTR: IPv6 address to resolve (IPv4 address is in rbtree node key) */
struct in6_addr addr6;
void *dummy;
ngx_log_t *log;
- /* ident must be after 3 pointers */
+ /* event ident must be after 3 pointers as in ngx_connection_t */
ngx_int_t ident;
/* simple round robin DNS peers balancer */
ngx_resolver_t *resolver;
ngx_udp_connection_t *udp_connection;
- /* ident must be after 3 pointers */
- ngx_int_t ident;
-
ngx_int_t state;
ngx_str_t name;