lookup.h raw

   1  #ifndef LOOKUP_H
   2  #define LOOKUP_H
   3  
   4  #include <stdint.h>
   5  #include <stddef.h>
   6  #include <features.h>
   7  #include <netinet/in.h>
   8  #include <netdb.h>
   9  
  10  struct aibuf {
  11  	struct addrinfo ai;
  12  	union sa {
  13  		struct sockaddr_in sin;
  14  		struct sockaddr_in6 sin6;
  15  	} sa;
  16  	volatile int lock[1];
  17  	short slot, ref;
  18  };
  19  
  20  struct address {
  21  	int family;
  22  	unsigned scopeid;
  23  	uint8_t addr[16];
  24  	int sortkey;
  25  };
  26  
  27  struct service {
  28  	uint16_t port;
  29  	unsigned char proto, socktype;
  30  };
  31  
  32  #define MAXNS 3
  33  
  34  struct resolvconf {
  35  	struct address ns[MAXNS];
  36  	unsigned nns, attempts, ndots;
  37  	unsigned timeout;
  38  };
  39  
  40  /* The limit of 48 results is a non-sharp bound on the number of addresses
  41   * that can fit in one 512-byte DNS packet full of v4 results and a second
  42   * packet full of v6 results. Due to headers, the actual limit is lower. */
  43  #define MAXADDRS 48
  44  #define MAXSERVS 2
  45  
  46  hidden int __lookup_serv(struct service buf[static MAXSERVS], const char *name, int proto, int socktype, int flags);
  47  hidden int __lookup_name(struct address buf[static MAXADDRS], char canon[static 256], const char *name, int family, int flags);
  48  hidden int __lookup_ipliteral(struct address buf[static 1], const char *name, int family);
  49  
  50  hidden int __get_resolv_conf(struct resolvconf *, char *, size_t);
  51  hidden int __res_msend_rc(int, const unsigned char *const *, const int *, unsigned char *const *, int *, int, const struct resolvconf *);
  52  
  53  hidden int __dns_parse(const unsigned char *, int, int (*)(void *, int, const void *, int, const void *), void *);
  54  
  55  #endif
  56