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