gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r21212 - gnunet/src/util


From: gnunet
Subject: [GNUnet-SVN] r21212 - gnunet/src/util
Date: Tue, 1 May 2012 16:51:28 +0200

Author: grothoff
Date: 2012-05-01 16:51:28 +0200 (Tue, 01 May 2012)
New Revision: 21212

Modified:
   gnunet/src/util/client.c
   gnunet/src/util/test_client.c
Log:
-fixing #2289

Modified: gnunet/src/util/client.c
===================================================================
--- gnunet/src/util/client.c    2012-04-30 18:15:38 UTC (rev 21211)
+++ gnunet/src/util/client.c    2012-05-01 14:51:28 UTC (rev 21212)
@@ -248,6 +248,79 @@
 
 
 /**
+ * Try connecting to the server using UNIX domain sockets.
+ *
+ * @param service_name name of service to connect to
+ * @param cfg configuration to use
+ * @return NULL on error, connection to UNIX otherwise
+ */
+static struct GNUNET_CONNECTION_Handle *
+try_unixpath (const char *service_name,
+             const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+#if AF_UNIX
+  struct GNUNET_CONNECTION_Handle *connection;
+  char *unixpath;
+
+  unixpath = NULL;
+  if ((GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg, service_name, 
"UNIXPATH", &unixpath)) && 
+      (0 < strlen (unixpath)))     
+  {
+    /* We have a non-NULL unixpath, need to validate it */
+    connection = GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, 
unixpath);
+    if (NULL != connection)
+    {
+      LOG (GNUNET_ERROR_TYPE_DEBUG, "Connected to unixpath `%s'!\n",
+          unixpath);
+      GNUNET_free (unixpath);
+      return connection;
+    }
+  }
+  GNUNET_free_non_null (unixpath);
+#endif
+  return NULL;
+}
+
+
+/**
+ * Try connecting to the server using UNIX domain sockets.
+ *
+ * @param service_name name of service to connect to
+ * @param cfg configuration to use
+ * @return GNUNET_OK if the configuration is valid, GNUNET_SYSERR if not
+ */
+static int
+test_service_configuration (const char *service_name,
+                           const struct GNUNET_CONFIGURATION_Handle *cfg)
+{
+  int ret = GNUNET_SYSERR;
+  char *hostname = NULL;
+  unsigned long long port;
+#if AF_UNIX
+  char *unixpath = NULL;
+
+  if ((GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg, service_name, 
"UNIXPATH", &unixpath)) && 
+      (0 < strlen (unixpath)))     
+    ret = GNUNET_OK;
+  GNUNET_free_non_null (unixpath);
+#endif
+
+  if ( (GNUNET_YES ==
+       GNUNET_CONFIGURATION_have_value (cfg, service_name, "PORT")) &&
+       (GNUNET_OK ==
+       GNUNET_CONFIGURATION_get_value_number (cfg, service_name, "PORT", 
&port)) && 
+       (port <= 65535) && (0 != port) &&
+       (GNUNET_OK ==
+       GNUNET_CONFIGURATION_get_value_string (cfg, service_name, "HOSTNAME",
+                                              &hostname)) &&
+       (0 != strlen (hostname)) )
+    ret = GNUNET_OK;
+  GNUNET_free_non_null (hostname);
+  return ret;
+}
+
+
+/**
  * Try to connect to the service.
  *
  * @param service_name name of service to connect to
@@ -261,32 +334,16 @@
 {
   struct GNUNET_CONNECTION_Handle *connection;
   char *hostname;
-  char *unixpath;
   unsigned long long port;
 
   connection = NULL;
-#if AF_UNIX
   if (0 == (attempt % 2))
   {
-    /* on even rounds, try UNIX */
-    unixpath = NULL;
-    if ((GNUNET_OK == GNUNET_CONFIGURATION_get_value_string (cfg, 
service_name, "UNIXPATH", &unixpath)) && 
-       (0 < strlen (unixpath)))     
-    {
-      /* We have a non-NULL unixpath, need to validate it */
-      connection = GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, 
unixpath);
-      if (NULL != connection)
-      {
-        LOG (GNUNET_ERROR_TYPE_DEBUG, "Connected to unixpath `%s'!\n",
-             unixpath);
-        GNUNET_free (unixpath);
-        return connection;
-      }
-    }
-    GNUNET_free_non_null (unixpath);
+    /* on even rounds, try UNIX first */
+    connection = try_unixpath (service_name, cfg);
+    if (NULL != connection)
+      return connection;
   }
-#endif
-
   if (GNUNET_YES ==
       GNUNET_CONFIGURATION_have_value (cfg, service_name, "PORT"))
   {
@@ -319,28 +376,10 @@
   }
   if (0 == port)
   {
-#if AF_UNIX
-    if (0 != (attempt % 2))
-    {
-      /* try UNIX */
-      unixpath = NULL;
-      if ((GNUNET_OK ==
-           GNUNET_CONFIGURATION_get_value_string (cfg, service_name, 
"UNIXPATH",
-                                                  &unixpath)) &&
-          (0 < strlen (unixpath)))
-      {
-        connection =
-            GNUNET_CONNECTION_create_from_connect_to_unixpath (cfg, unixpath);
-        if (NULL != connection)
-        {
-          GNUNET_free (unixpath);
-          GNUNET_free_non_null (hostname);
-          return connection;
-        }
-      }
-      GNUNET_free_non_null (unixpath);
-    }
-#endif
+    /* if port is 0, try UNIX */
+    connection = try_unixpath (service_name, cfg);
+    if (NULL != connection)
+      return connection;
     LOG (GNUNET_ERROR_TYPE_DEBUG,
          "Port is 0 for service `%s', UNIXPATH did not work, returning 
NULL!\n",
          service_name);
@@ -367,6 +406,10 @@
   struct GNUNET_CLIENT_Connection *client;
   struct GNUNET_CONNECTION_Handle *connection;
 
+  if (GNUNET_OK != 
+      test_service_configuration (service_name,
+                                 cfg))
+    return NULL;
   connection = do_connect (service_name, cfg, 0);
   client = GNUNET_malloc (sizeof (struct GNUNET_CLIENT_Connection));
   client->attempts = 1;

Modified: gnunet/src/util/test_client.c
===================================================================
--- gnunet/src/util/test_client.c       2012-04-30 18:15:38 UTC (rev 21211)
+++ gnunet/src/util/test_client.c       2012-05-01 14:51:28 UTC (rev 21212)
@@ -137,6 +137,10 @@
   struct sockaddr *sap[2];
   socklen_t slens[2];
 
+  /* test that ill-configured client fails instantly */
+  GNUNET_assert (NULL == GNUNET_CLIENT_connect ("invalid-service", cfg));
+
+  /* test IPC between client and server */
   sap[0] = (struct sockaddr *) &sa;
   slens[0] = sizeof (sa);
   sap[1] = NULL;




reply via email to

[Prev in Thread] Current Thread [Next in Thread]