#ifndef _NETDB_H #define _NETDB_H #ifdef __cplusplus extern "C" { #endif #include #include #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) #define __NEED_size_t #include #endif struct addrinfo { int ai_flags; int ai_family; int ai_socktype; int ai_protocol; socklen_t ai_addrlen; struct sockaddr *ai_addr; char *ai_canonname; struct addrinfo *ai_next; }; typedef int (*net_dnsquery_hook)(int, int, int); typedef int (*custom_dns_resolver)(const char *host, const char *serv, const struct addrinfo *hint, struct addrinfo **res); enum { QEURY_TYPE_NORMAL = 0, QEURY_TYPE_NETSYS, }; struct queryparam { int qp_type; int qp_netid; int qp_mark; int qp_flag; net_dnsquery_hook qhook; }; #define AI_PASSIVE 0x01 #define AI_CANONNAME 0x02 #define AI_NUMERICHOST 0x04 #define AI_V4MAPPED 0x08 #define AI_ALL 0x10 #define AI_ADDRCONFIG 0x20 #define AI_NUMERICSERV 0x400 #define NI_NUMERICHOST 0x01 #define NI_NUMERICSERV 0x02 #define NI_NOFQDN 0x04 #define NI_NAMEREQD 0x08 #define NI_DGRAM 0x10 #define NI_NUMERICSCOPE 0x100 #define EAI_BADFLAGS -1 #define EAI_NONAME -2 #define EAI_AGAIN -3 #define EAI_FAIL -4 #define EAI_FAMILY -6 #define EAI_SOCKTYPE -7 #define EAI_SERVICE -8 #define EAI_MEMORY -10 #define EAI_SYSTEM -11 #define EAI_OVERFLOW -12 int getaddrinfo (const char *__restrict, const char *__restrict, const struct addrinfo *__restrict, struct addrinfo **__restrict); int getaddrinfo_ext (const char *__restrict, const char *__restrict, const struct addrinfo *__restrict, struct addrinfo **__restrict, struct queryparam *__restrict); void freeaddrinfo (struct addrinfo *); int getnameinfo (const struct sockaddr *__restrict, socklen_t, char *__restrict, socklen_t, char *__restrict, socklen_t, int); const char *gai_strerror(int); int setdnsresolvehook(custom_dns_resolver hookfunc); int removednsresolvehook(); int getaddrinfo_hook(const char* host, const char* serv, const struct addrinfo* hint, struct addrinfo** res); int predefined_host_set_host(const char* host, const char* ip); int predefined_host_set_hosts(const char* host_ips); int predefined_host_clear_all_hosts(void); int predefined_host_remove_host(const char *host); /* Legacy functions follow (marked OBsolete in SUS) */ struct netent { char *n_name; char **n_aliases; int n_addrtype; uint32_t n_net; }; struct hostent { char *h_name; char **h_aliases; int h_addrtype; int h_length; char **h_addr_list; }; #define h_addr h_addr_list[0] struct servent { char *s_name; char **s_aliases; int s_port; char *s_proto; }; struct protoent { char *p_name; char **p_aliases; int p_proto; }; void sethostent (int); void endhostent (void); struct hostent *gethostent (void); void setnetent (int); void endnetent (void); struct netent *getnetent (void); struct netent *getnetbyaddr (uint32_t, int); struct netent *getnetbyname (const char *); void setservent (int); void endservent (void); struct servent *getservent (void); struct servent *getservbyname (const char *, const char *); struct servent *getservbyport (int, const char *); void setprotoent (int); void endprotoent (void); struct protoent *getprotoent (void); struct protoent *getprotobyname (const char *); struct protoent *getprotobynumber (int); #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) || defined(_POSIX_SOURCE) \ || (defined(_POSIX_C_SOURCE) && _POSIX_C_SOURCE+0 < 200809L) \ || (defined(_XOPEN_SOURCE) && _XOPEN_SOURCE+0 < 700) struct hostent *gethostbyname (const char *); struct hostent *gethostbyaddr (const void *, socklen_t, int); #ifdef __GNUC__ __attribute__((const)) #endif int *__h_errno_location(void); #define h_errno (*__h_errno_location()) #define HOST_NOT_FOUND 1 #define TRY_AGAIN 2 #define NO_RECOVERY 3 #define NO_DATA 4 #define NO_ADDRESS NO_DATA #endif #if defined(_GNU_SOURCE) || defined(_BSD_SOURCE) void herror(const char *); const char *hstrerror(int); int gethostbyname_r(const char *, struct hostent *, char *, size_t, struct hostent **, int *); int gethostbyname2_r(const char *, int, struct hostent *, char *, size_t, struct hostent **, int *); struct hostent *gethostbyname2(const char *, int); int gethostbyaddr_r(const void *, socklen_t, int, struct hostent *, char *, size_t, struct hostent **, int *); int getservbyport_r(int, const char *, struct servent *, char *, size_t, struct servent **); int getservbyname_r(const char *, const char *, struct servent *, char *, size_t, struct servent **); #define EAI_NODATA -5 #define EAI_ADDRFAMILY -9 #define EAI_INPROGRESS -100 #define EAI_CANCELED -101 #define EAI_NOTCANCELED -102 #define EAI_ALLDONE -103 #define EAI_INTR -104 #define EAI_IDN_ENCODE -105 #define NI_MAXHOST 255 #define NI_MAXSERV 32 #endif #ifdef __cplusplus } #endif #endif