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