X-Git-Url: http://git.pk910.de/?a=blobdiff_plain;f=src%2FIOHandler%2FIODNSLookup.c;h=732cc0efedaef4434cd281d56c2a346c14fce113;hb=a78c35d7b5b9d725c6604f899d1fb58705d9673f;hp=e39a9cfc0494a25d3598937a9418628f4dd0fdd7;hpb=9e6045c7b6d7afc774eeb59fa5f5c4e02fe1f037;p=NextIRCd.git diff --git a/src/IOHandler/IODNSLookup.c b/src/IOHandler/IODNSLookup.c index e39a9cf..732cc0e 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; @@ -90,6 +107,11 @@ void _stop_dnsquery(struct _IODNSQuery *query) { _free_dnsquery(query); } +void iodns_socket_callback(struct _IOSocket *iosock, int wantread, int wantwrite) { + if(dnsengine && dnsengine->socket_callback) + dnsengine->socket_callback(iosock, wantread, wantwrite); +} + void iodns_event_callback(struct _IODNSQuery *query, enum IODNSEventType state) { if((query->flags & IODNSFLAG_PARENT_PUBLIC)) { struct IODNSQuery *descriptor = query->parent; @@ -125,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; @@ -144,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); @@ -154,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; @@ -173,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; @@ -204,6 +228,23 @@ void iodns_abort(struct IODNSQuery *descriptor) { _stop_dnsquery(query); } +int iodns_print_address(struct IODNSAddress *addr, int ipv6, const char *buffer, int length) { + int af; + void *addr; + if(ipv6) { + af = AF_INET6; + addr = (void *)(&((struct sockaddr_in6 *)sockaddr->address)->sin6_addr); + } else { + af = AF_INET; + addr = (void *)(&((struct sockaddr_in *)sockaddr->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) {