annotate src/core/ngx_resolver.h @ 1965:14463ae77723

take into account DNAME
author Igor Sysoev <igor@sysoev.ru>
date Thu, 10 Apr 2008 17:12:21 +0000
parents c0f873458e2b
children 41fd9a2e0755
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
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
4 */
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 #include <ngx_config.h>
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
8 #include <ngx_core.h>
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
9
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
10
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
11 #ifndef _NGX_RESOLVER_H_INCLUDED_
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
12 #define _NGX_RESOLVER_H_INCLUDED_
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
13
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
14
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
15 #define NGX_RESOLVE_A 1
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
16 #define NGX_RESOLVE_CNAME 5
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
17 #define NGX_RESOLVE_PTR 12
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
18 #define NGX_RESOLVE_MX 15
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
19 #define NGX_RESOLVE_TXT 16
1965
14463ae77723 take into account DNAME
Igor Sysoev <igor@sysoev.ru>
parents: 1913
diff changeset
20 #define NGX_RESOLVE_DNAME 39
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
21
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
22 #define NGX_RESOLVE_FORMERR 1
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
23 #define NGX_RESOLVE_SERVFAIL 2
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
24 #define NGX_RESOLVE_NXDOMAIN 3
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
25 #define NGX_RESOLVE_NOTIMP 4
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
26 #define NGX_RESOLVE_REFUSED 5
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
27 #define NGX_RESOLVE_TIMEDOUT NGX_ETIMEDOUT
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
28
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
29
1683
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1649
diff changeset
30 #define NGX_NO_RESOLVER (void *) -1
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1649
diff changeset
31
1e0b028055ec allow to use IP addresses without defined resolver
Igor Sysoev <igor@sysoev.ru>
parents: 1649
diff changeset
32
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
33 typedef struct {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
34 ngx_connection_t *connection;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
35 struct sockaddr *sockaddr;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
36 socklen_t socklen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
37 ngx_str_t server;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
38 ngx_log_t *log;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
39 } ngx_udp_connection_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
40
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
41
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
42 typedef struct ngx_resolver_ctx_s ngx_resolver_ctx_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
43
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
44 typedef void (*ngx_resolver_handler_pt)(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
45
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
46
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
47 typedef struct {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
48 ngx_rbtree_node_t node;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
49 ngx_queue_t queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
50
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
51 /* PTR: resolved name, A: name to resolve */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
52 u_char *name;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
53
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
54 u_short nlen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
55 u_short qlen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
56
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
57 u_char *query;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
58
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
59 union {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
60 in_addr_t addr;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
61 in_addr_t *addrs;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
62 u_char *cname;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
63 } u;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
64
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
65 u_short naddrs;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
66 u_short cnlen;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
67
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
68 time_t expire;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
69 time_t valid;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
70
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
71 ngx_resolver_ctx_t *waiting;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
72 } ngx_resolver_node_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
73
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
74
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
75 typedef struct {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
76 /* has to be pointer because of "incomplete type" */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
77 ngx_event_t *event;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
78
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
79 /* TODO: DNS peers balancer */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
80 /* STUB */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
81 ngx_udp_connection_t *udp_connection;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
82
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
83 ngx_log_t *log;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
84
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
85 /* ident must be after 3 pointers */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
86 ngx_int_t ident;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
87
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
88 ngx_rbtree_t name_rbtree;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
89 ngx_rbtree_node_t name_sentinel;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
90
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
91 ngx_rbtree_t addr_rbtree;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
92 ngx_rbtree_node_t addr_sentinel;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
93
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
94 ngx_queue_t name_resend_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
95 ngx_queue_t addr_resend_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
96
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
97 ngx_queue_t name_expire_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
98 ngx_queue_t addr_expire_queue;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
99
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
100 time_t resend_timeout;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
101 time_t expire;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
102 time_t valid;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
103
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
104 ngx_uint_t log_level;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
105 } ngx_resolver_t;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
106
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
107
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
108 struct ngx_resolver_ctx_s {
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
109 ngx_resolver_ctx_t *next;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
110 ngx_resolver_t *resolver;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
111 ngx_udp_connection_t *udp_connection;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
112
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
113 /* ident must be after 3 pointers */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
114 ngx_int_t ident;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
115
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
116 ngx_int_t state;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
117 ngx_int_t type;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
118 ngx_str_t name;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
119
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
120 ngx_uint_t naddrs;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
121 in_addr_t *addrs;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
122 in_addr_t addr;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
123
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
124 /* TODO: DNS peers balancer ctx */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
125
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
126 ngx_resolver_handler_pt handler;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
127 void *data;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
128 ngx_msec_t timeout;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
129
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
130 ngx_uint_t quick; /* unsigned quick:1; */
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
131 ngx_event_t *event;
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
132 };
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
133
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
134
1913
c0f873458e2b use cf->cycle->new_log because at merge stage cf->pool->log is old log
Igor Sysoev <igor@sysoev.ru>
parents: 1906
diff changeset
135 ngx_resolver_t *ngx_resolver_create(ngx_conf_t *cf, ngx_peer_addr_t *addr);
1649
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
136 ngx_resolver_ctx_t *ngx_resolve_start(ngx_resolver_t *r,
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
137 ngx_resolver_ctx_t *temp);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
138 ngx_int_t ngx_resolve_name(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
139 void ngx_resolve_name_done(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
140 ngx_int_t ngx_resolve_addr(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
141 void ngx_resolve_addr_done(ngx_resolver_ctx_t *ctx);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
142 char *ngx_resolver_strerror(ngx_int_t err);
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
143
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
144
80901499140d resolver
Igor Sysoev <igor@sysoev.ru>
parents:
diff changeset
145 #endif /* _NGX_RESOLVER_H_INCLUDED_ */