tor-browser

The Tor Browser
git clone https://git.dasho.dev/tor-browser.git
Log | Files | Refs | README | LICENSE

dns_compat.h (12588B)


      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_ */