Changeset 1691

Show
Ignore:
Timestamp:
03/04/10 09:57:56 (6 months ago)
Author:
swalsh
Message:

Add framework to allow async dns lookups, needs binding to ruby, looking in your direction mr tj

Location:
trunk
Files:
3 modified

Legend:

Unmodified
Added
Removed
  • trunk/include/interface.h

    r1681 r1691  
    88#include "parse.h" 
    99#include "language.h" 
     10#include <evdns.h> 
    1011 
    1112struct Service; 
     
    182183 
    183184void mask_normalize(char *, char *); 
     185 
     186int dns_resolve_host(const char *, evdns_callback_type, void *, int); 
     187int dns_resolve_ip(const char *, evdns_callback_type, void *); 
     188 
    184189#endif /* INCLUDED_interface_h */ 
  • trunk/src/interface.c

    r1682 r1691  
    4545#include "servicemask.h" 
    4646 
     47#include <event.h> 
     48#include <evdns.h> 
    4749#include <openssl/hmac.h> 
    4850 
     
    19781980  snprintf(normalmask, USERLEN+HOSTLEN, "%s!%s@%s", name, user, host); 
    19791981} 
     1982 
     1983int 
     1984dns_resolve_host(const char *host, evdns_callback_type callback, void *arg, int ipv6) 
     1985{ 
     1986  ilog(L_DEBUG, "Request to resolve host %s to IP%s", host, ipv6 ? "V6" : ""); 
     1987 
     1988  if(ipv6) 
     1989  { 
     1990    return evdns_resolve_ipv6(host, 0, callback, arg); 
     1991  } 
     1992  else 
     1993  { 
     1994    return evdns_resolve_ipv4(host, 0, callback, arg); 
     1995  } 
     1996} 
     1997 
     1998int 
     1999dns_resolve_ip(const char *ip, evdns_callback_type callback, void *arg) 
     2000{ 
     2001  struct addrinfo hints, *res; 
     2002 
     2003  ilog(L_DEBUG, "Request to resolve IP %s to host", ip); 
     2004 
     2005  memset(&hints, 0, sizeof(hints)); 
     2006 
     2007  hints.ai_family = AF_UNSPEC; 
     2008  hints.ai_socktype = SOCK_STREAM; 
     2009  hints.ai_flags = AI_PASSIVE | AI_NUMERICHOST; 
     2010 
     2011  if(irc_getaddrinfo(ip, NULL, &hints, &res)) 
     2012  { 
     2013    return -1; 
     2014  } 
     2015 
     2016  if(res->ai_family == AF_INET) 
     2017  { 
     2018    evdns_resolve_reverse(&((struct sockaddr_in *)res->ai_addr)->sin_addr, 0, 
     2019        callback, arg); 
     2020  } 
     2021  else if(res->ai_family == AF_INET6) 
     2022  { 
     2023    evdns_resolve_reverse_ipv6(&((struct sockaddr_in6 *)res->ai_addr)->sin6_addr, 
     2024        0, callback, arg); 
     2025  } 
     2026  else 
     2027    ilog(L_WARN, "Unknown AF returned when trying to resolve IP"); 
     2028 
     2029  irc_freeaddrinfo(res); 
     2030} 
  • trunk/src/services.c

    r1684 r1691  
    4040#include "send.h" 
    4141#include "events.h" 
     42#include "event.h" 
    4243 
    4344#include <signal.h> 
     
    276277    execute_callback(do_event_cb); 
    277278 
     279    event_loop(EVLOOP_ONCE); 
     280 
    278281    comm_select(); 
    279282    send_queued_all();