overmind 0.1.0-x86_64-freebsd
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/bin/overmind +13 -0
- data/lib/overmind/cli.rb +93 -0
- data/lib/overmind/version.rb +5 -0
- data/lib/overmind.rb +3 -0
- data/libexec/overmind +0 -0
- data/libexec/prebuilt-tmux/bin/event_rpcgen.py +1925 -0
- data/libexec/prebuilt-tmux/bin/tmux +0 -0
- data/libexec/prebuilt-tmux/include/evdns.h +45 -0
- data/libexec/prebuilt-tmux/include/event.h +83 -0
- data/libexec/prebuilt-tmux/include/event2/buffer.h +1077 -0
- data/libexec/prebuilt-tmux/include/event2/buffer_compat.h +116 -0
- data/libexec/prebuilt-tmux/include/event2/bufferevent.h +1024 -0
- data/libexec/prebuilt-tmux/include/event2/bufferevent_compat.h +104 -0
- data/libexec/prebuilt-tmux/include/event2/bufferevent_ssl.h +134 -0
- data/libexec/prebuilt-tmux/include/event2/bufferevent_struct.h +116 -0
- data/libexec/prebuilt-tmux/include/event2/dns.h +751 -0
- data/libexec/prebuilt-tmux/include/event2/dns_compat.h +358 -0
- data/libexec/prebuilt-tmux/include/event2/dns_struct.h +80 -0
- data/libexec/prebuilt-tmux/include/event2/event-config.h +570 -0
- data/libexec/prebuilt-tmux/include/event2/event.h +1672 -0
- data/libexec/prebuilt-tmux/include/event2/event_compat.h +230 -0
- data/libexec/prebuilt-tmux/include/event2/event_struct.h +180 -0
- data/libexec/prebuilt-tmux/include/event2/http.h +1192 -0
- data/libexec/prebuilt-tmux/include/event2/http_compat.h +94 -0
- data/libexec/prebuilt-tmux/include/event2/http_struct.h +152 -0
- data/libexec/prebuilt-tmux/include/event2/keyvalq_struct.h +80 -0
- data/libexec/prebuilt-tmux/include/event2/listener.h +192 -0
- data/libexec/prebuilt-tmux/include/event2/rpc.h +626 -0
- data/libexec/prebuilt-tmux/include/event2/rpc_compat.h +61 -0
- data/libexec/prebuilt-tmux/include/event2/rpc_struct.h +114 -0
- data/libexec/prebuilt-tmux/include/event2/tag.h +146 -0
- data/libexec/prebuilt-tmux/include/event2/tag_compat.h +49 -0
- data/libexec/prebuilt-tmux/include/event2/thread.h +253 -0
- data/libexec/prebuilt-tmux/include/event2/util.h +888 -0
- data/libexec/prebuilt-tmux/include/event2/visibility.h +67 -0
- data/libexec/prebuilt-tmux/include/evhttp.h +45 -0
- data/libexec/prebuilt-tmux/include/evrpc.h +45 -0
- data/libexec/prebuilt-tmux/include/evutil.h +39 -0
- data/libexec/prebuilt-tmux/include/utf8proc.h +743 -0
- data/libexec/prebuilt-tmux/lib/libevent-2.1.7.dylib +0 -0
- data/libexec/prebuilt-tmux/lib/libevent.a +0 -0
- data/libexec/prebuilt-tmux/lib/libevent.dylib +1 -0
- data/libexec/prebuilt-tmux/lib/libevent.la +41 -0
- data/libexec/prebuilt-tmux/lib/libevent_core-2.1.7.dylib +0 -0
- data/libexec/prebuilt-tmux/lib/libevent_core.a +0 -0
- data/libexec/prebuilt-tmux/lib/libevent_core.dylib +1 -0
- data/libexec/prebuilt-tmux/lib/libevent_core.la +41 -0
- data/libexec/prebuilt-tmux/lib/libevent_extra-2.1.7.dylib +0 -0
- data/libexec/prebuilt-tmux/lib/libevent_extra.a +0 -0
- data/libexec/prebuilt-tmux/lib/libevent_extra.dylib +1 -0
- data/libexec/prebuilt-tmux/lib/libevent_extra.la +41 -0
- data/libexec/prebuilt-tmux/lib/libevent_openssl-2.1.7.dylib +0 -0
- data/libexec/prebuilt-tmux/lib/libevent_openssl.a +0 -0
- data/libexec/prebuilt-tmux/lib/libevent_openssl.dylib +1 -0
- data/libexec/prebuilt-tmux/lib/libevent_openssl.la +41 -0
- data/libexec/prebuilt-tmux/lib/libevent_pthreads-2.1.7.dylib +0 -0
- data/libexec/prebuilt-tmux/lib/libevent_pthreads.a +0 -0
- data/libexec/prebuilt-tmux/lib/libevent_pthreads.dylib +1 -0
- data/libexec/prebuilt-tmux/lib/libevent_pthreads.la +41 -0
- data/libexec/prebuilt-tmux/lib/libutf8proc.3.dylib +0 -0
- data/libexec/prebuilt-tmux/lib/libutf8proc.a +0 -0
- data/libexec/prebuilt-tmux/lib/libutf8proc.dylib +1 -0
- data/libexec/prebuilt-tmux/lib/pkgconfig/libevent.pc +16 -0
- data/libexec/prebuilt-tmux/lib/pkgconfig/libevent_core.pc +16 -0
- data/libexec/prebuilt-tmux/lib/pkgconfig/libevent_extra.pc +16 -0
- data/libexec/prebuilt-tmux/lib/pkgconfig/libevent_openssl.pc +16 -0
- data/libexec/prebuilt-tmux/lib/pkgconfig/libevent_pthreads.pc +16 -0
- data/libexec/prebuilt-tmux/lib/pkgconfig/libutf8proc.pc +10 -0
- data/libexec/prebuilt-tmux/share/man/man1/tmux.1 +7242 -0
- data/overmind.gemspec +29 -0
- metadata +160 -0
@@ -0,0 +1,751 @@
|
|
1
|
+
/*
|
2
|
+
* Copyright (c) 2006-2007 Niels Provos <provos@citi.umich.edu>
|
3
|
+
* Copyright (c) 2007-2012 Niels Provos and Nick Mathewson
|
4
|
+
*
|
5
|
+
* Redistribution and use in source and binary forms, with or without
|
6
|
+
* modification, are permitted provided that the following conditions
|
7
|
+
* are met:
|
8
|
+
* 1. Redistributions of source code must retain the above copyright
|
9
|
+
* notice, this list of conditions and the following disclaimer.
|
10
|
+
* 2. Redistributions in binary form must reproduce the above copyright
|
11
|
+
* notice, this list of conditions and the following disclaimer in the
|
12
|
+
* documentation and/or other materials provided with the distribution.
|
13
|
+
* 3. The name of the author may not be used to endorse or promote products
|
14
|
+
* derived from this software without specific prior written permission.
|
15
|
+
*
|
16
|
+
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
|
17
|
+
* IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
|
18
|
+
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
|
19
|
+
* IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
|
20
|
+
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
|
21
|
+
* NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
22
|
+
* DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
23
|
+
* THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
24
|
+
* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
|
25
|
+
* THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
26
|
+
*/
|
27
|
+
|
28
|
+
/*
|
29
|
+
* The original DNS code is due to Adam Langley with heavy
|
30
|
+
* modifications by Nick Mathewson. Adam put his DNS software in the
|
31
|
+
* public domain. You can find his original copyright below. Please,
|
32
|
+
* aware that the code as part of Libevent is governed by the 3-clause
|
33
|
+
* BSD license above.
|
34
|
+
*
|
35
|
+
* This software is Public Domain. To view a copy of the public domain dedication,
|
36
|
+
* visit http://creativecommons.org/licenses/publicdomain/ or send a letter to
|
37
|
+
* Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
|
38
|
+
*
|
39
|
+
* I ask and expect, but do not require, that all derivative works contain an
|
40
|
+
* attribution similar to:
|
41
|
+
* Parts developed by Adam Langley <agl@imperialviolet.org>
|
42
|
+
*
|
43
|
+
* You may wish to replace the word "Parts" with something else depending on
|
44
|
+
* the amount of original code.
|
45
|
+
*
|
46
|
+
* (Derivative works does not include programs which link against, run or include
|
47
|
+
* the source verbatim in their source distributions)
|
48
|
+
*/
|
49
|
+
|
50
|
+
/** @file event2/dns.h
|
51
|
+
*
|
52
|
+
* Welcome, gentle reader
|
53
|
+
*
|
54
|
+
* Async DNS lookups are really a whole lot harder than they should be,
|
55
|
+
* mostly stemming from the fact that the libc resolver has never been
|
56
|
+
* very good at them. Before you use this library you should see if libc
|
57
|
+
* can do the job for you with the modern async call getaddrinfo_a
|
58
|
+
* (see http://www.imperialviolet.org/page25.html#e498). Otherwise,
|
59
|
+
* please continue.
|
60
|
+
*
|
61
|
+
* The library keeps track of the state of nameservers and will avoid
|
62
|
+
* them when they go down. Otherwise it will round robin between them.
|
63
|
+
*
|
64
|
+
* Quick start guide:
|
65
|
+
* #include "evdns.h"
|
66
|
+
* void callback(int result, char type, int count, int ttl,
|
67
|
+
* void *addresses, void *arg);
|
68
|
+
* evdns_resolv_conf_parse(DNS_OPTIONS_ALL, "/etc/resolv.conf");
|
69
|
+
* evdns_resolve("www.hostname.com", 0, callback, NULL);
|
70
|
+
*
|
71
|
+
* When the lookup is complete the callback function is called. The
|
72
|
+
* first argument will be one of the DNS_ERR_* defines in evdns.h.
|
73
|
+
* Hopefully it will be DNS_ERR_NONE, in which case type will be
|
74
|
+
* DNS_IPv4_A, count will be the number of IP addresses, ttl is the time
|
75
|
+
* which the data can be cached for (in seconds), addresses will point
|
76
|
+
* to an array of uint32_t's and arg will be whatever you passed to
|
77
|
+
* evdns_resolve.
|
78
|
+
*
|
79
|
+
* Searching:
|
80
|
+
*
|
81
|
+
* In order for this library to be a good replacement for glibc's resolver it
|
82
|
+
* supports searching. This involves setting a list of default domains, in
|
83
|
+
* which names will be queried for. The number of dots in the query name
|
84
|
+
* determines the order in which this list is used.
|
85
|
+
*
|
86
|
+
* Searching appears to be a single lookup from the point of view of the API,
|
87
|
+
* although many DNS queries may be generated from a single call to
|
88
|
+
* evdns_resolve. Searching can also drastically slow down the resolution
|
89
|
+
* of names.
|
90
|
+
*
|
91
|
+
* To disable searching:
|
92
|
+
* 1. Never set it up. If you never call evdns_resolv_conf_parse or
|
93
|
+
* evdns_search_add then no searching will occur.
|
94
|
+
*
|
95
|
+
* 2. If you do call evdns_resolv_conf_parse then don't pass
|
96
|
+
* DNS_OPTION_SEARCH (or DNS_OPTIONS_ALL, which implies it).
|
97
|
+
*
|
98
|
+
* 3. When calling evdns_resolve, pass the DNS_QUERY_NO_SEARCH flag.
|
99
|
+
*
|
100
|
+
* The order of searches depends on the number of dots in the name. If the
|
101
|
+
* number is greater than the ndots setting then the names is first tried
|
102
|
+
* globally. Otherwise each search domain is appended in turn.
|
103
|
+
*
|
104
|
+
* The ndots setting can either be set from a resolv.conf, or by calling
|
105
|
+
* evdns_search_ndots_set.
|
106
|
+
*
|
107
|
+
* For example, with ndots set to 1 (the default) and a search domain list of
|
108
|
+
* ["myhome.net"]:
|
109
|
+
* Query: www
|
110
|
+
* Order: www.myhome.net, www.
|
111
|
+
*
|
112
|
+
* Query: www.abc
|
113
|
+
* Order: www.abc., www.abc.myhome.net
|
114
|
+
*
|
115
|
+
* Internals:
|
116
|
+
*
|
117
|
+
* Requests are kept in two queues. The first is the inflight queue. In
|
118
|
+
* this queue requests have an allocated transaction id and nameserver.
|
119
|
+
* They will soon be transmitted if they haven't already been.
|
120
|
+
*
|
121
|
+
* The second is the waiting queue. The size of the inflight ring is
|
122
|
+
* limited and all other requests wait in waiting queue for space. This
|
123
|
+
* bounds the number of concurrent requests so that we don't flood the
|
124
|
+
* nameserver. Several algorithms require a full walk of the inflight
|
125
|
+
* queue and so bounding its size keeps thing going nicely under huge
|
126
|
+
* (many thousands of requests) loads.
|
127
|
+
*
|
128
|
+
* If a nameserver loses too many requests it is considered down and we
|
129
|
+
* try not to use it. After a while we send a probe to that nameserver
|
130
|
+
* (a lookup for google.com) and, if it replies, we consider it working
|
131
|
+
* again. If the nameserver fails a probe we wait longer to try again
|
132
|
+
* with the next probe.
|
133
|
+
*/
|
134
|
+
|
135
|
+
#ifndef EVENT2_DNS_H_INCLUDED_
|
136
|
+
#define EVENT2_DNS_H_INCLUDED_
|
137
|
+
|
138
|
+
#include <event2/visibility.h>
|
139
|
+
|
140
|
+
#ifdef __cplusplus
|
141
|
+
extern "C" {
|
142
|
+
#endif
|
143
|
+
|
144
|
+
/* For integer types. */
|
145
|
+
#include <event2/util.h>
|
146
|
+
|
147
|
+
/** Error codes 0-5 are as described in RFC 1035. */
|
148
|
+
#define DNS_ERR_NONE 0
|
149
|
+
/** The name server was unable to interpret the query */
|
150
|
+
#define DNS_ERR_FORMAT 1
|
151
|
+
/** The name server was unable to process this query due to a problem with the
|
152
|
+
* name server */
|
153
|
+
#define DNS_ERR_SERVERFAILED 2
|
154
|
+
/** The domain name does not exist */
|
155
|
+
#define DNS_ERR_NOTEXIST 3
|
156
|
+
/** The name server does not support the requested kind of query */
|
157
|
+
#define DNS_ERR_NOTIMPL 4
|
158
|
+
/** The name server refuses to reform the specified operation for policy
|
159
|
+
* reasons */
|
160
|
+
#define DNS_ERR_REFUSED 5
|
161
|
+
/** The reply was truncated or ill-formatted */
|
162
|
+
#define DNS_ERR_TRUNCATED 65
|
163
|
+
/** An unknown error occurred */
|
164
|
+
#define DNS_ERR_UNKNOWN 66
|
165
|
+
/** Communication with the server timed out */
|
166
|
+
#define DNS_ERR_TIMEOUT 67
|
167
|
+
/** The request was canceled because the DNS subsystem was shut down. */
|
168
|
+
#define DNS_ERR_SHUTDOWN 68
|
169
|
+
/** The request was canceled via a call to evdns_cancel_request */
|
170
|
+
#define DNS_ERR_CANCEL 69
|
171
|
+
/** There were no answers and no error condition in the DNS packet.
|
172
|
+
* This can happen when you ask for an address that exists, but a record
|
173
|
+
* type that doesn't. */
|
174
|
+
#define DNS_ERR_NODATA 70
|
175
|
+
|
176
|
+
#define DNS_IPv4_A 1
|
177
|
+
#define DNS_PTR 2
|
178
|
+
#define DNS_IPv6_AAAA 3
|
179
|
+
|
180
|
+
#define DNS_QUERY_NO_SEARCH 1
|
181
|
+
|
182
|
+
/* Allow searching */
|
183
|
+
#define DNS_OPTION_SEARCH 1
|
184
|
+
/* Parse "nameserver" and add default if no such section */
|
185
|
+
#define DNS_OPTION_NAMESERVERS 2
|
186
|
+
/* Parse additional options like:
|
187
|
+
* - timeout:
|
188
|
+
* - getaddrinfo-allow-skew:
|
189
|
+
* - max-timeouts:
|
190
|
+
* - max-inflight:
|
191
|
+
* - attempts:
|
192
|
+
* - randomize-case:
|
193
|
+
* - initial-probe-timeout:
|
194
|
+
*/
|
195
|
+
#define DNS_OPTION_MISC 4
|
196
|
+
/* Load hosts file (i.e. "/etc/hosts") */
|
197
|
+
#define DNS_OPTION_HOSTSFILE 8
|
198
|
+
/**
|
199
|
+
* All above:
|
200
|
+
* - DNS_OPTION_SEARCH
|
201
|
+
* - DNS_OPTION_NAMESERVERS
|
202
|
+
* - DNS_OPTION_MISC
|
203
|
+
* - DNS_OPTION_HOSTSFILE
|
204
|
+
*/
|
205
|
+
#define DNS_OPTIONS_ALL ( \
|
206
|
+
DNS_OPTION_SEARCH | \
|
207
|
+
DNS_OPTION_NAMESERVERS | \
|
208
|
+
DNS_OPTION_MISC | \
|
209
|
+
DNS_OPTION_HOSTSFILE | \
|
210
|
+
0 \
|
211
|
+
)
|
212
|
+
/* Do not "default" nameserver (i.e. "127.0.0.1:53") if there is no nameservers
|
213
|
+
* in resolv.conf, (iff DNS_OPTION_NAMESERVERS is set) */
|
214
|
+
#define DNS_OPTION_NAMESERVERS_NO_DEFAULT 16
|
215
|
+
|
216
|
+
/* Obsolete name for DNS_QUERY_NO_SEARCH */
|
217
|
+
#define DNS_NO_SEARCH DNS_QUERY_NO_SEARCH
|
218
|
+
|
219
|
+
/**
|
220
|
+
* The callback that contains the results from a lookup.
|
221
|
+
* - result is one of the DNS_ERR_* values (DNS_ERR_NONE for success)
|
222
|
+
* - type is either DNS_IPv4_A or DNS_PTR or DNS_IPv6_AAAA
|
223
|
+
* - count contains the number of addresses of form type
|
224
|
+
* - ttl is the number of seconds the resolution may be cached for.
|
225
|
+
* - addresses needs to be cast according to type. It will be an array of
|
226
|
+
* 4-byte sequences for ipv4, or an array of 16-byte sequences for ipv6,
|
227
|
+
* or a nul-terminated string for PTR.
|
228
|
+
*/
|
229
|
+
typedef void (*evdns_callback_type) (int result, char type, int count, int ttl, void *addresses, void *arg);
|
230
|
+
|
231
|
+
struct evdns_base;
|
232
|
+
struct event_base;
|
233
|
+
|
234
|
+
/** Flag for evdns_base_new: process resolv.conf. */
|
235
|
+
#define EVDNS_BASE_INITIALIZE_NAMESERVERS 1
|
236
|
+
/** Flag for evdns_base_new: Do not prevent the libevent event loop from
|
237
|
+
* exiting when we have no active dns requests. */
|
238
|
+
#define EVDNS_BASE_DISABLE_WHEN_INACTIVE 0x8000
|
239
|
+
/** Flag for evdns_base_new: If EVDNS_BASE_INITIALIZE_NAMESERVERS isset, do not
|
240
|
+
* add default nameserver if there are no nameservers in resolv.conf
|
241
|
+
* @see DNS_OPTION_NAMESERVERS_NO_DEFAULT */
|
242
|
+
#define EVDNS_BASE_NAMESERVERS_NO_DEFAULT 0x10000
|
243
|
+
|
244
|
+
/**
|
245
|
+
Initialize the asynchronous DNS library.
|
246
|
+
|
247
|
+
This function initializes support for non-blocking name resolution by
|
248
|
+
calling evdns_resolv_conf_parse() on UNIX and
|
249
|
+
evdns_config_windows_nameservers() on Windows.
|
250
|
+
|
251
|
+
@param event_base the event base to associate the dns client with
|
252
|
+
@param flags any of EVDNS_BASE_INITIALIZE_NAMESERVERS|
|
253
|
+
EVDNS_BASE_DISABLE_WHEN_INACTIVE|EVDNS_BASE_NAMESERVERS_NO_DEFAULT
|
254
|
+
@return evdns_base object if successful, or NULL if an error occurred.
|
255
|
+
@see evdns_base_free()
|
256
|
+
*/
|
257
|
+
EVENT2_EXPORT_SYMBOL
|
258
|
+
struct evdns_base * evdns_base_new(struct event_base *event_base, int initialize_nameservers);
|
259
|
+
|
260
|
+
|
261
|
+
/**
|
262
|
+
Shut down the asynchronous DNS resolver and terminate all active requests.
|
263
|
+
|
264
|
+
If the 'fail_requests' option is enabled, all active requests will return
|
265
|
+
an empty result with the error flag set to DNS_ERR_SHUTDOWN. Otherwise,
|
266
|
+
the requests will be silently discarded.
|
267
|
+
|
268
|
+
@param evdns_base the evdns base to free
|
269
|
+
@param fail_requests if zero, active requests will be aborted; if non-zero,
|
270
|
+
active requests will return DNS_ERR_SHUTDOWN.
|
271
|
+
@see evdns_base_new()
|
272
|
+
*/
|
273
|
+
EVENT2_EXPORT_SYMBOL
|
274
|
+
void evdns_base_free(struct evdns_base *base, int fail_requests);
|
275
|
+
|
276
|
+
/**
|
277
|
+
Remove all hosts entries that have been loaded into the event_base via
|
278
|
+
evdns_base_load_hosts or via event_base_resolv_conf_parse.
|
279
|
+
|
280
|
+
@param evdns_base the evdns base to remove outdated host addresses from
|
281
|
+
*/
|
282
|
+
EVENT2_EXPORT_SYMBOL
|
283
|
+
void evdns_base_clear_host_addresses(struct evdns_base *base);
|
284
|
+
|
285
|
+
/**
|
286
|
+
Convert a DNS error code to a string.
|
287
|
+
|
288
|
+
@param err the DNS error code
|
289
|
+
@return a string containing an explanation of the error code
|
290
|
+
*/
|
291
|
+
EVENT2_EXPORT_SYMBOL
|
292
|
+
const char *evdns_err_to_string(int err);
|
293
|
+
|
294
|
+
|
295
|
+
/**
|
296
|
+
Add a nameserver.
|
297
|
+
|
298
|
+
The address should be an IPv4 address in network byte order.
|
299
|
+
The type of address is chosen so that it matches in_addr.s_addr.
|
300
|
+
|
301
|
+
@param base the evdns_base to which to add the name server
|
302
|
+
@param address an IP address in network byte order
|
303
|
+
@return 0 if successful, or -1 if an error occurred
|
304
|
+
@see evdns_base_nameserver_ip_add()
|
305
|
+
*/
|
306
|
+
EVENT2_EXPORT_SYMBOL
|
307
|
+
int evdns_base_nameserver_add(struct evdns_base *base,
|
308
|
+
unsigned long int address);
|
309
|
+
|
310
|
+
/**
|
311
|
+
Get the number of configured nameservers.
|
312
|
+
|
313
|
+
This returns the number of configured nameservers (not necessarily the
|
314
|
+
number of running nameservers). This is useful for double-checking
|
315
|
+
whether our calls to the various nameserver configuration functions
|
316
|
+
have been successful.
|
317
|
+
|
318
|
+
@param base the evdns_base to which to apply this operation
|
319
|
+
@return the number of configured nameservers
|
320
|
+
@see evdns_base_nameserver_add()
|
321
|
+
*/
|
322
|
+
EVENT2_EXPORT_SYMBOL
|
323
|
+
int evdns_base_count_nameservers(struct evdns_base *base);
|
324
|
+
|
325
|
+
/**
|
326
|
+
Remove all configured nameservers, and suspend all pending resolves.
|
327
|
+
|
328
|
+
Resolves will not necessarily be re-attempted until evdns_base_resume() is called.
|
329
|
+
|
330
|
+
@param base the evdns_base to which to apply this operation
|
331
|
+
@return 0 if successful, or -1 if an error occurred
|
332
|
+
@see evdns_base_resume()
|
333
|
+
*/
|
334
|
+
EVENT2_EXPORT_SYMBOL
|
335
|
+
int evdns_base_clear_nameservers_and_suspend(struct evdns_base *base);
|
336
|
+
|
337
|
+
|
338
|
+
/**
|
339
|
+
Resume normal operation and continue any suspended resolve requests.
|
340
|
+
|
341
|
+
Re-attempt resolves left in limbo after an earlier call to
|
342
|
+
evdns_base_clear_nameservers_and_suspend().
|
343
|
+
|
344
|
+
@param base the evdns_base to which to apply this operation
|
345
|
+
@return 0 if successful, or -1 if an error occurred
|
346
|
+
@see evdns_base_clear_nameservers_and_suspend()
|
347
|
+
*/
|
348
|
+
EVENT2_EXPORT_SYMBOL
|
349
|
+
int evdns_base_resume(struct evdns_base *base);
|
350
|
+
|
351
|
+
/**
|
352
|
+
Add a nameserver by string address.
|
353
|
+
|
354
|
+
This function parses a n IPv4 or IPv6 address from a string and adds it as a
|
355
|
+
nameserver. It supports the following formats:
|
356
|
+
- [IPv6Address]:port
|
357
|
+
- [IPv6Address]
|
358
|
+
- IPv6Address
|
359
|
+
- IPv4Address:port
|
360
|
+
- IPv4Address
|
361
|
+
|
362
|
+
If no port is specified, it defaults to 53.
|
363
|
+
|
364
|
+
@param base the evdns_base to which to apply this operation
|
365
|
+
@return 0 if successful, or -1 if an error occurred
|
366
|
+
@see evdns_base_nameserver_add()
|
367
|
+
*/
|
368
|
+
EVENT2_EXPORT_SYMBOL
|
369
|
+
int evdns_base_nameserver_ip_add(struct evdns_base *base,
|
370
|
+
const char *ip_as_string);
|
371
|
+
|
372
|
+
/**
|
373
|
+
Add a nameserver by sockaddr.
|
374
|
+
**/
|
375
|
+
EVENT2_EXPORT_SYMBOL
|
376
|
+
int
|
377
|
+
evdns_base_nameserver_sockaddr_add(struct evdns_base *base,
|
378
|
+
const struct sockaddr *sa, ev_socklen_t len, unsigned flags);
|
379
|
+
|
380
|
+
struct evdns_request;
|
381
|
+
|
382
|
+
/**
|
383
|
+
Lookup an A record for a given name.
|
384
|
+
|
385
|
+
@param base the evdns_base to which to apply this operation
|
386
|
+
@param name a DNS hostname
|
387
|
+
@param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query.
|
388
|
+
@param callback a callback function to invoke when the request is completed
|
389
|
+
@param ptr an argument to pass to the callback function
|
390
|
+
@return an evdns_request object if successful, or NULL if an error occurred.
|
391
|
+
@see evdns_resolve_ipv6(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6(), evdns_cancel_request()
|
392
|
+
*/
|
393
|
+
EVENT2_EXPORT_SYMBOL
|
394
|
+
struct evdns_request *evdns_base_resolve_ipv4(struct evdns_base *base, const char *name, int flags, evdns_callback_type callback, void *ptr);
|
395
|
+
|
396
|
+
/**
|
397
|
+
Lookup an AAAA record for a given name.
|
398
|
+
|
399
|
+
@param base the evdns_base to which to apply this operation
|
400
|
+
@param name a DNS hostname
|
401
|
+
@param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query.
|
402
|
+
@param callback a callback function to invoke when the request is completed
|
403
|
+
@param ptr an argument to pass to the callback function
|
404
|
+
@return an evdns_request object if successful, or NULL if an error occurred.
|
405
|
+
@see evdns_resolve_ipv4(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6(), evdns_cancel_request()
|
406
|
+
*/
|
407
|
+
EVENT2_EXPORT_SYMBOL
|
408
|
+
struct evdns_request *evdns_base_resolve_ipv6(struct evdns_base *base, const char *name, int flags, evdns_callback_type callback, void *ptr);
|
409
|
+
|
410
|
+
struct in_addr;
|
411
|
+
struct in6_addr;
|
412
|
+
|
413
|
+
/**
|
414
|
+
Lookup a PTR record for a given IP address.
|
415
|
+
|
416
|
+
@param base the evdns_base to which to apply this operation
|
417
|
+
@param in an IPv4 address
|
418
|
+
@param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query.
|
419
|
+
@param callback a callback function to invoke when the request is completed
|
420
|
+
@param ptr an argument to pass to the callback function
|
421
|
+
@return an evdns_request object if successful, or NULL if an error occurred.
|
422
|
+
@see evdns_resolve_reverse_ipv6(), evdns_cancel_request()
|
423
|
+
*/
|
424
|
+
EVENT2_EXPORT_SYMBOL
|
425
|
+
struct evdns_request *evdns_base_resolve_reverse(struct evdns_base *base, const struct in_addr *in, int flags, evdns_callback_type callback, void *ptr);
|
426
|
+
|
427
|
+
|
428
|
+
/**
|
429
|
+
Lookup a PTR record for a given IPv6 address.
|
430
|
+
|
431
|
+
@param base the evdns_base to which to apply this operation
|
432
|
+
@param in an IPv6 address
|
433
|
+
@param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query.
|
434
|
+
@param callback a callback function to invoke when the request is completed
|
435
|
+
@param ptr an argument to pass to the callback function
|
436
|
+
@return an evdns_request object if successful, or NULL if an error occurred.
|
437
|
+
@see evdns_resolve_reverse_ipv6(), evdns_cancel_request()
|
438
|
+
*/
|
439
|
+
EVENT2_EXPORT_SYMBOL
|
440
|
+
struct evdns_request *evdns_base_resolve_reverse_ipv6(struct evdns_base *base, const struct in6_addr *in, int flags, evdns_callback_type callback, void *ptr);
|
441
|
+
|
442
|
+
/**
|
443
|
+
Cancels a pending DNS resolution request.
|
444
|
+
|
445
|
+
@param base the evdns_base that was used to make the request
|
446
|
+
@param req the evdns_request that was returned by calling a resolve function
|
447
|
+
@see evdns_base_resolve_ipv4(), evdns_base_resolve_ipv6, evdns_base_resolve_reverse
|
448
|
+
*/
|
449
|
+
EVENT2_EXPORT_SYMBOL
|
450
|
+
void evdns_cancel_request(struct evdns_base *base, struct evdns_request *req);
|
451
|
+
|
452
|
+
/**
|
453
|
+
Set the value of a configuration option.
|
454
|
+
|
455
|
+
The currently available configuration options are:
|
456
|
+
|
457
|
+
ndots, timeout, max-timeouts, max-inflight, attempts, randomize-case,
|
458
|
+
bind-to, initial-probe-timeout, getaddrinfo-allow-skew,
|
459
|
+
so-rcvbuf, so-sndbuf.
|
460
|
+
|
461
|
+
In versions before Libevent 2.0.3-alpha, the option name needed to end with
|
462
|
+
a colon.
|
463
|
+
|
464
|
+
@param base the evdns_base to which to apply this operation
|
465
|
+
@param option the name of the configuration option to be modified
|
466
|
+
@param val the value to be set
|
467
|
+
@return 0 if successful, or -1 if an error occurred
|
468
|
+
*/
|
469
|
+
EVENT2_EXPORT_SYMBOL
|
470
|
+
int evdns_base_set_option(struct evdns_base *base, const char *option, const char *val);
|
471
|
+
|
472
|
+
|
473
|
+
/**
|
474
|
+
Parse a resolv.conf file.
|
475
|
+
|
476
|
+
The 'flags' parameter determines what information is parsed from the
|
477
|
+
resolv.conf file. See the man page for resolv.conf for the format of this
|
478
|
+
file.
|
479
|
+
|
480
|
+
The following directives are not parsed from the file: sortlist, rotate,
|
481
|
+
no-check-names, inet6, debug.
|
482
|
+
|
483
|
+
If this function encounters an error, the possible return values are: 1 =
|
484
|
+
failed to open file, 2 = failed to stat file, 3 = file too large, 4 = out of
|
485
|
+
memory, 5 = short read from file, 6 = no nameservers listed in the file
|
486
|
+
|
487
|
+
@param base the evdns_base to which to apply this operation
|
488
|
+
@param flags any of DNS_OPTION_NAMESERVERS|DNS_OPTION_SEARCH|DNS_OPTION_MISC|
|
489
|
+
DNS_OPTION_HOSTSFILE|DNS_OPTIONS_ALL|DNS_OPTION_NAMESERVERS_NO_DEFAULT
|
490
|
+
@param filename the path to the resolv.conf file
|
491
|
+
@return 0 if successful, or various positive error codes if an error
|
492
|
+
occurred (see above)
|
493
|
+
@see resolv.conf(3), evdns_config_windows_nameservers()
|
494
|
+
*/
|
495
|
+
EVENT2_EXPORT_SYMBOL
|
496
|
+
int evdns_base_resolv_conf_parse(struct evdns_base *base, int flags, const char *const filename);
|
497
|
+
|
498
|
+
/**
|
499
|
+
Load an /etc/hosts-style file from 'hosts_fname' into 'base'.
|
500
|
+
|
501
|
+
If hosts_fname is NULL, add minimal entries for localhost, and nothing
|
502
|
+
else.
|
503
|
+
|
504
|
+
Note that only evdns_getaddrinfo uses the /etc/hosts entries.
|
505
|
+
|
506
|
+
This function does not replace previously loaded hosts entries; to do that,
|
507
|
+
call evdns_base_clear_host_addresses first.
|
508
|
+
|
509
|
+
Return 0 on success, negative on failure.
|
510
|
+
*/
|
511
|
+
EVENT2_EXPORT_SYMBOL
|
512
|
+
int evdns_base_load_hosts(struct evdns_base *base, const char *hosts_fname);
|
513
|
+
|
514
|
+
#if defined(EVENT_IN_DOXYGEN_) || defined(_WIN32)
|
515
|
+
/**
|
516
|
+
Obtain nameserver information using the Windows API.
|
517
|
+
|
518
|
+
Attempt to configure a set of nameservers based on platform settings on
|
519
|
+
a win32 host. Preferentially tries to use GetNetworkParams; if that fails,
|
520
|
+
looks in the registry.
|
521
|
+
|
522
|
+
@return 0 if successful, or -1 if an error occurred
|
523
|
+
@see evdns_resolv_conf_parse()
|
524
|
+
*/
|
525
|
+
EVENT2_EXPORT_SYMBOL
|
526
|
+
int evdns_base_config_windows_nameservers(struct evdns_base *);
|
527
|
+
#define EVDNS_BASE_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED
|
528
|
+
#endif
|
529
|
+
|
530
|
+
|
531
|
+
/**
|
532
|
+
Clear the list of search domains.
|
533
|
+
*/
|
534
|
+
EVENT2_EXPORT_SYMBOL
|
535
|
+
void evdns_base_search_clear(struct evdns_base *base);
|
536
|
+
|
537
|
+
|
538
|
+
/**
|
539
|
+
Add a domain to the list of search domains
|
540
|
+
|
541
|
+
@param domain the domain to be added to the search list
|
542
|
+
*/
|
543
|
+
EVENT2_EXPORT_SYMBOL
|
544
|
+
void evdns_base_search_add(struct evdns_base *base, const char *domain);
|
545
|
+
|
546
|
+
|
547
|
+
/**
|
548
|
+
Set the 'ndots' parameter for searches.
|
549
|
+
|
550
|
+
Sets the number of dots which, when found in a name, causes
|
551
|
+
the first query to be without any search domain.
|
552
|
+
|
553
|
+
@param ndots the new ndots parameter
|
554
|
+
*/
|
555
|
+
EVENT2_EXPORT_SYMBOL
|
556
|
+
void evdns_base_search_ndots_set(struct evdns_base *base, const int ndots);
|
557
|
+
|
558
|
+
/**
|
559
|
+
A callback that is invoked when a log message is generated
|
560
|
+
|
561
|
+
@param is_warning indicates if the log message is a 'warning'
|
562
|
+
@param msg the content of the log message
|
563
|
+
*/
|
564
|
+
typedef void (*evdns_debug_log_fn_type)(int is_warning, const char *msg);
|
565
|
+
|
566
|
+
|
567
|
+
/**
|
568
|
+
Set the callback function to handle DNS log messages. If this
|
569
|
+
callback is not set, evdns log messages are handled with the regular
|
570
|
+
Libevent logging system.
|
571
|
+
|
572
|
+
@param fn the callback to be invoked when a log message is generated
|
573
|
+
*/
|
574
|
+
EVENT2_EXPORT_SYMBOL
|
575
|
+
void evdns_set_log_fn(evdns_debug_log_fn_type fn);
|
576
|
+
|
577
|
+
/**
|
578
|
+
Set a callback that will be invoked to generate transaction IDs. By
|
579
|
+
default, we pick transaction IDs based on the current clock time, which
|
580
|
+
is bad for security.
|
581
|
+
|
582
|
+
@param fn the new callback, or NULL to use the default.
|
583
|
+
|
584
|
+
NOTE: This function has no effect in Libevent 2.0.4-alpha and later,
|
585
|
+
since Libevent now provides its own secure RNG.
|
586
|
+
*/
|
587
|
+
EVENT2_EXPORT_SYMBOL
|
588
|
+
void evdns_set_transaction_id_fn(ev_uint16_t (*fn)(void));
|
589
|
+
|
590
|
+
/**
|
591
|
+
Set a callback used to generate random bytes. By default, we use
|
592
|
+
the same function as passed to evdns_set_transaction_id_fn to generate
|
593
|
+
bytes two at a time. If a function is provided here, it's also used
|
594
|
+
to generate transaction IDs.
|
595
|
+
|
596
|
+
NOTE: This function has no effect in Libevent 2.0.4-alpha and later,
|
597
|
+
since Libevent now provides its own secure RNG.
|
598
|
+
*/
|
599
|
+
EVENT2_EXPORT_SYMBOL
|
600
|
+
void evdns_set_random_bytes_fn(void (*fn)(char *, size_t));
|
601
|
+
|
602
|
+
/*
|
603
|
+
* Functions used to implement a DNS server.
|
604
|
+
*/
|
605
|
+
|
606
|
+
struct evdns_server_request;
|
607
|
+
struct evdns_server_question;
|
608
|
+
|
609
|
+
/**
|
610
|
+
A callback to implement a DNS server. The callback function receives a DNS
|
611
|
+
request. It should then optionally add a number of answers to the reply
|
612
|
+
using the evdns_server_request_add_*_reply functions, before calling either
|
613
|
+
evdns_server_request_respond to send the reply back, or
|
614
|
+
evdns_server_request_drop to decline to answer the request.
|
615
|
+
|
616
|
+
@param req A newly received request
|
617
|
+
@param user_data A pointer that was passed to
|
618
|
+
evdns_add_server_port_with_base().
|
619
|
+
*/
|
620
|
+
typedef void (*evdns_request_callback_fn_type)(struct evdns_server_request *, void *);
|
621
|
+
#define EVDNS_ANSWER_SECTION 0
|
622
|
+
#define EVDNS_AUTHORITY_SECTION 1
|
623
|
+
#define EVDNS_ADDITIONAL_SECTION 2
|
624
|
+
|
625
|
+
#define EVDNS_TYPE_A 1
|
626
|
+
#define EVDNS_TYPE_NS 2
|
627
|
+
#define EVDNS_TYPE_CNAME 5
|
628
|
+
#define EVDNS_TYPE_SOA 6
|
629
|
+
#define EVDNS_TYPE_PTR 12
|
630
|
+
#define EVDNS_TYPE_MX 15
|
631
|
+
#define EVDNS_TYPE_TXT 16
|
632
|
+
#define EVDNS_TYPE_AAAA 28
|
633
|
+
|
634
|
+
#define EVDNS_QTYPE_AXFR 252
|
635
|
+
#define EVDNS_QTYPE_ALL 255
|
636
|
+
|
637
|
+
#define EVDNS_CLASS_INET 1
|
638
|
+
|
639
|
+
/* flags that can be set in answers; as part of the err parameter */
|
640
|
+
#define EVDNS_FLAGS_AA 0x400
|
641
|
+
#define EVDNS_FLAGS_RD 0x080
|
642
|
+
|
643
|
+
/** Create a new DNS server port.
|
644
|
+
|
645
|
+
@param base The event base to handle events for the server port.
|
646
|
+
@param socket A UDP socket to accept DNS requests.
|
647
|
+
@param flags Always 0 for now.
|
648
|
+
@param callback A function to invoke whenever we get a DNS request
|
649
|
+
on the socket.
|
650
|
+
@param user_data Data to pass to the callback.
|
651
|
+
@return an evdns_server_port structure for this server port or NULL if
|
652
|
+
an error occurred.
|
653
|
+
*/
|
654
|
+
EVENT2_EXPORT_SYMBOL
|
655
|
+
struct evdns_server_port *evdns_add_server_port_with_base(struct event_base *base, evutil_socket_t socket, int flags, evdns_request_callback_fn_type callback, void *user_data);
|
656
|
+
/** Close down a DNS server port, and free associated structures. */
|
657
|
+
EVENT2_EXPORT_SYMBOL
|
658
|
+
void evdns_close_server_port(struct evdns_server_port *port);
|
659
|
+
|
660
|
+
/** Sets some flags in a reply we're building.
|
661
|
+
Allows setting of the AA or RD flags
|
662
|
+
*/
|
663
|
+
EVENT2_EXPORT_SYMBOL
|
664
|
+
void evdns_server_request_set_flags(struct evdns_server_request *req, int flags);
|
665
|
+
|
666
|
+
/* Functions to add an answer to an in-progress DNS reply.
|
667
|
+
*/
|
668
|
+
EVENT2_EXPORT_SYMBOL
|
669
|
+
int evdns_server_request_add_reply(struct evdns_server_request *req, int section, const char *name, int type, int dns_class, int ttl, int datalen, int is_name, const char *data);
|
670
|
+
EVENT2_EXPORT_SYMBOL
|
671
|
+
int evdns_server_request_add_a_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl);
|
672
|
+
EVENT2_EXPORT_SYMBOL
|
673
|
+
int evdns_server_request_add_aaaa_reply(struct evdns_server_request *req, const char *name, int n, const void *addrs, int ttl);
|
674
|
+
EVENT2_EXPORT_SYMBOL
|
675
|
+
int evdns_server_request_add_ptr_reply(struct evdns_server_request *req, struct in_addr *in, const char *inaddr_name, const char *hostname, int ttl);
|
676
|
+
EVENT2_EXPORT_SYMBOL
|
677
|
+
int evdns_server_request_add_cname_reply(struct evdns_server_request *req, const char *name, const char *cname, int ttl);
|
678
|
+
|
679
|
+
/**
|
680
|
+
Send back a response to a DNS request, and free the request structure.
|
681
|
+
*/
|
682
|
+
EVENT2_EXPORT_SYMBOL
|
683
|
+
int evdns_server_request_respond(struct evdns_server_request *req, int err);
|
684
|
+
/**
|
685
|
+
Free a DNS request without sending back a reply.
|
686
|
+
*/
|
687
|
+
EVENT2_EXPORT_SYMBOL
|
688
|
+
int evdns_server_request_drop(struct evdns_server_request *req);
|
689
|
+
struct sockaddr;
|
690
|
+
/**
|
691
|
+
Get the address that made a DNS request.
|
692
|
+
*/
|
693
|
+
EVENT2_EXPORT_SYMBOL
|
694
|
+
int evdns_server_request_get_requesting_addr(struct evdns_server_request *req, struct sockaddr *sa, int addr_len);
|
695
|
+
|
696
|
+
/** Callback for evdns_getaddrinfo. */
|
697
|
+
typedef void (*evdns_getaddrinfo_cb)(int result, struct evutil_addrinfo *res, void *arg);
|
698
|
+
|
699
|
+
struct evdns_base;
|
700
|
+
struct evdns_getaddrinfo_request;
|
701
|
+
/** Make a non-blocking getaddrinfo request using the dns_base in 'dns_base'.
|
702
|
+
*
|
703
|
+
* If we can answer the request immediately (with an error or not!), then we
|
704
|
+
* invoke cb immediately and return NULL. Otherwise we return
|
705
|
+
* an evdns_getaddrinfo_request and invoke cb later.
|
706
|
+
*
|
707
|
+
* When the callback is invoked, we pass as its first argument the error code
|
708
|
+
* that getaddrinfo would return (or 0 for no error). As its second argument,
|
709
|
+
* we pass the evutil_addrinfo structures we found (or NULL on error). We
|
710
|
+
* pass 'arg' as the third argument.
|
711
|
+
*
|
712
|
+
* Limitations:
|
713
|
+
*
|
714
|
+
* - The AI_V4MAPPED and AI_ALL flags are not currently implemented.
|
715
|
+
* - For ai_socktype, we only handle SOCKTYPE_STREAM, SOCKTYPE_UDP, and 0.
|
716
|
+
* - For ai_protocol, we only handle IPPROTO_TCP, IPPROTO_UDP, and 0.
|
717
|
+
*/
|
718
|
+
EVENT2_EXPORT_SYMBOL
|
719
|
+
struct evdns_getaddrinfo_request *evdns_getaddrinfo(
|
720
|
+
struct evdns_base *dns_base,
|
721
|
+
const char *nodename, const char *servname,
|
722
|
+
const struct evutil_addrinfo *hints_in,
|
723
|
+
evdns_getaddrinfo_cb cb, void *arg);
|
724
|
+
|
725
|
+
/* Cancel an in-progress evdns_getaddrinfo. This MUST NOT be called after the
|
726
|
+
* getaddrinfo's callback has been invoked. The resolves will be canceled,
|
727
|
+
* and the callback will be invoked with the error EVUTIL_EAI_CANCEL. */
|
728
|
+
EVENT2_EXPORT_SYMBOL
|
729
|
+
void evdns_getaddrinfo_cancel(struct evdns_getaddrinfo_request *req);
|
730
|
+
|
731
|
+
/**
|
732
|
+
Retrieve the address of the 'idx'th configured nameserver.
|
733
|
+
|
734
|
+
@param base The evdns_base to examine.
|
735
|
+
@param idx The index of the nameserver to get the address of.
|
736
|
+
@param sa A location to receive the server's address.
|
737
|
+
@param len The number of bytes available at sa.
|
738
|
+
|
739
|
+
@return the number of bytes written into sa on success. On failure, returns
|
740
|
+
-1 if idx is greater than the number of configured nameservers, or a
|
741
|
+
value greater than 'len' if len was not high enough.
|
742
|
+
*/
|
743
|
+
EVENT2_EXPORT_SYMBOL
|
744
|
+
int evdns_base_get_nameserver_addr(struct evdns_base *base, int idx,
|
745
|
+
struct sockaddr *sa, ev_socklen_t len);
|
746
|
+
|
747
|
+
#ifdef __cplusplus
|
748
|
+
}
|
749
|
+
#endif
|
750
|
+
|
751
|
+
#endif /* !EVENT2_DNS_H_INCLUDED_ */
|