1#pragma once 2 3#include <arpa/nameser.h> 4#include <netinet/in.h> 5#include <stdint.h> 6 7#ifdef __cplusplus 8extern "C" { 9#endif 10 11#define MAXNS 3 12#define MAXDFLSRCH 3 13#define MAXDNSRCH 6 14#define LOCALDOMAINPARTS 2 15 16#define RES_TIMEOUT 5 17#define MAXRESOLVSORT 10 18#define RES_MAXNDOTS 15 19#define RES_MAXRETRANS 30 20#define RES_MAXRETRY 5 21#define RES_DFLRETRY 2 22#define RES_MAXTIME 65535 23 24/* unused; purely for broken apps */ 25typedef struct __res_state { 26 int retrans; 27 int retry; 28 unsigned long options; 29 int nscount; 30 struct sockaddr_in nsaddr_list[MAXNS]; 31#define nsaddr nsaddr_list[0] 32 unsigned short id; 33 char* dnsrch[MAXDNSRCH + 1]; 34 char defdname[256]; 35 unsigned long pfcode; 36 unsigned ndots : 4; 37 unsigned nsort : 4; 38 unsigned ipv6_unavail : 1; 39 unsigned unused : 23; 40 struct { 41 struct in_addr addr; 42 uint32_t mask; 43 } sort_list[MAXRESOLVSORT]; 44 void* qhook; 45 void* rhook; 46 int res_h_errno; 47 int _vcsock; 48 unsigned _flags; 49 union { 50 char pad[52]; 51 struct { 52 uint16_t nscount; 53 uint16_t nsmap[MAXNS]; 54 int nssocks[MAXNS]; 55 uint16_t nscount6; 56 uint16_t nsinit; 57 struct sockaddr_in6* nsaddrs[MAXNS]; 58 unsigned int _initstamp[2]; 59 } _ext; 60 } _u; 61} * res_state; 62 63#define __RES 19991006 64 65#ifndef _PATH_RESCONF 66#define _PATH_RESCONF "/etc/resolv.conf" 67#endif 68 69struct res_sym { 70 int number; 71 char* name; 72 char* humanname; 73}; 74 75#define RES_F_VC 0x00000001 76#define RES_F_CONN 0x00000002 77#define RES_F_EDNS0ERR 0x00000004 78 79#define RES_EXHAUSTIVE 0x00000001 80 81#define RES_INIT 0x00000001 82#define RES_DEBUG 0x00000002 83#define RES_AAONLY 0x00000004 84#define RES_USEVC 0x00000008 85#define RES_PRIMARY 0x00000010 86#define RES_IGNTC 0x00000020 87#define RES_RECURSE 0x00000040 88#define RES_DEFNAMES 0x00000080 89#define RES_STAYOPEN 0x00000100 90#define RES_DNSRCH 0x00000200 91#define RES_INSECURE1 0x00000400 92#define RES_INSECURE2 0x00000800 93#define RES_NOALIASES 0x00001000 94#define RES_USE_INET6 0x00002000 95#define RES_ROTATE 0x00004000 96#define RES_NOCHECKNAME 0x00008000 97#define RES_KEEPTSIG 0x00010000 98#define RES_BLAST 0x00020000 99#define RES_USEBSTRING 0x00040000 100#define RES_NOIP6DOTINT 0x00080000 101#define RES_USE_EDNS0 0x00100000 102#define RES_SNGLKUP 0x00200000 103#define RES_SNGLKUPREOP 0x00400000 104#define RES_USE_DNSSEC 0x00800000 105 106#define RES_DEFAULT (RES_RECURSE | RES_DEFNAMES | RES_DNSRCH | RES_NOIP6DOTINT) 107 108#define RES_PRF_STATS 0x00000001 109#define RES_PRF_UPDATE 0x00000002 110#define RES_PRF_CLASS 0x00000004 111#define RES_PRF_CMD 0x00000008 112#define RES_PRF_QUES 0x00000010 113#define RES_PRF_ANS 0x00000020 114#define RES_PRF_AUTH 0x00000040 115#define RES_PRF_ADD 0x00000080 116#define RES_PRF_HEAD1 0x00000100 117#define RES_PRF_HEAD2 0x00000200 118#define RES_PRF_TTLID 0x00000400 119#define RES_PRF_HEADX 0x00000800 120#define RES_PRF_QUERY 0x00001000 121#define RES_PRF_REPLY 0x00002000 122#define RES_PRF_INIT 0x00004000 123 124struct __res_state* __res_state(void); 125#define _res (*__res_state()) 126 127int res_init(void); 128int res_query(const char*, int, int, unsigned char*, int); 129int res_querydomain(const char*, const char*, int, int, unsigned char*, int); 130int res_search(const char*, int, int, unsigned char*, int); 131int res_mkquery(int, const char*, int, int, const unsigned char*, int, const unsigned char*, 132 unsigned char*, int); 133int res_send(const unsigned char*, int, unsigned char*, int); 134int dn_comp(const char*, unsigned char*, int, unsigned char**, unsigned char**); 135int dn_expand(const unsigned char*, const unsigned char*, const unsigned char*, char*, int); 136int dn_skipname(const unsigned char*, const unsigned char*); 137 138#ifdef __cplusplus 139} 140#endif 141