(no commit message)
authorMatthias Wachs <wachs@net.in.tum.de>
Wed, 5 May 2010 12:41:34 +0000 (12:41 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Wed, 5 May 2010 12:41:34 +0000 (12:41 +0000)
src/transport/plugin_transport_http.c
src/transport/test_plugin_transport_data_http.conf

index 55d5a08502283905f74c802a841853d62282802f..afcc835beab7009074804a33a200aafe43633e31 100644 (file)
@@ -144,12 +144,23 @@ static struct Plugin *plugin;
 /**
  * Daemon for listening for new connections.
  */
-static struct MHD_Daemon *http_daemon;
+static struct MHD_Daemon *http_daemon_v4;
+
+/**
+ * Daemon for listening for new connections.
+ */
+static struct MHD_Daemon *http_daemon_v6;
 
 /**
  * Our primary task for http
  */
-static GNUNET_SCHEDULER_TaskIdentifier http_task;
+static GNUNET_SCHEDULER_TaskIdentifier http_task_v4;
+
+/**
+ * Our primary task for http
+ */
+static GNUNET_SCHEDULER_TaskIdentifier http_task_v6;
+
 
 /**
  * Curl multi for managing client operations.
@@ -358,14 +369,18 @@ run_daemon (void *cls,
 {
   struct MHD_Daemon *daemon_handle = cls;
 
-  if (daemon_handle == http_daemon)
-    http_task = GNUNET_SCHEDULER_NO_TASK;
+  if (daemon_handle == http_daemon_v4)
+    http_task_v4 = GNUNET_SCHEDULER_NO_TASK;
+
+  if (daemon_handle == http_daemon_v6)
+    http_task_v6 = GNUNET_SCHEDULER_NO_TASK;
+
 
   if (0 != (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
     return;
   GNUNET_assert (MHD_YES == MHD_run (daemon_handle));
-  if (daemon_handle == http_daemon)
-    http_task = prepare_daemon (daemon_handle);
+  if (daemon_handle == http_daemon_v4)
+    http_task_v4 = prepare_daemon (daemon_handle);
 
 }
 
@@ -434,17 +449,28 @@ libgnunet_plugin_transport_http_done (void *cls)
 
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Shutting down http plugin...\n");
 
-  if ( http_task != GNUNET_SCHEDULER_NO_TASK)
+  if ( http_task_v4 != GNUNET_SCHEDULER_NO_TASK)
+  {
+    GNUNET_SCHEDULER_cancel(plugin->env->sched, http_task_v4);
+  }
+
+  if ( http_task_v6 != GNUNET_SCHEDULER_NO_TASK)
   {
-    GNUNET_SCHEDULER_cancel(plugin->env->sched, http_task);
+    GNUNET_SCHEDULER_cancel(plugin->env->sched, http_task_v6);
   }
 
-  if (http_daemon != NULL)
+  if (http_daemon_v4 != NULL)
+  {
+    MHD_stop_daemon (http_daemon_v4);
+    http_daemon_v4 = NULL;
+  }
+  if (http_daemon_v6 != NULL)
   {
-    MHD_stop_daemon (http_daemon);
-    http_daemon = NULL;
+    MHD_stop_daemon (http_daemon_v6);
+    http_daemon_v6 = NULL;
   }
 
+
   if ( NULL != curl_multi)
   {
     curl_multi_cleanup (curl_multi);
@@ -466,7 +492,6 @@ libgnunet_plugin_transport_http_init (void *cls)
   struct GNUNET_TRANSPORT_PluginFunctions *api;
   long long unsigned int port;
   /* struct GNUNET_SERVICE_Context *service; */
-  int use_ipv6;
 
   plugin = GNUNET_malloc (sizeof (struct Plugin));
   plugin->env = env;
@@ -507,42 +532,36 @@ libgnunet_plugin_transport_http_init (void *cls)
       libgnunet_plugin_transport_http_done (api);
       return NULL;
     }
-  use_ipv6 = GNUNET_YES;
-  use_ipv6 = GNUNET_CONFIGURATION_get_value_yesno  (env->cfg, "transport-http","USE_IPV6");
-  if ((http_daemon == NULL) && (port != 0))
+  if ((http_daemon_v4 == NULL) && (http_daemon_v6 == NULL) && (port != 0))
     {
-      if ( use_ipv6 == GNUNET_YES)
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting MHD on port %u with IPv6 enabled\n",port);
-          http_daemon = MHD_start_daemon (MHD_USE_IPv6,
-                                         port,
-                                         &acceptPolicyCallback,
-                                         NULL, &accessHandlerCallback, NULL,
-                                         MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16,
-                                         MHD_OPTION_PER_IP_CONNECTION_LIMIT, (unsigned int) 1,
-                                         MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16,
-                                         MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t) (16 * 1024),
-                                         MHD_OPTION_END);
-        }
-      else
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting MHD on port %u with IPv6 disabled\n",port);
-          http_daemon = MHD_start_daemon (MHD_NO_FLAG,
-                                         port,
-                                         &acceptPolicyCallback,
-                                         NULL, &accessHandlerCallback, NULL,
-                                         MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16,
-                                         MHD_OPTION_PER_IP_CONNECTION_LIMIT, (unsigned int) 1,
-                                         MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16,
-                                         MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t) (16 * 1024),
-                                         MHD_OPTION_END);
-        }
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting MHD on port %u with IPv6 disabled\n",port);
+      http_daemon_v4 = MHD_start_daemon (MHD_NO_FLAG,
+                                     port,
+                                     &acceptPolicyCallback,
+                                     NULL, &accessHandlerCallback, NULL,
+                                     MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16,
+                                     MHD_OPTION_PER_IP_CONNECTION_LIMIT, (unsigned int) 1,
+                                     MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16,
+                                     MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t) (16 * 1024),
+                                     MHD_OPTION_END);
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Starting MHD on port %u with IPv6 enabled\n",port);
+      http_daemon_v6 = MHD_start_daemon (MHD_USE_IPv6,
+                                     port,
+                                     &acceptPolicyCallback,
+                                     NULL, &accessHandlerCallback, NULL,
+                                     MHD_OPTION_CONNECTION_LIMIT, (unsigned int) 16,
+                                     MHD_OPTION_PER_IP_CONNECTION_LIMIT, (unsigned int) 1,
+                                     MHD_OPTION_CONNECTION_TIMEOUT, (unsigned int) 16,
+                                     MHD_OPTION_CONNECTION_MEMORY_LIMIT, (size_t) (16 * 1024),
+                                     MHD_OPTION_END);
     }
 
   curl_multi = curl_multi_init ();
 
-  if (http_daemon != NULL)
-    http_task = prepare_daemon (http_daemon);
+  if (http_daemon_v4 != NULL)
+    http_task_v4 = prepare_daemon (http_daemon_v4);
+  if (http_daemon_v6 != NULL)
+    http_task_v6 = prepare_daemon (http_daemon_v6);
 
   if (NULL == plugin->env->stats)
   {
@@ -555,7 +574,7 @@ libgnunet_plugin_transport_http_init (void *cls)
   GNUNET_STATISTICS_set ( env->stats, "# PUT requests", 0, GNUNET_NO);
   GNUNET_STATISTICS_set ( env->stats, "# GET requests", 0, GNUNET_NO);
 
-  if ( (NULL == http_daemon) || (NULL == curl_multi))
+  if ( ((NULL == http_daemon_v4) && (NULL == http_daemon_v6)) || (NULL == curl_multi))
   {
     GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,"Initializing http plugin failed\n");
     libgnunet_plugin_transport_http_done (api);
index c4139380c147b0fbebfb9da80d4694638c48c0ca..7b771b425947848b4ecb878a1c188f1fad04b2a5 100644 (file)
@@ -4,5 +4,4 @@ SERVICEHOME = /tmp/test-gnunetd-transport-peer-1/
 
 [transport-http]
 PORT = 12389
-DEBUG = YES
-USE_IPV6 = YES
\ No newline at end of file
+DEBUG = YES
\ No newline at end of file