aboutsummaryrefslogtreecommitdiff
path: root/src/core/ngx_resolver.h
diff options
context:
space:
mode:
authorDmitry Volyntsev <xeioex@nginx.com>2016-03-23 17:44:36 +0300
committerDmitry Volyntsev <xeioex@nginx.com>2016-03-23 17:44:36 +0300
commitf625ad7ce80f66911e31bcd9a92729ad5d8d771f (patch)
tree50f47ed89af5136b984d5c3d47a60e10eafbbd29 /src/core/ngx_resolver.h
parent2b2fe92aaa84c89a36eb3a286f26c2499dc4e275 (diff)
downloadnginx-f625ad7ce80f66911e31bcd9a92729ad5d8d771f.tar.gz
nginx-f625ad7ce80f66911e31bcd9a92729ad5d8d771f.zip
Resolver: added support for SRV records.
Diffstat (limited to 'src/core/ngx_resolver.h')
-rw-r--r--src/core/ngx_resolver.h47
1 files changed, 45 insertions, 2 deletions
diff --git a/src/core/ngx_resolver.h b/src/core/ngx_resolver.h
index 3e93f4dac..e36cfdcc2 100644
--- a/src/core/ngx_resolver.h
+++ b/src/core/ngx_resolver.h
@@ -21,6 +21,7 @@
#if (NGX_HAVE_INET6)
#define NGX_RESOLVE_AAAA 28
#endif
+#define NGX_RESOLVE_SRV 33
#define NGX_RESOLVE_DNAME 39
#define NGX_RESOLVE_FORMERR 1
@@ -58,6 +59,36 @@ typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
typedef struct {
+ struct sockaddr *sockaddr;
+ socklen_t socklen;
+ ngx_str_t name;
+ u_short priority;
+ u_short weight;
+} ngx_resolver_addr_t;
+
+
+typedef struct {
+ ngx_str_t name;
+ u_short priority;
+ u_short weight;
+ u_short port;
+} ngx_resolver_srv_t;
+
+
+typedef struct {
+ ngx_str_t name;
+ u_short priority;
+ u_short weight;
+ u_short port;
+
+ ngx_resolver_ctx_t *ctx;
+
+ ngx_uint_t naddrs;
+ ngx_addr_t *addrs;
+} ngx_resolver_srv_name_t;
+
+
+typedef struct {
ngx_rbtree_node_t node;
ngx_queue_t queue;
@@ -81,10 +112,12 @@ typedef struct {
in_addr_t addr;
in_addr_t *addrs;
u_char *cname;
+ ngx_resolver_srv_t *srvs;
} u;
u_char code;
u_short naddrs;
+ u_short nsrvs;
u_short cnlen;
#if (NGX_HAVE_INET6)
@@ -127,13 +160,18 @@ struct ngx_resolver_s {
ngx_rbtree_t name_rbtree;
ngx_rbtree_node_t name_sentinel;
+ ngx_rbtree_t srv_rbtree;
+ ngx_rbtree_node_t srv_sentinel;
+
ngx_rbtree_t addr_rbtree;
ngx_rbtree_node_t addr_sentinel;
ngx_queue_t name_resend_queue;
+ ngx_queue_t srv_resend_queue;
ngx_queue_t addr_resend_queue;
ngx_queue_t name_expire_queue;
+ ngx_queue_t srv_expire_queue;
ngx_queue_t addr_expire_queue;
#if (NGX_HAVE_INET6)
@@ -163,13 +201,18 @@ struct ngx_resolver_ctx_s {
ngx_int_t state;
ngx_str_t name;
+ ngx_str_t service;
time_t valid;
ngx_uint_t naddrs;
- ngx_addr_t *addrs;
- ngx_addr_t addr;
+ ngx_resolver_addr_t *addrs;
+ ngx_resolver_addr_t addr;
struct sockaddr_in sin;
+ ngx_uint_t count;
+ ngx_uint_t nsrvs;
+ ngx_resolver_srv_name_t *srvs;
+
ngx_resolver_handler_pt handler;
void *data;
ngx_msec_t timeout;