3 * Copyright (C) Igor Sysoev
7 #include <ngx_config.h>
11 #ifndef _NGX_RESOLVER_H_INCLUDED_
12 #define _NGX_RESOLVER_H_INCLUDED_
15 #define NGX_RESOLVE_A 1
16 #define NGX_RESOLVE_CNAME 5
17 #define NGX_RESOLVE_PTR 12
18 #define NGX_RESOLVE_MX 15
19 #define NGX_RESOLVE_TXT 16
20 #define NGX_RESOLVE_DNAME 39
22 #define NGX_RESOLVE_FORMERR 1
23 #define NGX_RESOLVE_SERVFAIL 2
24 #define NGX_RESOLVE_NXDOMAIN 3
25 #define NGX_RESOLVE_NOTIMP 4
26 #define NGX_RESOLVE_REFUSED 5
27 #define NGX_RESOLVE_TIMEDOUT NGX_ETIMEDOUT
30 #define NGX_NO_RESOLVER (void *) -1
32 #define NGX_RESOLVER_MAX_RECURSION 50
36 ngx_connection_t *connection;
37 struct sockaddr *sockaddr;
41 } ngx_udp_connection_t;
44 typedef struct ngx_resolver_ctx_s ngx_resolver_ctx_t;
46 typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
50 ngx_rbtree_node_t node;
53 /* PTR: resolved name, A: name to resolve */
73 ngx_resolver_ctx_t *waiting;
74 } ngx_resolver_node_t;
78 /* has to be pointer because of "incomplete type" */
81 /* TODO: DNS peers balancer */
83 ngx_udp_connection_t *udp_connection;
87 /* ident must be after 3 pointers */
90 ngx_rbtree_t name_rbtree;
91 ngx_rbtree_node_t name_sentinel;
93 ngx_rbtree_t addr_rbtree;
94 ngx_rbtree_node_t addr_sentinel;
96 ngx_queue_t name_resend_queue;
97 ngx_queue_t addr_resend_queue;
99 ngx_queue_t name_expire_queue;
100 ngx_queue_t addr_expire_queue;
102 time_t resend_timeout;
106 ngx_uint_t log_level;
110 struct ngx_resolver_ctx_s {
111 ngx_resolver_ctx_t *next;
112 ngx_resolver_t *resolver;
113 ngx_udp_connection_t *udp_connection;
115 /* ident must be after 3 pointers */
126 /* TODO: DNS peers balancer ctx */
128 ngx_resolver_handler_pt handler;
132 ngx_uint_t quick; /* unsigned quick:1; */
133 ngx_uint_t recursion;
138 ngx_resolver_t *ngx_resolver_create(ngx_conf_t *cf, ngx_peer_addr_t *addr);
139 ngx_resolver_ctx_t *ngx_resolve_start(ngx_resolver_t *r,
140 ngx_resolver_ctx_t *temp);
141 ngx_int_t ngx_resolve_name(ngx_resolver_ctx_t *ctx);
142 void ngx_resolve_name_done(ngx_resolver_ctx_t *ctx);
143 ngx_int_t ngx_resolve_addr(ngx_resolver_ctx_t *ctx);
144 void ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx);
145 char *ngx_resolver_strerror(ngx_int_t err);
148 #endif /* _NGX_RESOLVER_H_INCLUDED_ */