pre-launch commit
authorMatthias Wachs <wachs@net.in.tum.de>
Thu, 15 Sep 2011 10:04:40 +0000 (10:04 +0000)
committerMatthias Wachs <wachs@net.in.tum.de>
Thu, 15 Sep 2011 10:04:40 +0000 (10:04 +0000)
src/transport/plugin_transport_http_client.c
src/transport/plugin_transport_http_new.c
src/transport/plugin_transport_http_server.c

index 41300285a7ddd829be2a5b3e2350ac37513495cb..312d5a78dd78331803043765dfa438f4de9905b3 100644 (file)
@@ -57,39 +57,6 @@ client_log (CURL * curl, curl_infotype type, char *data, size_t size, void *cls)
 }
 #endif
 
-int
-client_disconnect (struct Session *s)
-{
-  int res = GNUNET_OK;
-  CURLMcode mret;
-
-#if DEBUG_HTTP
-  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, s->plugin->name,
-                   "Deleting outbound session peer `%s'\n",
-                   GNUNET_i2s (&s->target));
-#endif
-
-  mret = curl_multi_remove_handle (s->plugin->client_mh, s->client_put);
-  if (mret != CURLM_OK)
-  {
-    curl_easy_cleanup (s->client_put);
-    res = GNUNET_SYSERR;
-    GNUNET_break (0);
-  }
-  curl_easy_cleanup (s->client_put);
-
-  mret = curl_multi_remove_handle (s->plugin->client_mh, s->client_get);
-  if (mret != CURLM_OK)
-  {
-    curl_easy_cleanup (s->client_get);
-    res = GNUNET_SYSERR;
-    GNUNET_break (0);
-  }
-  curl_easy_cleanup (s->client_get);
-
-  return res;
-}
-
 int
 client_send (struct Session *s, const char *msgbuf, size_t msgbuf_size)
 {
@@ -102,7 +69,7 @@ client_send (struct Session *s, const char *msgbuf, size_t msgbuf_size)
  * @param tc gnunet scheduler task context
  */
 static void
-client_perform (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
+client_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
 
 /**
  * Function setting up file descriptors and scheduling task to run
@@ -111,7 +78,7 @@ client_perform (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
  * @return GNUNET_SYSERR for hard failure, GNUNET_OK for ok
  */
 static int
-client_schedule_next_perform (struct Plugin *plugin)
+client_schedule (struct Plugin *plugin)
 {
   fd_set rs;
   fd_set ws;
@@ -165,7 +132,7 @@ client_schedule_next_perform (struct Plugin *plugin)
                                    timeout,
                                    grs,
                                    gws,
-                                   &client_perform,
+                                   &client_run,
                                    plugin);
   GNUNET_NETWORK_fdset_destroy (gws);
   GNUNET_NETWORK_fdset_destroy (grs);
@@ -179,7 +146,7 @@ client_schedule_next_perform (struct Plugin *plugin)
  * @param tc gnunet scheduler task context
  */
 static void
-client_perform (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+client_run (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct Plugin *plugin = cls;
   static unsigned int handles_last_run;
@@ -203,9 +170,53 @@ client_perform (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
     handles_last_run = running;
   }
   while (mret == CURLM_CALL_MULTI_PERFORM);
-  client_schedule_next_perform (plugin);
+  client_schedule (plugin);
 }
 
+int
+client_disconnect (struct Session *s)
+{
+  int res = GNUNET_OK;
+  CURLMcode mret;
+  struct Plugin *plugin = s->plugin;
+
+#if DEBUG_HTTP
+  GNUNET_log_from (GNUNET_ERROR_TYPE_ERROR, plugin->name,
+                   "Deleting outbound session peer `%s'\n",
+                   GNUNET_i2s (&s->target));
+#endif
+
+  mret = curl_multi_remove_handle (plugin->client_mh, s->client_put);
+  if (mret != CURLM_OK)
+  {
+    curl_easy_cleanup (s->client_put);
+    res = GNUNET_SYSERR;
+    GNUNET_break (0);
+  }
+  curl_easy_cleanup (s->client_put);
+
+  mret = curl_multi_remove_handle (plugin->client_mh, s->client_get);
+  if (mret != CURLM_OK)
+  {
+    curl_easy_cleanup (s->client_get);
+    res = GNUNET_SYSERR;
+    GNUNET_break (0);
+  }
+  curl_easy_cleanup (s->client_get);
+
+  /* Re-schedule since handles have changed */
+  if (plugin->client_perform_task!= GNUNET_SCHEDULER_NO_TASK)
+  {
+    GNUNET_SCHEDULER_cancel (plugin->client_perform_task);
+    plugin->client_perform_task = GNUNET_SCHEDULER_NO_TASK;
+  }
+
+  plugin->client_perform_task = GNUNET_SCHEDULER_add_now(client_run, plugin);
+
+  return res;
+}
+
+
 int
 client_connect (struct Session *s)
 {
@@ -311,7 +322,7 @@ client_connect (struct Session *s)
   }
 
   /* Perform connect */
-  s->plugin->client_perform_task = GNUNET_SCHEDULER_add_now (client_perform, s->plugin);
+  s->plugin->client_perform_task = GNUNET_SCHEDULER_add_now (client_run, s->plugin);
 
   return res;
 }
index 8fdce38e3d5bcfc9aa38caa1899934ef6c8281ab..da401575b759d7dc294b8f719e90c947d550fbd3 100644 (file)
@@ -421,6 +421,19 @@ create_session (struct Plugin *plugin, const struct GNUNET_PeerIdentity *target,
   return s;
 }
 
+void
+notify_session_end (void *cls,
+                    const struct GNUNET_PeerIdentity *
+                    peer, struct Session * s)
+{
+  struct Plugin *plugin = cls;
+
+  plugin->env->session_end (NULL, peer, s);
+  GNUNET_CONTAINER_DLL_remove (plugin->head, plugin->tail, s);
+  delete_session (s);
+}
+
+
 /**
  * Function that can be used by the transport service to transmit
  * a message using the plugin.   Note that in the case of a
index b74f68b961faa986097a0308be5fad29e3922c7e..2260cb74e047281479e1b28ef1ad03fb9960edd0 100644 (file)
@@ -256,7 +256,7 @@ server_send (struct Session *s, const char *msgbuf, size_t msgbuf_size)
  * @return gnunet task identifier
  */
 static GNUNET_SCHEDULER_TaskIdentifier
-server_schedule_daemon (struct Plugin *plugin, struct MHD_Daemon *daemon_handle);
+server_schedule (struct Plugin *plugin, struct MHD_Daemon *daemon_handle);
 
 /**
  * Call MHD IPv4 to process pending requests and then go back
@@ -265,7 +265,7 @@ server_schedule_daemon (struct Plugin *plugin, struct MHD_Daemon *daemon_handle)
  * @param tc task context
  */
 static void
-http_server_daemon_v4_run (void *cls,
+server_v4_run (void *cls,
                            const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct Plugin *plugin = cls;
@@ -277,7 +277,7 @@ http_server_daemon_v4_run (void *cls,
     return;
 
   GNUNET_assert (MHD_YES == MHD_run (plugin->server_v4));
-  plugin->server_v4_task = server_schedule_daemon (plugin, plugin->server_v4);
+  plugin->server_v4_task = server_schedule (plugin, plugin->server_v4);
 }
 
 
@@ -288,7 +288,7 @@ http_server_daemon_v4_run (void *cls,
  * @param tc task context
  */
 static void
-http_server_daemon_v6_run (void *cls,
+server_v6_run (void *cls,
                            const struct GNUNET_SCHEDULER_TaskContext *tc)
 {
   struct Plugin *plugin = cls;
@@ -300,7 +300,7 @@ http_server_daemon_v6_run (void *cls,
     return;
 
   GNUNET_assert (MHD_YES == MHD_run (plugin->server_v6));
-  plugin->server_v6_task = server_schedule_daemon (plugin, plugin->server_v6);
+  plugin->server_v6_task = server_schedule (plugin, plugin->server_v6);
 }
 
 /**
@@ -311,7 +311,7 @@ http_server_daemon_v6_run (void *cls,
  * @return gnunet task identifier
  */
 static GNUNET_SCHEDULER_TaskIdentifier
-server_schedule_daemon (struct Plugin *plugin, struct MHD_Daemon *daemon_handle)
+server_schedule (struct Plugin *plugin, struct MHD_Daemon *daemon_handle)
 {
   GNUNET_SCHEDULER_TaskIdentifier ret;
   fd_set rs;
@@ -353,7 +353,7 @@ server_schedule_daemon (struct Plugin *plugin, struct MHD_Daemon *daemon_handle)
     ret =
         GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
                                      GNUNET_SCHEDULER_NO_TASK, tv, wrs, wws,
-                                     &http_server_daemon_v4_run, plugin);
+                                     &server_v4_run, plugin);
   }
   if (daemon_handle == plugin->server_v6)
   {
@@ -366,7 +366,7 @@ server_schedule_daemon (struct Plugin *plugin, struct MHD_Daemon *daemon_handle)
     ret =
         GNUNET_SCHEDULER_add_select (GNUNET_SCHEDULER_PRIORITY_DEFAULT,
                                      GNUNET_SCHEDULER_NO_TASK, tv, wrs, wws,
-                                     &http_server_daemon_v6_run, plugin);
+                                     &server_v6_run, plugin);
   }
   GNUNET_NETWORK_fdset_destroy (wrs);
   GNUNET_NETWORK_fdset_destroy (wws);
@@ -468,9 +468,9 @@ server_start (struct Plugin *plugin)
   }
 
   if (plugin->server_v4 != NULL)
-    plugin->server_v4_task = server_schedule_daemon (plugin, plugin->server_v4);
+    plugin->server_v4_task = server_schedule (plugin, plugin->server_v4);
   if (plugin->server_v6 != NULL)
-    plugin->server_v6_task = server_schedule_daemon (plugin, plugin->server_v6);
+    plugin->server_v6_task = server_schedule (plugin, plugin->server_v6);
 
 #if DEBUG_HTTP
   GNUNET_log_from (GNUNET_ERROR_TYPE_DEBUG, plugin->name,