X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FIOHandler%2FIODNSLookup.c;h=e6201639fa84af990c2e4fa6cd3b3a5bf376837b;hb=acc7f60740ab12e2410fd3187fcb9a27995c0638;hp=71d014daf45d10270dfa132ef46f6f9984c08402;hpb=ff504c46f70bde2d66a42fb814d91008891742e6;p=NextIRCd.git diff --git a/src/IOHandler/IODNSLookup.c b/src/IOHandler/IODNSLookup.c index 71d014d..e620163 100644 --- a/src/IOHandler/IODNSLookup.c +++ b/src/IOHandler/IODNSLookup.c @@ -21,6 +21,23 @@ #include "IOLog.h" #include "IOSockets.h" +#ifdef WIN32 +#ifdef _WIN32_WINNT +#undef _WIN32_WINNT +#endif +#define _WIN32_WINNT 0x501 +#include +#include +#include +#else +#include +#include +#include +#include +#include +#include +#endif + #include struct _IODNSQuery *iodnsquery_first = NULL; @@ -130,7 +147,7 @@ void iodns_poll() { /* public functions */ -struct IODNSQuery *iodns_getaddrinfo(char *hostname, int records, iodns_callback *callback) { +struct IODNSQuery *iodns_getaddrinfo(char *hostname, int records, iodns_callback *callback, void *arg) { if(!(records & IODNS_FORWARD) || !hostname || !callback) return NULL; @@ -149,6 +166,7 @@ struct IODNSQuery *iodns_getaddrinfo(char *hostname, int records, iodns_callback query->parent = descriptor; query->flags |= IODNSFLAG_PARENT_PUBLIC; descriptor->query = query; + descriptor->data = arg; query->request.host = strdup(hostname); query->type = (records & IODNS_FORWARD); @@ -159,7 +177,7 @@ struct IODNSQuery *iodns_getaddrinfo(char *hostname, int records, iodns_callback return descriptor; } -struct IODNSQuery *iodns_getnameinfo(const struct sockaddr *addr, size_t addrlen, iodns_callback *callback) { +struct IODNSQuery *iodns_getnameinfo(const struct sockaddr *addr, size_t addrlen, iodns_callback *callback, void *arg) { if(!addr || !callback) return NULL; @@ -178,6 +196,7 @@ struct IODNSQuery *iodns_getnameinfo(const struct sockaddr *addr, size_t addrlen query->parent = descriptor; query->flags |= IODNSFLAG_PARENT_PUBLIC; descriptor->query = query; + descriptor->data = arg; query->type = IODNS_RECORD_PTR; query->request.addr.addresslen = addrlen; @@ -209,6 +228,23 @@ void iodns_abort(struct IODNSQuery *descriptor) { _stop_dnsquery(query); } +int iodns_print_address(struct IODNSAddress *address, int ipv6, char *buffer, int length) { + int af; + void *addr; + if(ipv6) { + af = AF_INET6; + addr = (void *)(&((struct sockaddr_in6 *)address->address)->sin6_addr); + } else { + af = AF_INET; + addr = (void *)(&((struct sockaddr_in *)address->address)->sin_addr); + } + buffer = inet_ntop(af, addr, buffer, length); + if(!buffer) + return 0; + else + return strlen(buffer); +} + void iodns_free_result(struct IODNSResult *result) { struct IODNSResult *next; for(;result;result = next) {