annotate src/core/ngx_resolver.h @ 644:ad25218fd14b NGINX_1_0_12

nginx 1.0.12 *) Feature: the "TLSv1.1" and "TLSv1.2" parameters of the "ssl_protocols" directive. *) Feature: the "if" SSI command supports captures in regular expressions. *) Bugfix: the "if" SSI command did not work inside the "block" command. *) Bugfix: in AIO error handling on FreeBSD. *) Bugfix: in the OpenSSL library initialization. *) Bugfix: the "worker_cpu_affinity" directive might not work. *) Bugfix: the "limit_conn_log_level" and "limit_req_log_level" directives might not work. *) Bugfix: the "read_ahead" directive might not work combined with "try_files" and "open_file_cache". *) Bugfix: the "proxy_cache_use_stale" directive with "error" parameter did not return answer from cache if there were no live upstreams. *) Bugfix: a segmentation fault might occur in a worker process if small time was used in the "inactive" parameter of the "proxy_cache_path" directive. *) Bugfix: responses from cache might hang. *) Bugfix: in error handling while connecting to a backend. Thanks to Piotr Sikora. *) Bugfix: in the "epoll" event method. Thanks to Yichun Zhang. *) Bugfix: the $sent_http_cache_control variable might contain a wrong value if the "expires" directive was used. Thanks to Yichun Zhang. *) Bugfix: the "limit_rate" directive did not allow to use full throughput, even if limit value was very high. *) Bugfix: the "sendfile_max_chunk" directive did not work, if the "limit_rate" directive was used. *) Bugfix: nginx could not be built on Solaris; the bug had appeared in 1.0.11. *) Bugfix: in the ngx_http_scgi_module. *) Bugfix: in the ngx_http_mp4_module.
author Igor Sysoev <http://sysoev.ru>
date Mon, 06 Feb 2012 00:00:00 +0400
parents daf4847b43ff
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
350
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
1
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
2 /*
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
3 * Copyright (C) Igor Sysoev
644
ad25218fd14b nginx 1.0.12
Igor Sysoev <http://sysoev.ru>
parents: 560
diff changeset
4 * Copyright (C) Nginx, Inc.
350
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
5 */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
6
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
7
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_config.h>
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9 #include <ngx_core.h>
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
10
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
11
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12 #ifndef _NGX_RESOLVER_H_INCLUDED_
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13 #define _NGX_RESOLVER_H_INCLUDED_
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
14
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
15
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
16 #define NGX_RESOLVE_A 1
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
17 #define NGX_RESOLVE_CNAME 5
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
18 #define NGX_RESOLVE_PTR 12
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19 #define NGX_RESOLVE_MX 15
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20 #define NGX_RESOLVE_TXT 16
372
6639b93e81b2 nginx 0.6.30
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
21 #define NGX_RESOLVE_DNAME 39
350
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
23 #define NGX_RESOLVE_FORMERR 1
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24 #define NGX_RESOLVE_SERVFAIL 2
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25 #define NGX_RESOLVE_NXDOMAIN 3
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26 #define NGX_RESOLVE_NOTIMP 4
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
27 #define NGX_RESOLVE_REFUSED 5
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
28 #define NGX_RESOLVE_TIMEDOUT NGX_ETIMEDOUT
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
29
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
30
354
583decdb82a4 nginx 0.6.21
Igor Sysoev <http://sysoev.ru>
parents: 350
diff changeset
31 #define NGX_NO_RESOLVER (void *) -1
583decdb82a4 nginx 0.6.21
Igor Sysoev <http://sysoev.ru>
parents: 350
diff changeset
32
372
6639b93e81b2 nginx 0.6.30
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
33 #define NGX_RESOLVER_MAX_RECURSION 50
6639b93e81b2 nginx 0.6.30
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
34
354
583decdb82a4 nginx 0.6.21
Igor Sysoev <http://sysoev.ru>
parents: 350
diff changeset
35
350
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 typedef struct {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 ngx_connection_t *connection;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38 struct sockaddr *sockaddr;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39 socklen_t socklen;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40 ngx_str_t server;
560
daf4847b43ff nginx 0.8.32
Igor Sysoev <http://sysoev.ru>
parents: 540
diff changeset
41 ngx_log_t log;
350
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42 } ngx_udp_connection_t;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
44
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
45 typedef struct ngx_resolver_ctx_s ngx_resolver_ctx_t;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47 typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
49
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
50 typedef struct {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51 ngx_rbtree_node_t node;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
52 ngx_queue_t queue;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
53
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
54 /* PTR: resolved name, A: name to resolve */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
55 u_char *name;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
56
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57 u_short nlen;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58 u_short qlen;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
59
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
60 u_char *query;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
61
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
62 union {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
63 in_addr_t addr;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
64 in_addr_t *addrs;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
65 u_char *cname;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
66 } u;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
67
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
68 u_short naddrs;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
69 u_short cnlen;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
70
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
71 time_t expire;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
72 time_t valid;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
73
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
74 ngx_resolver_ctx_t *waiting;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
75 } ngx_resolver_node_t;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
77
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
78 typedef struct {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
79 /* has to be pointer because of "incomplete type" */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
80 ngx_event_t *event;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
81
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
82 /* TODO: DNS peers balancer */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
83 /* STUB */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
84 ngx_udp_connection_t *udp_connection;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
85
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
86 ngx_log_t *log;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
87
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
88 /* ident must be after 3 pointers */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
89 ngx_int_t ident;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
90
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
91 ngx_rbtree_t name_rbtree;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
92 ngx_rbtree_node_t name_sentinel;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
93
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
94 ngx_rbtree_t addr_rbtree;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
95 ngx_rbtree_node_t addr_sentinel;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
96
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
97 ngx_queue_t name_resend_queue;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
98 ngx_queue_t addr_resend_queue;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
99
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
100 ngx_queue_t name_expire_queue;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
101 ngx_queue_t addr_expire_queue;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
102
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
103 time_t resend_timeout;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
104 time_t expire;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
105 time_t valid;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
106
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
107 ngx_uint_t log_level;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
108 } ngx_resolver_t;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
109
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
110
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
111 struct ngx_resolver_ctx_s {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
112 ngx_resolver_ctx_t *next;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
113 ngx_resolver_t *resolver;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
114 ngx_udp_connection_t *udp_connection;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
115
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
116 /* ident must be after 3 pointers */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
117 ngx_int_t ident;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
118
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
119 ngx_int_t state;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
120 ngx_int_t type;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
121 ngx_str_t name;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
122
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
123 ngx_uint_t naddrs;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
124 in_addr_t *addrs;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
125 in_addr_t addr;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
126
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
127 /* TODO: DNS peers balancer ctx */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
128
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
129 ngx_resolver_handler_pt handler;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
130 void *data;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
131 ngx_msec_t timeout;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
132
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
133 ngx_uint_t quick; /* unsigned quick:1; */
372
6639b93e81b2 nginx 0.6.30
Igor Sysoev <http://sysoev.ru>
parents: 366
diff changeset
134 ngx_uint_t recursion;
350
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
135 ngx_event_t *event;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
136 };
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
137
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
138
540
c04fa65fe604 nginx 0.8.22
Igor Sysoev <http://sysoev.ru>
parents: 372
diff changeset
139 ngx_resolver_t *ngx_resolver_create(ngx_conf_t *cf, ngx_addr_t *addr);
350
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
140 ngx_resolver_ctx_t *ngx_resolve_start(ngx_resolver_t *r,
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
141 ngx_resolver_ctx_t *temp);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
142 ngx_int_t ngx_resolve_name(ngx_resolver_ctx_t *ctx);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
143 void ngx_resolve_name_done(ngx_resolver_ctx_t *ctx);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
144 ngx_int_t ngx_resolve_addr(ngx_resolver_ctx_t *ctx);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
145 void ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
146 char *ngx_resolver_strerror(ngx_int_t err);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
147
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
148
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
149 #endif /* _NGX_RESOLVER_H_INCLUDED_ */