comparison src/core/ngx_resolver.h @ 6458:384154fc634f

Resolver: added support for SRV records.
author Dmitry Volyntsev <xeioex@nginx.com>
date Wed, 23 Mar 2016 17:44:36 +0300
parents c94aba230a5a
children c3e3de6d2672
comparison
equal deleted inserted replaced
6457:a6711b85da83 6458:384154fc634f
19 #define NGX_RESOLVE_MX 15 19 #define NGX_RESOLVE_MX 15
20 #define NGX_RESOLVE_TXT 16 20 #define NGX_RESOLVE_TXT 16
21 #if (NGX_HAVE_INET6) 21 #if (NGX_HAVE_INET6)
22 #define NGX_RESOLVE_AAAA 28 22 #define NGX_RESOLVE_AAAA 28
23 #endif 23 #endif
24 #define NGX_RESOLVE_SRV 33
24 #define NGX_RESOLVE_DNAME 39 25 #define NGX_RESOLVE_DNAME 39
25 26
26 #define NGX_RESOLVE_FORMERR 1 27 #define NGX_RESOLVE_FORMERR 1
27 #define NGX_RESOLVE_SERVFAIL 2 28 #define NGX_RESOLVE_SERVFAIL 2
28 #define NGX_RESOLVE_NXDOMAIN 3 29 #define NGX_RESOLVE_NXDOMAIN 3
56 57
57 typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx); 58 typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
58 59
59 60
60 typedef struct { 61 typedef struct {
62 struct sockaddr *sockaddr;
63 socklen_t socklen;
64 ngx_str_t name;
65 u_short priority;
66 u_short weight;
67 } ngx_resolver_addr_t;
68
69
70 typedef struct {
71 ngx_str_t name;
72 u_short priority;
73 u_short weight;
74 u_short port;
75 } ngx_resolver_srv_t;
76
77
78 typedef struct {
79 ngx_str_t name;
80 u_short priority;
81 u_short weight;
82 u_short port;
83
84 ngx_resolver_ctx_t *ctx;
85
86 ngx_uint_t naddrs;
87 ngx_addr_t *addrs;
88 } ngx_resolver_srv_name_t;
89
90
91 typedef struct {
61 ngx_rbtree_node_t node; 92 ngx_rbtree_node_t node;
62 ngx_queue_t queue; 93 ngx_queue_t queue;
63 94
64 /* PTR: resolved name, A: name to resolve */ 95 /* PTR: resolved name, A: name to resolve */
65 u_char *name; 96 u_char *name;
79 110
80 union { 111 union {
81 in_addr_t addr; 112 in_addr_t addr;
82 in_addr_t *addrs; 113 in_addr_t *addrs;
83 u_char *cname; 114 u_char *cname;
115 ngx_resolver_srv_t *srvs;
84 } u; 116 } u;
85 117
86 u_char code; 118 u_char code;
87 u_short naddrs; 119 u_short naddrs;
120 u_short nsrvs;
88 u_short cnlen; 121 u_short cnlen;
89 122
90 #if (NGX_HAVE_INET6) 123 #if (NGX_HAVE_INET6)
91 union { 124 union {
92 struct in6_addr addr6; 125 struct in6_addr addr6;
125 ngx_uint_t last_connection; 158 ngx_uint_t last_connection;
126 159
127 ngx_rbtree_t name_rbtree; 160 ngx_rbtree_t name_rbtree;
128 ngx_rbtree_node_t name_sentinel; 161 ngx_rbtree_node_t name_sentinel;
129 162
163 ngx_rbtree_t srv_rbtree;
164 ngx_rbtree_node_t srv_sentinel;
165
130 ngx_rbtree_t addr_rbtree; 166 ngx_rbtree_t addr_rbtree;
131 ngx_rbtree_node_t addr_sentinel; 167 ngx_rbtree_node_t addr_sentinel;
132 168
133 ngx_queue_t name_resend_queue; 169 ngx_queue_t name_resend_queue;
170 ngx_queue_t srv_resend_queue;
134 ngx_queue_t addr_resend_queue; 171 ngx_queue_t addr_resend_queue;
135 172
136 ngx_queue_t name_expire_queue; 173 ngx_queue_t name_expire_queue;
174 ngx_queue_t srv_expire_queue;
137 ngx_queue_t addr_expire_queue; 175 ngx_queue_t addr_expire_queue;
138 176
139 #if (NGX_HAVE_INET6) 177 #if (NGX_HAVE_INET6)
140 ngx_uint_t ipv6; /* unsigned ipv6:1; */ 178 ngx_uint_t ipv6; /* unsigned ipv6:1; */
141 ngx_rbtree_t addr6_rbtree; 179 ngx_rbtree_t addr6_rbtree;
161 /* event ident must be after 3 pointers as in ngx_connection_t */ 199 /* event ident must be after 3 pointers as in ngx_connection_t */
162 ngx_int_t ident; 200 ngx_int_t ident;
163 201
164 ngx_int_t state; 202 ngx_int_t state;
165 ngx_str_t name; 203 ngx_str_t name;
204 ngx_str_t service;
166 205
167 time_t valid; 206 time_t valid;
168 ngx_uint_t naddrs; 207 ngx_uint_t naddrs;
169 ngx_addr_t *addrs; 208 ngx_resolver_addr_t *addrs;
170 ngx_addr_t addr; 209 ngx_resolver_addr_t addr;
171 struct sockaddr_in sin; 210 struct sockaddr_in sin;
211
212 ngx_uint_t count;
213 ngx_uint_t nsrvs;
214 ngx_resolver_srv_name_t *srvs;
172 215
173 ngx_resolver_handler_pt handler; 216 ngx_resolver_handler_pt handler;
174 void *data; 217 void *data;
175 ngx_msec_t timeout; 218 ngx_msec_t timeout;
176 219