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 #ifndef EVENT2_DNS_COMPAT_H_INCLUDED_ 28 #define EVENT2_DNS_COMPAT_H_INCLUDED_ 29 30 /** @file event2/dns_compat.h 31 32 Potentially non-threadsafe versions of the functions in dns.h: provided 33 only for backwards compatibility. 34 35 36 */ 37 38 #ifdef __cplusplus 39 extern "C" { 40 #endif 41 42 #include <event2/event-config.h> 43 #ifdef EVENT__HAVE_SYS_TYPES_H 44 #include <sys/types.h> 45 #endif 46 #ifdef EVENT__HAVE_SYS_TIME_H 47 #include <sys/time.h> 48 #endif 49 50 /* For int types. */ 51 #include <event2/util.h> 52 #include <event2/visibility.h> 53 54 /** 55 Initialize the asynchronous DNS library. 56 57 This function initializes support for non-blocking name resolution by 58 calling evdns_resolv_conf_parse() on UNIX and 59 evdns_config_windows_nameservers() on Windows. 60 61 @deprecated This function is deprecated because it always uses the current 62 event base, and is easily confused by multiple calls to event_init(), and 63 so is not safe for multithreaded use. Additionally, it allocates a global 64 structure that only one thread can use. The replacement is 65 evdns_base_new(). 66 67 @return 0 if successful, or -1 if an error occurred 68 @see evdns_shutdown() 69 */ 70 EVENT2_EXPORT_SYMBOL 71 int evdns_init(void); 72 73 struct evdns_base; 74 /** 75 Return the global evdns_base created by event_init() and used by the other 76 deprecated functions. 77 78 @deprecated This function is deprecated because use of the global 79 evdns_base is error-prone. 80 */ 81 EVENT2_EXPORT_SYMBOL 82 struct evdns_base *evdns_get_global_base(void); 83 84 /** 85 Shut down the asynchronous DNS resolver and terminate all active requests. 86 87 If the 'fail_requests' option is enabled, all active requests will return 88 an empty result with the error flag set to DNS_ERR_SHUTDOWN. Otherwise, 89 the requests will be silently discarded. 90 91 @deprecated This function is deprecated because it does not allow the 92 caller to specify which evdns_base it applies to. The recommended 93 function is evdns_base_shutdown(). 94 95 @param fail_requests if zero, active requests will be aborted; if non-zero, 96 active requests will return DNS_ERR_SHUTDOWN. 97 @see evdns_init() 98 */ 99 EVENT2_EXPORT_SYMBOL 100 void evdns_shutdown(int fail_requests); 101 102 /** 103 Add a nameserver. 104 105 The address should be an IPv4 address in network byte order. 106 The type of address is chosen so that it matches in_addr.s_addr. 107 108 @deprecated This function is deprecated because it does not allow the 109 caller to specify which evdns_base it applies to. The recommended 110 function is evdns_base_nameserver_add(). 111 112 @param address an IP address in network byte order 113 @return 0 if successful, or -1 if an error occurred 114 @see evdns_nameserver_ip_add() 115 */ 116 EVENT2_EXPORT_SYMBOL 117 int evdns_nameserver_add(unsigned long int address); 118 119 /** 120 Get the number of configured nameservers. 121 122 This returns the number of configured nameservers (not necessarily the 123 number of running nameservers). This is useful for double-checking 124 whether our calls to the various nameserver configuration functions 125 have been successful. 126 127 @deprecated This function is deprecated because it does not allow the 128 caller to specify which evdns_base it applies to. The recommended 129 function is evdns_base_count_nameservers(). 130 131 @return the number of configured nameservers 132 @see evdns_nameserver_add() 133 */ 134 EVENT2_EXPORT_SYMBOL 135 int evdns_count_nameservers(void); 136 137 /** 138 Remove all configured nameservers, and suspend all pending resolves. 139 140 Resolves will not necessarily be re-attempted until evdns_resume() is called. 141 142 @deprecated This function is deprecated because it does not allow the 143 caller to specify which evdns_base it applies to. The recommended 144 function is evdns_base_clear_nameservers_and_suspend(). 145 146 @return 0 if successful, or -1 if an error occurred 147 @see evdns_resume() 148 */ 149 EVENT2_EXPORT_SYMBOL 150 int evdns_clear_nameservers_and_suspend(void); 151 152 /** 153 Resume normal operation and continue any suspended resolve requests. 154 155 Re-attempt resolves left in limbo after an earlier call to 156 evdns_clear_nameservers_and_suspend(). 157 158 @deprecated This function is deprecated because it does not allow the 159 caller to specify which evdns_base it applies to. The recommended 160 function is evdns_base_resume(). 161 162 @return 0 if successful, or -1 if an error occurred 163 @see evdns_clear_nameservers_and_suspend() 164 */ 165 EVENT2_EXPORT_SYMBOL 166 int evdns_resume(void); 167 168 /** 169 Add a nameserver. 170 171 This wraps the evdns_nameserver_add() function by parsing a string as an IP 172 address and adds it as a nameserver. 173 174 @deprecated This function is deprecated because it does not allow the 175 caller to specify which evdns_base it applies to. The recommended 176 function is evdns_base_nameserver_ip_add(). 177 178 @return 0 if successful, or -1 if an error occurred 179 @see evdns_nameserver_add() 180 */ 181 EVENT2_EXPORT_SYMBOL 182 int evdns_nameserver_ip_add(const char *ip_as_string); 183 184 /** 185 Lookup an A record for a given name. 186 187 @deprecated This function is deprecated because it does not allow the 188 caller to specify which evdns_base it applies to. The recommended 189 function is evdns_base_resolve_ipv4(). 190 191 @param name a DNS hostname 192 @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. 193 @param callback a callback function to invoke when the request is completed 194 @param ptr an argument to pass to the callback function 195 @return 0 if successful, or -1 if an error occurred 196 @see evdns_resolve_ipv6(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6() 197 */ 198 EVENT2_EXPORT_SYMBOL 199 int evdns_resolve_ipv4(const char *name, int flags, evdns_callback_type callback, void *ptr); 200 201 /** 202 Lookup an AAAA record for a given name. 203 204 @param name a DNS hostname 205 @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. 206 @param callback a callback function to invoke when the request is completed 207 @param ptr an argument to pass to the callback function 208 @return 0 if successful, or -1 if an error occurred 209 @see evdns_resolve_ipv4(), evdns_resolve_reverse(), evdns_resolve_reverse_ipv6() 210 */ 211 EVENT2_EXPORT_SYMBOL 212 int evdns_resolve_ipv6(const char *name, int flags, evdns_callback_type callback, void *ptr); 213 214 struct in_addr; 215 struct in6_addr; 216 217 /** 218 Lookup a PTR record for a given IP address. 219 220 @deprecated This function is deprecated because it does not allow the 221 caller to specify which evdns_base it applies to. The recommended 222 function is evdns_base_resolve_reverse(). 223 224 @param in an IPv4 address 225 @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. 226 @param callback a callback function to invoke when the request is completed 227 @param ptr an argument to pass to the callback function 228 @return 0 if successful, or -1 if an error occurred 229 @see evdns_resolve_reverse_ipv6() 230 */ 231 EVENT2_EXPORT_SYMBOL 232 int evdns_resolve_reverse(const struct in_addr *in, int flags, evdns_callback_type callback, void *ptr); 233 234 /** 235 Lookup a PTR record for a given IPv6 address. 236 237 @deprecated This function is deprecated because it does not allow the 238 caller to specify which evdns_base it applies to. The recommended 239 function is evdns_base_resolve_reverse_ipv6(). 240 241 @param in an IPv6 address 242 @param flags either 0, or DNS_QUERY_NO_SEARCH to disable searching for this query. 243 @param callback a callback function to invoke when the request is completed 244 @param ptr an argument to pass to the callback function 245 @return 0 if successful, or -1 if an error occurred 246 @see evdns_resolve_reverse_ipv6() 247 */ 248 EVENT2_EXPORT_SYMBOL 249 int evdns_resolve_reverse_ipv6(const struct in6_addr *in, int flags, evdns_callback_type callback, void *ptr); 250 251 /** 252 Set the value of a configuration option. 253 254 The currently available configuration options are: 255 256 ndots, timeout, max-timeouts, max-inflight, and attempts 257 258 @deprecated This function is deprecated because it does not allow the 259 caller to specify which evdns_base it applies to. The recommended 260 function is evdns_base_set_option(). 261 262 @param option the name of the configuration option to be modified 263 @param val the value to be set 264 @param flags Ignored. 265 @return 0 if successful, or -1 if an error occurred 266 */ 267 EVENT2_EXPORT_SYMBOL 268 int evdns_set_option(const char *option, const char *val, int flags); 269 270 /** 271 Parse a resolv.conf file. 272 273 The 'flags' parameter determines what information is parsed from the 274 resolv.conf file. See the man page for resolv.conf for the format of this 275 file. 276 277 The following directives are not parsed from the file: sortlist, rotate, 278 no-check-names, inet6, debug. 279 280 If this function encounters an error, the possible return values are: 1 = 281 failed to open file, 2 = failed to stat file, 3 = file too large, 4 = out of 282 memory, 5 = short read from file, 6 = no nameservers listed in the file 283 284 @deprecated This function is deprecated because it does not allow the 285 caller to specify which evdns_base it applies to. The recommended 286 function is evdns_base_resolv_conf_parse(). 287 288 @param flags any of DNS_OPTION_NAMESERVERS|DNS_OPTION_SEARCH|DNS_OPTION_MISC| 289 DNS_OPTIONS_ALL 290 @param filename the path to the resolv.conf file 291 @return 0 if successful, or various positive error codes if an error 292 occurred (see above) 293 @see resolv.conf(3), evdns_config_windows_nameservers() 294 */ 295 EVENT2_EXPORT_SYMBOL 296 int evdns_resolv_conf_parse(int flags, const char *const filename); 297 298 /** 299 Clear the list of search domains. 300 301 @deprecated This function is deprecated because it does not allow the 302 caller to specify which evdns_base it applies to. The recommended 303 function is evdns_base_search_clear(). 304 */ 305 EVENT2_EXPORT_SYMBOL 306 void evdns_search_clear(void); 307 308 /** 309 Add a domain to the list of search domains 310 311 @deprecated This function is deprecated because it does not allow the 312 caller to specify which evdns_base it applies to. The recommended 313 function is evdns_base_search_add(). 314 315 @param domain the domain to be added to the search list 316 */ 317 EVENT2_EXPORT_SYMBOL 318 void evdns_search_add(const char *domain); 319 320 /** 321 Set the 'ndots' parameter for searches. 322 323 Sets the number of dots which, when found in a name, causes 324 the first query to be without any search domain. 325 326 @deprecated This function is deprecated because it does not allow the 327 caller to specify which evdns_base it applies to. The recommended 328 function is evdns_base_search_ndots_set(). 329 330 @param ndots the new ndots parameter 331 */ 332 EVENT2_EXPORT_SYMBOL 333 void evdns_search_ndots_set(const int ndots); 334 335 /** 336 As evdns_server_new_with_base. 337 338 @deprecated This function is deprecated because it does not allow the 339 caller to specify which even_base it uses. The recommended 340 function is evdns_add_server_port_with_base(). 341 342 */ 343 EVENT2_EXPORT_SYMBOL 344 struct evdns_server_port * 345 evdns_add_server_port(evutil_socket_t socket, int flags, 346 evdns_request_callback_fn_type callback, void *user_data); 347 348 #ifdef _WIN32 349 EVENT2_EXPORT_SYMBOL 350 int evdns_config_windows_nameservers(void); 351 #define EVDNS_CONFIG_WINDOWS_NAMESERVERS_IMPLEMENTED 352 #endif 353 354 #ifdef __cplusplus 355 } 356 #endif 357 358 #endif /* EVENT2_EVENT_COMPAT_H_INCLUDED_ */ 359