annotate src/core/ngx_resolver.h @ 366:babd3d9efb62 NGINX_0_6_27

nginx 0.6.27 *) Change: now by default the rtsig method is not built on Linux 2.6.18+. *) Change: now a request method is not changed while redirection to a named location via an "error_page" directive. *) Feature: the "resolver" and "resolver_timeout" directives in SMTP proxy. *) Feature: the "post_action" directive supports named locations. *) Bugfix: a segmentation fault occurred in worker process, if a request was redirected from proxy, FastCGI, or memcached location to static named locations. *) Bugfix: browsers did not repeat SSL handshake if there is no valid client certificate in first handshake. Thanks to Alexander V. Inyukhin. *) Bugfix: if response code 495-497 was redirected via an "error_page" directive without code change, then nginx tried to allocate too many memory. *) Bugfix: memory leak in long-lived non buffered connections. *) Bugfix: memory leak in resolver. *) Bugfix: a segmentation fault occurred in worker process, if a request was redirected from proxy, FastCGI, or memcached location to static named locations. *) Bugfix: in the $proxy_host and $proxy_port variables caching. Thanks to Sergey Bochenkov. *) Bugfix: a "proxy_pass" directive with variables used incorrectly the same port as in another "proxy_pass" directive with the same host name and without variables. Thanks to Sergey Bochenkov. *) Bugfix: an alert "sendmsg() failed (9: Bad file descriptor)" on some 64-bit platforms while reconfiguration. *) Bugfix: a segmentation fault occurred in worker process, if empty stub block was used second time in SSI. *) Bugfix: in copying URI part contained escaped symbols into arguments.
author Igor Sysoev <http://sysoev.ru>
date Wed, 12 Mar 2008 00:00:00 +0300
parents 583decdb82a4
children 6639b93e81b2
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
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
4 */
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 #include <ngx_config.h>
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
9
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 #ifndef _NGX_RESOLVER_H_INCLUDED_
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
12 #define _NGX_RESOLVER_H_INCLUDED_
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
13
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 #define NGX_RESOLVE_A 1
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
16 #define NGX_RESOLVE_CNAME 5
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
17 #define NGX_RESOLVE_PTR 12
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
18 #define NGX_RESOLVE_MX 15
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
19 #define NGX_RESOLVE_TXT 16
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
20
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
21 #define NGX_RESOLVE_FORMERR 1
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
22 #define NGX_RESOLVE_SERVFAIL 2
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
23 #define NGX_RESOLVE_NXDOMAIN 3
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
24 #define NGX_RESOLVE_NOTIMP 4
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
25 #define NGX_RESOLVE_REFUSED 5
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
26 #define NGX_RESOLVE_TIMEDOUT NGX_ETIMEDOUT
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
27
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
28
354
583decdb82a4 nginx 0.6.21
Igor Sysoev <http://sysoev.ru>
parents: 350
diff changeset
29 #define NGX_NO_RESOLVER (void *) -1
583decdb82a4 nginx 0.6.21
Igor Sysoev <http://sysoev.ru>
parents: 350
diff changeset
30
583decdb82a4 nginx 0.6.21
Igor Sysoev <http://sysoev.ru>
parents: 350
diff changeset
31
350
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
32 typedef struct {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
33 ngx_connection_t *connection;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
34 struct sockaddr *sockaddr;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
35 socklen_t socklen;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
36 ngx_str_t server;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
37 ngx_log_t *log;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
38 } ngx_udp_connection_t;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
39
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
40
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
41 typedef struct ngx_resolver_ctx_s ngx_resolver_ctx_t;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
42
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
43 typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
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
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
46 typedef struct {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
47 ngx_rbtree_node_t node;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
48 ngx_queue_t queue;
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 /* PTR: resolved name, A: name to resolve */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
51 u_char *name;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
52
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
53 u_short nlen;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
54 u_short qlen;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
55
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
56 u_char *query;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
57
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
58 union {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
59 in_addr_t addr;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
60 in_addr_t *addrs;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
61 u_char *cname;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
62 } u;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
63
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
64 u_short naddrs;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
65 u_short cnlen;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
66
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
67 time_t expire;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
68 time_t valid;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
69
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
70 ngx_resolver_ctx_t *waiting;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
71 } ngx_resolver_node_t;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
72
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 typedef struct {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
75 /* has to be pointer because of "incomplete type" */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
76 ngx_event_t *event;
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 /* TODO: DNS peers balancer */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
79 /* STUB */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
80 ngx_udp_connection_t *udp_connection;
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 ngx_log_t *log;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
83
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
84 /* ident must be after 3 pointers */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
85 ngx_int_t ident;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
86
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
87 ngx_rbtree_t name_rbtree;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
88 ngx_rbtree_node_t name_sentinel;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
89
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
90 ngx_rbtree_t addr_rbtree;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
91 ngx_rbtree_node_t addr_sentinel;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
92
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
93 ngx_queue_t name_resend_queue;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
94 ngx_queue_t addr_resend_queue;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
95
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
96 ngx_queue_t name_expire_queue;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
97 ngx_queue_t addr_expire_queue;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
98
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
99 time_t resend_timeout;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
100 time_t expire;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
101 time_t valid;
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 ngx_uint_t log_level;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
104 } ngx_resolver_t;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
105
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 struct ngx_resolver_ctx_s {
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
108 ngx_resolver_ctx_t *next;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
109 ngx_resolver_t *resolver;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
110 ngx_udp_connection_t *udp_connection;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
111
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
112 /* ident must be after 3 pointers */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
113 ngx_int_t ident;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
114
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
115 ngx_int_t state;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
116 ngx_int_t type;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
117 ngx_str_t name;
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_uint_t naddrs;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
120 in_addr_t *addrs;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
121 in_addr_t addr;
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 /* TODO: DNS peers balancer ctx */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
124
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
125 ngx_resolver_handler_pt handler;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
126 void *data;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
127 ngx_msec_t timeout;
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_uint_t quick; /* unsigned quick:1; */
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
130 ngx_event_t *event;
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
131 };
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
366
babd3d9efb62 nginx 0.6.27
Igor Sysoev <http://sysoev.ru>
parents: 354
diff changeset
134 ngx_resolver_t *ngx_resolver_create(ngx_conf_t *cf, ngx_peer_addr_t *addr);
350
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
135 ngx_resolver_ctx_t *ngx_resolve_start(ngx_resolver_t *r,
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
136 ngx_resolver_ctx_t *temp);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
137 ngx_int_t ngx_resolve_name(ngx_resolver_ctx_t *ctx);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
138 void ngx_resolve_name_done(ngx_resolver_ctx_t *ctx);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
139 ngx_int_t ngx_resolve_addr(ngx_resolver_ctx_t *ctx);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
140 void ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
141 char *ngx_resolver_strerror(ngx_int_t err);
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
142
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
143
5a1bb0129dff nginx 0.6.19
Igor Sysoev <http://sysoev.ru>
parents:
diff changeset
144 #endif /* _NGX_RESOLVER_H_INCLUDED_ */