comparison src/core/ngx_resolver.h @ 350:5a1bb0129dff NGINX_0_6_19

nginx 0.6.19 *) Bugfix: the 0.6.18 version could not be built.
author Igor Sysoev <http://sysoev.ru>
date Tue, 27 Nov 2007 00:00:00 +0300
parents
children 583decdb82a4
comparison
equal deleted inserted replaced
349:c524d806a2eb 350:5a1bb0129dff
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_ */