From: Matthias Wachs Date: Thu, 15 Sep 2011 10:04:40 +0000 (+0000) Subject: pre-launch commit X-Git-Tag: initial-import-from-subversion-38251~17097 X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=33769b2c1d815d73727a01bc9b785a951b4d29a1;p=oweals%2Fgnunet.git pre-launch commit --- diff --git a/src/transport/plugin_transport_http_client.c b/src/transport/plugin_transport_http_client.c index 41300285a..312d5a78d 100644 --- a/src/transport/plugin_transport_http_client.c +++ b/src/transport/plugin_transport_http_client.c @@ -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; } diff --git a/src/transport/plugin_transport_http_new.c b/src/transport/plugin_transport_http_new.c index 8fdce38e3..da401575b 100644 --- a/src/transport/plugin_transport_http_new.c +++ b/src/transport/plugin_transport_http_new.c @@ -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 diff --git a/src/transport/plugin_transport_http_server.c b/src/transport/plugin_transport_http_server.c index b74f68b96..2260cb74e 100644 --- a/src/transport/plugin_transport_http_server.c +++ b/src/transport/plugin_transport_http_server.c @@ -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,