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