/* This file is part of GNUnet. (C) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2009 Christian Grothoff (and other contributing authors) GNUnet is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2, or (at your option) any later version. GNUnet is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with GNUnet; see the file COPYING. If not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ /** * @file include/gnunet_resolver_service.h * @brief functions related to doing DNS lookups * @author Christian Grothoff */ #ifndef GNUNET_RESOLVER_SERVICE_H #define GNUNET_RESOLVER_SERVICE_H #ifdef __cplusplus extern "C" { #if 0 /* keep Emacsens' auto-indent happy */ } #endif #endif #include "gnunet_configuration_lib.h" #include "gnunet_scheduler_lib.h" #include "gnunet_time_lib.h" /** * Function called by the resolver for each address obtained from DNS. * * @param cls closure * @param addr one of the addresses of the host, NULL for the last address * @param addrlen length of the address */ typedef void (*GNUNET_RESOLVER_AddressCallback) (void *cls, const struct sockaddr * addr, socklen_t addrlen); /** * Convert a string to one or more IP addresses. * * @param sched scheduler to use * @param cfg configuration to use * @param hostname the hostname to resolve * @param domain AF_INET or AF_INET6; use AF_UNSPEC for "any" * @param callback function to call with addresses * @param cls closure for callback * @param timeout how long to try resolving */ void GNUNET_RESOLVER_ip_get (struct GNUNET_SCHEDULER_Handle *sched, struct GNUNET_CONFIGURATION_Handle *cfg, const char *hostname, int domain, struct GNUNET_TIME_Relative timeout, GNUNET_RESOLVER_AddressCallback callback, void *cls); /** * Resolve our hostname to an IP address. * * @param sched scheduler to use * @param cfg configuration to use * @param domain AF_INET or AF_INET6; use AF_UNSPEC for "any" * @param callback function to call with addresses * @param cls closure for callback * @param timeout how long to try resolving */ void GNUNET_RESOLVER_hostname_resolve (struct GNUNET_SCHEDULER_Handle *sched, struct GNUNET_CONFIGURATION_Handle *cfg, int domain, struct GNUNET_TIME_Relative timeout, GNUNET_RESOLVER_AddressCallback callback, void *cls); /** * Function called by the resolver for each hostname obtained from DNS. * * @param cls closure * @param hostname one of the names for the host, NULL * on the last call to the callback */ typedef void (*GNUNET_RESOLVER_HostnameCallback) (void *cls, const char *hostname); /** * Get an IP address as a string. * * @param sched scheduler to use * @param cfg configuration to use * @param sa host address * @param salen length of host address * @param do_resolve use GNUNET_NO to return numeric hostname * @param timeout how long to try resolving * @param callback function to call with hostnames * @param cls closure for callback */ void GNUNET_RESOLVER_hostname_get (struct GNUNET_SCHEDULER_Handle *sched, struct GNUNET_CONFIGURATION_Handle *cfg, const struct sockaddr *sa, socklen_t salen, int do_resolve, struct GNUNET_TIME_Relative timeout, GNUNET_RESOLVER_HostnameCallback callback, void *cls); #if 0 /* keep Emacsens' auto-indent happy */ { #endif #ifdef __cplusplus } #endif /* ifndef GNUNET_RESOLVER_SERVICE_H */ #endif /* end of gnunet_resolver_service.h */