tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

resolve.h (2195B)


      1 /* Copyright (c) 2003-2004, Roger Dingledine
      2 * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
      3 * Copyright (c) 2007-2021, The Tor Project, Inc. */
      4 /* See LICENSE for licensing information */
      5 
      6 /**
      7 * \file resolve.h
      8 * \brief Header for resolve.c
      9 **/
     10 
     11 #ifndef TOR_RESOLVE_H
     12 #define TOR_RESOLVE_H
     13 
     14 #include "orconfig.h"
     15 #include "lib/cc/torint.h"
     16 #include "lib/testsupport/testsupport.h"
     17 #ifdef _WIN32
     18 #include <winsock2.h>
     19 #endif
     20 
     21 #if defined(HAVE_SECCOMP_H) && defined(__linux__)
     22 #define USE_SANDBOX_GETADDRINFO
     23 #endif
     24 
     25 struct tor_addr_t;
     26 
     27 /*
     28 * Primary lookup functions.
     29 */
     30 MOCK_DECL(int, tor_lookup_hostname,(const char *name, uint32_t *addr));
     31 MOCK_DECL(int, tor_addr_lookup,(const char *name, uint16_t family,
     32                                struct tor_addr_t *addr_out));
     33 int tor_addr_port_lookup(const char *s, struct tor_addr_t *addr_out,
     34                         uint16_t *port_out);
     35 
     36 /*
     37 * Sandbox helpers
     38 */
     39 struct addrinfo;
     40 #ifdef USE_SANDBOX_GETADDRINFO
     41 /** Pre-calls getaddrinfo in order to pre-record result. */
     42 int tor_add_addrinfo(const char *addr);
     43 
     44 struct addrinfo;
     45 /** Replacement for getaddrinfo(), using pre-recorded results. */
     46 int tor_getaddrinfo(const char *name, const char *servname,
     47                        const struct addrinfo *hints,
     48                        struct addrinfo **res);
     49 void tor_freeaddrinfo(struct addrinfo *addrinfo);
     50 void tor_free_getaddrinfo_cache(void);
     51 #else /* !defined(USE_SANDBOX_GETADDRINFO) */
     52 #define tor_getaddrinfo(name, servname, hints, res)  \
     53  getaddrinfo((name),(servname), (hints),(res))
     54 #define tor_add_addrinfo(name) \
     55  ((void)(name))
     56 #define tor_freeaddrinfo(addrinfo) \
     57  freeaddrinfo((addrinfo))
     58 #define tor_free_getaddrinfo_cache()
     59 #endif /* defined(USE_SANDBOX_GETADDRINFO) */
     60 
     61 void sandbox_disable_getaddrinfo_cache(void);
     62 void tor_make_getaddrinfo_cache_active(void);
     63 
     64 /*
     65 * Internal resolver wrapper; exposed for mocking.
     66 */
     67 #ifdef RESOLVE_PRIVATE
     68 MOCK_DECL(STATIC int, tor_addr_lookup_host_impl, (const char *name,
     69                                                  uint16_t family,
     70                                                  struct tor_addr_t *addr));
     71 #endif
     72 
     73 #endif /* !defined(TOR_RESOLVE_H) */