LRN: Fix automake deps to allow -j* builds again
[oweals/gnunet.git] / src / util / service.c
index 834b27dd683b1e240f34878c1e8b07574ada040e..ac5ce8d8003095e5d49f0e171a875717b0409afa 100644 (file)
@@ -32,6 +32,7 @@
 #include "gnunet_getopt_lib.h"
 #include "gnunet_os_lib.h"
 #include "gnunet_protocols.h"
+#include "gnunet_resolver_service.h"
 #include "gnunet_server_lib.h"
 #include "gnunet_service_lib.h"
 
@@ -766,15 +767,13 @@ add_unixpath (struct sockaddr **saddrs,
          unixpath,
          slen);
   un->sun_path[slen] = '\0';
+  slen = sizeof (struct sockaddr_un);
 #if LINUX
   un->sun_path[0] = '\0';
-  slen = sizeof (struct sockaddr_un);
-#elif FREEBSD
-  slen += sizeof (sa_family_t) + 1 ;
-#else
-  slen += sizeof (sa_family_t) ;
 #endif
-
+#if HAVE_SOCKADDR_IN_SIN_LEN
+  un->sun_len = (u_char) slen;
+#endif
   *saddrs = (struct sockaddr*) un;
   *saddrlens = slen;
 #else
@@ -909,6 +908,7 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName,
     {
       /* probe UNIX support */
       struct sockaddr_un s_un;
+
       if (strlen(unixpath) >= sizeof(s_un.sun_path))
        {
          GNUNET_log (GNUNET_ERROR_TYPE_WARNING,
@@ -923,8 +923,8 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName,
       desc = GNUNET_NETWORK_socket_create (AF_UNIX, SOCK_STREAM, 0);
       if (NULL == desc)
         {
-          if ((errno == ENOBUFS) ||
-              (errno == ENOMEM) || (errno == ENFILE) || (errno == EACCES))
+          if ( (errno == ENOBUFS) ||
+              (errno == ENOMEM) || (errno == ENFILE) || (errno == EACCES))
             {
               GNUNET_log_strerror (GNUNET_ERROR_TYPE_ERROR, "socket");
              GNUNET_free_non_null (hostname);
@@ -1024,6 +1024,10 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName,
          next = pos->ai_next;
          if ( (disablev6) && (pos->ai_family == AF_INET6))
            continue;
+         if ( (pos->ai_protocol != IPPROTO_TCP) && (pos->ai_protocol != 0) )
+           continue; /* not TCP */
+         if ( (pos->ai_socktype != SOCK_STREAM) && (pos->ai_socktype != 0) )
+           continue; /* huh? */
 #if DEBUG_SERVICE
          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
                      "Service `%s' will bind to `%s'\n",
@@ -1052,6 +1056,7 @@ GNUNET_SERVICE_get_server_addresses (const char *serviceName,
        }
       GNUNET_free (hostname);
       freeaddrinfo (res);
+      resi = i;
     }
   else
     {
@@ -1339,6 +1344,7 @@ service_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
   struct GNUNET_SERVICE_Context *sctx = cls;
   unsigned int i;
 
+  GNUNET_RESOLVER_connect (sctx->cfg);
   if (sctx->lsocks != NULL)
     sctx->server = GNUNET_SERVER_create_with_sockets (&check_access,
                                                      sctx,
@@ -1571,6 +1577,9 @@ GNUNET_SERVICE_run (int argc,
   char *logfile;
   int do_daemonize;
   unsigned int i;
+  unsigned long long skew_offset;
+  unsigned long long skew_variance;
+  long long clock_offset;
   struct GNUNET_SERVICE_Context sctx;
   struct GNUNET_CONFIGURATION_Handle *cfg;
   struct GNUNET_GETOPT_CommandLineOption service_options[] = {
@@ -1617,6 +1626,15 @@ GNUNET_SERVICE_run (int argc,
               "Service `%s' runs with configuration from `%s'\n",
               serviceName, cfg_fn);
 #endif
+  if (GNUNET_OK == GNUNET_CONFIGURATION_get_value_number(sctx.cfg, "testing", "skew_offset", &skew_offset) &&
+      (GNUNET_OK == GNUNET_CONFIGURATION_get_value_number(sctx.cfg, "testing", "skew_variance", &skew_variance)))
+    {
+      clock_offset = skew_offset - skew_variance;
+      GNUNET_TIME_set_offset(clock_offset);
+#if DEBUG_SERVICE
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Skewing clock by %dll\n", clock_offset);
+#endif
+    }
   /* actually run service */
   GNUNET_SCHEDULER_run (&service_task, &sctx);