diff options
Diffstat (limited to 'src/include/gnunet_resolver_service.h')
-rw-r--r-- | src/include/gnunet_resolver_service.h | 169 |
1 files changed, 169 insertions, 0 deletions
diff --git a/src/include/gnunet_resolver_service.h b/src/include/gnunet_resolver_service.h new file mode 100644 index 0000000..498400d --- /dev/null +++ b/src/include/gnunet_resolver_service.h @@ -0,0 +1,169 @@ +/* + 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); + + +/** + * Handle to a request given to the resolver. Can be used to cancel + * the request prior to the timeout or successful execution. + */ +struct GNUNET_RESOLVER_RequestHandle; + +/** + * Create the connection to the resolver service. + * + * @param cfg configuration to use + */ +void +GNUNET_RESOLVER_connect (const struct GNUNET_CONFIGURATION_Handle *cfg); + + +/** + * Destroy the connection to the resolver service. + */ +void +GNUNET_RESOLVER_disconnect (void); + + +/** + * Convert a string to one or more IP addresses. + * + * @param hostname the hostname to resolve + * @param af AF_INET or AF_INET6; use AF_UNSPEC for "any" + * @param callback function to call with addresses + * @param callback_cls closure for callback + * @param timeout how long to try resolving + * @return handle that can be used to cancel the request, NULL on error + */ +struct GNUNET_RESOLVER_RequestHandle * +GNUNET_RESOLVER_ip_get (const char *hostname, int af, + struct GNUNET_TIME_Relative timeout, + GNUNET_RESOLVER_AddressCallback callback, + void *callback_cls); + + +/** + * Resolve our hostname to an IP address. + * + * @param af 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 + * @return handle that can be used to cancel the request, NULL on error + */ +struct GNUNET_RESOLVER_RequestHandle * +GNUNET_RESOLVER_hostname_resolve (int af, + 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 local fully qualified domain name + * + * @return local hostname, caller must free + */ +char * +GNUNET_RESOLVER_local_fqdn_get (void); + + +/** + * Perform a reverse DNS lookup. + * + * @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 + * @return handle that can be used to cancel the request, NULL on error + */ +struct GNUNET_RESOLVER_RequestHandle * +GNUNET_RESOLVER_hostname_get (const struct sockaddr *sa, socklen_t salen, + int do_resolve, + struct GNUNET_TIME_Relative timeout, + GNUNET_RESOLVER_HostnameCallback callback, + void *cls); + + +/** + * Cancel a request that is still pending with the resolver. + * Note that a client MUST NOT cancel a request that has + * been completed (i.e, the callback has been called to + * signal timeout or the final result). + * + * @param rh handle of request to cancel + */ +void +GNUNET_RESOLVER_request_cancel (struct GNUNET_RESOLVER_RequestHandle *rh); + + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif + +/* ifndef GNUNET_RESOLVER_SERVICE_H */ +#endif +/* end of gnunet_resolver_service.h */ |