Smallers steps to keep plugin running
[oweals/gnunet.git] / src / include / gnunet_resolver_service.h
index b7fb1532a1d5b46528726c75459d567d230bee24..b55ca2f5616a02e574bb73e47adffcb885ec649e 100644 (file)
@@ -52,6 +52,13 @@ typedef void (*GNUNET_RESOLVER_AddressCallback) (void *cls,
                                                  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;
+
+
 /**
  * Convert a string to one or more IP addresses.
  *
@@ -62,8 +69,9 @@ typedef void (*GNUNET_RESOLVER_AddressCallback) (void *cls,
  * @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
  */
-void
+struct GNUNET_RESOLVER_RequestHandle *
 GNUNET_RESOLVER_ip_get (struct GNUNET_SCHEDULER_Handle *sched,
                         const struct GNUNET_CONFIGURATION_Handle *cfg,
                         const char *hostname,
@@ -82,8 +90,9 @@ GNUNET_RESOLVER_ip_get (struct GNUNET_SCHEDULER_Handle *sched,
  * @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
  */
-void
+struct GNUNET_RESOLVER_RequestHandle *
 GNUNET_RESOLVER_hostname_resolve (struct GNUNET_SCHEDULER_Handle *sched,
                                   const struct GNUNET_CONFIGURATION_Handle *cfg,
                                   int domain,
@@ -102,9 +111,17 @@ GNUNET_RESOLVER_hostname_resolve (struct GNUNET_SCHEDULER_Handle *sched,
 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 );
+
 
 /**
- * Get an IP address as a string.
+ * Perform a reverse DNS lookup.
  *
  * @param sched scheduler to use
  * @param cfg configuration to use
@@ -114,15 +131,30 @@ typedef void (*GNUNET_RESOLVER_HostnameCallback) (void *cls,
  * @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 (struct GNUNET_SCHEDULER_Handle *sched,
+                             const 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);
+
+
+/**
+ * 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 h handle of request to cancel
  */
-void GNUNET_RESOLVER_hostname_get (struct GNUNET_SCHEDULER_Handle *sched,
-                                   const 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);
+void
+GNUNET_RESOLVER_request_cancel (struct GNUNET_RESOLVER_RequestHandle *h);
+
 
 #if 0                           /* keep Emacsens' auto-indent happy */
 {