annotate src/core/ngx_resolver.h @ 7690:8253424d1aff

Added size check to ngx_http_alloc_large_header_buffer(). This ensures that copying won't write more than the buffer size even if the buffer comes from hc->free and it is smaller than the large client header buffer size in the virtual host configuration. This might happen if size of large client header buffers is different in name-based virtual hosts, similarly to the problem with number of buffers fixed in 6926:e662cbf1b932.
author Maxim Dounin <mdounin@mdounin.ru>
date Thu, 06 Aug 2020 05:02:22 +0300
parents 70e65bf8dfd7
children 2a77754cd9fe
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
1
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
2 /*
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
4412
d620f497c50f Copyright updated.
Maxim Konovalov <maxim@nginx.com>
parents: 4225
diff changeset
4 * Copyright (C) Nginx, Inc.
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
5 */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
6
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
7
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #ifndef _NGX_RESOLVER_H_INCLUDED_
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13 #define _NGX_RESOLVER_H_INCLUDED_
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 #define NGX_RESOLVE_A 1
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 #define NGX_RESOLVE_CNAME 5
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 #define NGX_RESOLVE_PTR 12
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 #define NGX_RESOLVE_MX 15
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
20 #define NGX_RESOLVE_TXT 16
5477
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
21 #if (NGX_HAVE_INET6)
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
22 #define NGX_RESOLVE_AAAA 28
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
23 #endif
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
24 #define NGX_RESOLVE_SRV 33
1965
14463ae77723 take into account DNAME
Igor Sysoev <igor@sysoev.ru>
parents: 1913
diff changeset
25 #define NGX_RESOLVE_DNAME 39
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 #define NGX_RESOLVE_FORMERR 1
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28 #define NGX_RESOLVE_SERVFAIL 2
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29 #define NGX_RESOLVE_NXDOMAIN 3
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
30 #define NGX_RESOLVE_NOTIMP 4
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
31 #define NGX_RESOLVE_REFUSED 5
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
32 #define NGX_RESOLVE_TIMEDOUT NGX_ETIMEDOUT
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34
1683
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1649
diff changeset
35 #define NGX_NO_RESOLVER (void *) -1
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1649
diff changeset
36
1969
41fd9a2e0755 limit CNAME recursion
Igor Sysoev <igor@sysoev.ru>
parents: 1965
diff changeset
37 #define NGX_RESOLVER_MAX_RECURSION 50
41fd9a2e0755 limit CNAME recursion
Igor Sysoev <igor@sysoev.ru>
parents: 1965
diff changeset
38
1683
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1649
diff changeset
39
6367
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
40 typedef struct ngx_resolver_s ngx_resolver_t;
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
41
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
42
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43 typedef struct {
6365
d35b4d590b2d Resolver: renamed UDP-specific structures, fields and variables.
Roman Arutyunyan <arut@nginx.com>
parents: 6364
diff changeset
44 ngx_connection_t *udp;
6367
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
45 ngx_connection_t *tcp;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46 struct sockaddr *sockaddr;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 socklen_t socklen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 ngx_str_t server;
3408
71193a456616 add context to a resolver log
Igor Sysoev <igor@sysoev.ru>
parents: 3269
diff changeset
49 ngx_log_t log;
6367
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
50 ngx_buf_t *read_buf;
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
51 ngx_buf_t *write_buf;
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
52 ngx_resolver_t *resolver;
6365
d35b4d590b2d Resolver: renamed UDP-specific structures, fields and variables.
Roman Arutyunyan <arut@nginx.com>
parents: 6364
diff changeset
53 } ngx_resolver_connection_t;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56 typedef struct ngx_resolver_ctx_s ngx_resolver_ctx_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58 typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 typedef struct {
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
62 struct sockaddr *sockaddr;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
63 socklen_t socklen;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
64 ngx_str_t name;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
65 u_short priority;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
66 u_short weight;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
67 } ngx_resolver_addr_t;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
68
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
69
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
70 typedef struct {
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
71 ngx_str_t name;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
72 u_short priority;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
73 u_short weight;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
74 u_short port;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
75 } ngx_resolver_srv_t;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
76
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
77
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
78 typedef struct {
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
79 ngx_str_t name;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
80 u_short priority;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
81 u_short weight;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
82 u_short port;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
83
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
84 ngx_resolver_ctx_t *ctx;
6714
c3e3de6d2672 Resolver: introduced state field in ngx_resolver_srv_name_t.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6458
diff changeset
85 ngx_int_t state;
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
86
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
87 ngx_uint_t naddrs;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
88 ngx_addr_t *addrs;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
89 } ngx_resolver_srv_name_t;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
90
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
91
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
92 typedef struct {
6348
7316c57e4fe7 Resolver: fixed crashes in timeout handler.
Ruslan Ermilov <ru@nginx.com>
parents: 5921
diff changeset
93 ngx_rbtree_node_t node;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 ngx_queue_t queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95
6348
7316c57e4fe7 Resolver: fixed crashes in timeout handler.
Ruslan Ermilov <ru@nginx.com>
parents: 5921
diff changeset
96 /* PTR: resolved name, A: name to resolve */
7316c57e4fe7 Resolver: fixed crashes in timeout handler.
Ruslan Ermilov <ru@nginx.com>
parents: 5921
diff changeset
97 u_char *name;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98
5476
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
99 #if (NGX_HAVE_INET6)
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
100 /* PTR: IPv6 address to resolve (IPv4 address is in rbtree node key) */
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
101 struct in6_addr addr6;
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
102 #endif
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
103
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 u_short nlen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 u_short qlen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107 u_char *query;
5477
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
108 #if (NGX_HAVE_INET6)
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
109 u_char *query6;
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
110 #endif
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112 union {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 in_addr_t addr;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 in_addr_t *addrs;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115 u_char *cname;
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
116 ngx_resolver_srv_t *srvs;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 } u;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118
5477
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
119 u_char code;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 u_short naddrs;
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
121 u_short nsrvs;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 u_short cnlen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123
5477
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
124 #if (NGX_HAVE_INET6)
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
125 union {
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
126 struct in6_addr addr6;
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
127 struct in6_addr *addrs6;
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
128 } u6;
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
129
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
130 u_short naddrs6;
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
131 #endif
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
132
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133 time_t expire;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134 time_t valid;
5477
98876ce2a7fd Resolver: implemented IPv6 name to address resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5476
diff changeset
135 uint32_t ttl;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136
6367
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
137 unsigned tcp:1;
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
138 #if (NGX_HAVE_INET6)
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
139 unsigned tcp6:1;
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
140 #endif
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
141
6366
2e5c027f2a98 Resolver: per-request DNS server balancer.
Roman Arutyunyan <arut@nginx.com>
parents: 6365
diff changeset
142 ngx_uint_t last_connection;
2e5c027f2a98 Resolver: per-request DNS server balancer.
Roman Arutyunyan <arut@nginx.com>
parents: 6365
diff changeset
143
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144 ngx_resolver_ctx_t *waiting;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 } ngx_resolver_node_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
146
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
147
6367
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
148 struct ngx_resolver_s {
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
149 /* has to be pointer because of "incomplete type" */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
150 ngx_event_t *event;
4225
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
151 void *dummy;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
152 ngx_log_t *log;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
153
5921
5004210e8c78 Resolver: fixed debug event logging.
Ruslan Ermilov <ru@nginx.com>
parents: 5478
diff changeset
154 /* event ident must be after 3 pointers as in ngx_connection_t */
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
155 ngx_int_t ident;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
156
4225
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
157 /* simple round robin DNS peers balancer */
6365
d35b4d590b2d Resolver: renamed UDP-specific structures, fields and variables.
Roman Arutyunyan <arut@nginx.com>
parents: 6364
diff changeset
158 ngx_array_t connections;
4225
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
159 ngx_uint_t last_connection;
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
160
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
161 ngx_rbtree_t name_rbtree;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
162 ngx_rbtree_node_t name_sentinel;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
163
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
164 ngx_rbtree_t srv_rbtree;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
165 ngx_rbtree_node_t srv_sentinel;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
166
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
167 ngx_rbtree_t addr_rbtree;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
168 ngx_rbtree_node_t addr_sentinel;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
169
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
170 ngx_queue_t name_resend_queue;
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
171 ngx_queue_t srv_resend_queue;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
172 ngx_queue_t addr_resend_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
173
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
174 ngx_queue_t name_expire_queue;
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
175 ngx_queue_t srv_expire_queue;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
176 ngx_queue_t addr_expire_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
177
5476
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
178 #if (NGX_HAVE_INET6)
5478
3cb3175a6fef The "ipv6=" boolean parameter of the "resolver" directive.
Ruslan Ermilov <ru@nginx.com>
parents: 5477
diff changeset
179 ngx_uint_t ipv6; /* unsigned ipv6:1; */
5476
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
180 ngx_rbtree_t addr6_rbtree;
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
181 ngx_rbtree_node_t addr6_sentinel;
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
182 ngx_queue_t addr6_resend_queue;
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
183 ngx_queue_t addr6_expire_queue;
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
184 #endif
950c9ed3e66f Resolver: implemented IPv6 address to name resolving.
Ruslan Ermilov <ru@nginx.com>
parents: 5475
diff changeset
185
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
186 time_t resend_timeout;
6367
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
187 time_t tcp_timeout;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
188 time_t expire;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
189 time_t valid;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
190
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
191 ngx_uint_t log_level;
6367
5a16d40c63de Resolver: TCP support.
Roman Arutyunyan <arut@nginx.com>
parents: 6366
diff changeset
192 };
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
193
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
194
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
195 struct ngx_resolver_ctx_s {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
196 ngx_resolver_ctx_t *next;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
197 ngx_resolver_t *resolver;
6364
69977457e1a6 Resolver: removed unused field from ngx_resolver_ctx_t.
Roman Arutyunyan <arut@nginx.com>
parents: 6351
diff changeset
198 ngx_resolver_node_t *node;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
199
6348
7316c57e4fe7 Resolver: fixed crashes in timeout handler.
Ruslan Ermilov <ru@nginx.com>
parents: 5921
diff changeset
200 /* event ident must be after 3 pointers as in ngx_connection_t */
7316c57e4fe7 Resolver: fixed crashes in timeout handler.
Ruslan Ermilov <ru@nginx.com>
parents: 5921
diff changeset
201 ngx_int_t ident;
7316c57e4fe7 Resolver: fixed crashes in timeout handler.
Ruslan Ermilov <ru@nginx.com>
parents: 5921
diff changeset
202
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
203 ngx_int_t state;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
204 ngx_str_t name;
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
205 ngx_str_t service;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
206
6456
c94aba230a5a Resolver: introduced valid field in resolver responses.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6367
diff changeset
207 time_t valid;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
208 ngx_uint_t naddrs;
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
209 ngx_resolver_addr_t *addrs;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
210 ngx_resolver_addr_t addr;
5475
07dd5bd222ac Changed resolver API to use ngx_addr_t.
Ruslan Ermilov <ru@nginx.com>
parents: 4412
diff changeset
211 struct sockaddr_in sin;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
212
6458
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
213 ngx_uint_t count;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
214 ngx_uint_t nsrvs;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
215 ngx_resolver_srv_name_t *srvs;
384154fc634f Resolver: added support for SRV records.
Dmitry Volyntsev <xeioex@nginx.com>
parents: 6456
diff changeset
216
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
217 ngx_resolver_handler_pt handler;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
218 void *data;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
219 ngx_msec_t timeout;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
220
7040
d49b74a683b1 Resolver: added the "async" flag to resolver context.
Roman Arutyunyan <arut@nginx.com>
parents: 6714
diff changeset
221 unsigned quick:1;
d49b74a683b1 Resolver: added the "async" flag to resolver context.
Roman Arutyunyan <arut@nginx.com>
parents: 6714
diff changeset
222 unsigned async:1;
7052
70e65bf8dfd7 Resolver: cancelable resend timer event.
Ruslan Ermilov <ru@nginx.com>
parents: 7040
diff changeset
223 unsigned cancelable:1;
1969
41fd9a2e0755 limit CNAME recursion
Igor Sysoev <igor@sysoev.ru>
parents: 1965
diff changeset
224 ngx_uint_t recursion;
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
225 ngx_event_t *event;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
226 };
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
227
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
228
4225
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
229 ngx_resolver_t *ngx_resolver_create(ngx_conf_t *cf, ngx_str_t *names,
016352c19049 Support of several servers in the "resolver" directive.
Igor Sysoev <igor@sysoev.ru>
parents: 3408
diff changeset
230 ngx_uint_t n);
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
231 ngx_resolver_ctx_t *ngx_resolve_start(ngx_resolver_t *r,
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
232 ngx_resolver_ctx_t *temp);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
233 ngx_int_t ngx_resolve_name(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
234 void ngx_resolve_name_done(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
235 ngx_int_t ngx_resolve_addr(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
236 void ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
237 char *ngx_resolver_strerror(ngx_int_t err);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
238
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
239
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
240 #endif /* _NGX_RESOLVER_H_INCLUDED_ */