}
#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)
{
* @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
* @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;
timeout,
grs,
gws,
- &client_perform,
+ &client_run,
plugin);
GNUNET_NETWORK_fdset_destroy (gws);
GNUNET_NETWORK_fdset_destroy (grs);
* @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;
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)
{
}
/* 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;
}
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
* @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
* @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;
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);
}
* @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;
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);
}
/**
* @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;
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)
{
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);
}
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,