refactor DHT for new service API
[oweals/gnunet.git] / src / arm / test_gnunet_service_arm.c
index f95031ff7300e874d04f8e8354391ffd2e447301..71bf550847ab3fd4a708b7aeae8cb1019a15a8b3 100644 (file)
@@ -1,6 +1,6 @@
 /*
      This file is part of GNUnet.
-     Copyright (C) 2009, 2014 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2009, 2014 GNUnet e.V.
 
      GNUnet is free software; you can redistribute it and/or modify
      it under the terms of the GNU General Public License as published
@@ -14,8 +14,8 @@
 
      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.
+     Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
+     Boston, MA 02110-1301, USA.
 */
 /**
  * @file arm/test_gnunet_service_arm.c
@@ -49,10 +49,9 @@ static struct GNUNET_ARM_Handle *arm;
 
 
 static void
-trigger_disconnect (void *cls,
-                    const struct GNUNET_SCHEDULER_TaskContext *tc)
+trigger_disconnect (void *cls)
 {
-  GNUNET_ARM_disconnect_and_free (arm);
+  GNUNET_ARM_disconnect (arm);
   arm = NULL;
 }
 
@@ -60,7 +59,6 @@ trigger_disconnect (void *cls,
 static void
 arm_stop_cb (void *cls,
             enum GNUNET_ARM_RequestStatus status,
-            const char *servicename,
             enum GNUNET_ARM_Result result)
 {
   GNUNET_break (status == GNUNET_ARM_REQUEST_SENT_OK);
@@ -101,15 +99,15 @@ service_list (void *cls,
  stop_arm:
   GNUNET_ARM_request_service_stop (arm,
                                    "arm",
-                                   TIMEOUT,
-                                   &arm_stop_cb, NULL);
+                                   &arm_stop_cb,
+                                   NULL);
 }
 
 
 static void
 hostname_resolve_cb (void *cls,
-                   const struct sockaddr *addr,
-                   socklen_t addrlen)
+                     const struct sockaddr *addr,
+                     socklen_t addrlen)
 {
   if ((0 == ret) || (4 == ret) || (1 == resolved_ok))
     return;
@@ -121,8 +119,8 @@ hostname_resolve_cb (void *cls,
     ret = 3;
     GNUNET_ARM_request_service_stop (arm,
                                      "arm",
-                                     TIMEOUT,
-                                     &arm_stop_cb, NULL);
+                                     &arm_stop_cb,
+                                     NULL);
     return;
   }
   if (0 == asked_for_a_list)
@@ -130,7 +128,6 @@ hostname_resolve_cb (void *cls,
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                 "Resolved hostname, now checking the service list\n");
     GNUNET_ARM_request_service_list (arm,
-                                     TIMEOUT,
                                      &service_list,
                                      NULL);
     asked_for_a_list = 1;
@@ -142,7 +139,6 @@ hostname_resolve_cb (void *cls,
 static void
 arm_start_cb (void *cls,
              enum GNUNET_ARM_RequestStatus status,
-             const char *servicename,
              enum GNUNET_ARM_Result result)
 {
   GNUNET_break (status == GNUNET_ARM_REQUEST_SENT_OK);
@@ -151,7 +147,8 @@ arm_start_cb (void *cls,
               "Trying to resolve our own hostname!\n");
   /* connect to the resolver service */
   if (NULL ==
-      GNUNET_RESOLVER_hostname_resolve (AF_UNSPEC, TIMEOUT,
+      GNUNET_RESOLVER_hostname_resolve (AF_UNSPEC,
+                                        TIMEOUT,
                                         &hostname_resolve_cb,
                                         NULL))
   {
@@ -160,8 +157,9 @@ arm_start_cb (void *cls,
     GNUNET_break (0);
     ret = 2;
     GNUNET_ARM_request_service_stop (arm,
-                                     "arm", TIMEOUT,
-                                     &arm_stop_cb, NULL);
+                                     "arm",
+                                     &arm_stop_cb,
+                                     NULL);
   }
 }
 
@@ -172,11 +170,14 @@ run (void *cls,
      const char *cfgfile,
      const struct GNUNET_CONFIGURATION_Handle *c)
 {
-  arm = GNUNET_ARM_connect (c, NULL, NULL);
-  GNUNET_ARM_request_service_start (arm, "arm",
+  arm = GNUNET_ARM_connect (c,
+                            NULL,
+                            NULL);
+  GNUNET_ARM_request_service_start (arm,
+                                    "arm",
                                     GNUNET_OS_INHERIT_STD_OUT_AND_ERR,
-                                    START_TIMEOUT,
-                                    &arm_start_cb, NULL);
+                                    &arm_start_cb,
+                                    NULL);
 }
 
 
@@ -203,13 +204,65 @@ main (int argc, char *av[])
              "Failed to determine my own hostname, testcase not run.\n");
     return 0;
   }
-  if (NULL == gethostbyname (hostname))
+  if ( (0 == strcmp (hostname,
+                    "localhost")) ||
+       (0 == strcmp (hostname,
+                    "ipv6-localnet")) )
   {
-    FPRINTF (stderr,
-             "Failed to resolve my hostname `%s', testcase not run.\n",
-             hostname);
-    return 0;
+    /* we cannot use 'localhost' as this would not trigger the
+       resolver service (see resolver_api.c); so in this case,
+       we fall back to (ab)using gnu.org. */
+    strcpy (hostname,
+           "www.gnu.org");
+  }
+  /* trigger DNS lookup */
+#if HAVE_GETADDRINFO
+  {
+    struct addrinfo *ai;
+    int ret;
+
+    if (0 != (ret = getaddrinfo (hostname, NULL, NULL, &ai)))
+    {
+      FPRINTF (stderr,
+               "Failed to resolve my hostname `%s', testcase not run.\n",
+               hostname);
+      return 0;
+    }
+    freeaddrinfo (ai);
+  }
+#elif HAVE_GETHOSTBYNAME2
+  {
+    struct hostent *host;
+
+    host = gethostbyname2 (hostname, AF_INET);
+    if (NULL == host)
+      host = gethostbyname2 (hostname, AF_INET6);
+    if (NULL == host)
+      {
+        FPRINTF (stderr,
+                 "Failed to resolve my hostname `%s', testcase not run.\n",
+                 hostname);
+        return 0;
+      }
+  }
+#elif HAVE_GETHOSTBYNAME
+  {
+    struct hostent *host;
+
+    host = gethostbyname (hostname);
+    if (NULL == host)
+      {
+        FPRINTF (stderr,
+                 "Failed to resolve my hostname `%s', testcase not run.\n",
+                 hostname);
+        return 0;
+      }
   }
+#else
+  FPRINTF (stderr,
+           "libc fails to have resolver function, testcase not run.\n");
+  return 0;
+#endif
   GNUNET_log_setup ("test-gnunet-service-arm",
                    "WARNING",
                    NULL);