aboutsummaryrefslogtreecommitdiff
path: root/src/transport/plugin_transport_http_server.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/transport/plugin_transport_http_server.c')
-rw-r--r--src/transport/plugin_transport_http_server.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/src/transport/plugin_transport_http_server.c b/src/transport/plugin_transport_http_server.c
index ff2d68602..e3d5e9a01 100644
--- a/src/transport/plugin_transport_http_server.c
+++ b/src/transport/plugin_transport_http_server.c
@@ -92,6 +92,11 @@ struct ServerRequest
92 */ 92 */
93 int connected; 93 int connected;
94 94
95 /**
96 * Currently suspended
97 */
98 bool suspended;
99
95}; 100};
96 101
97 102
@@ -501,7 +506,9 @@ server_wake_up (void *cls)
501 LOG (GNUNET_ERROR_TYPE_DEBUG, 506 LOG (GNUNET_ERROR_TYPE_DEBUG,
502 "Session %p: Waking up PUT handle\n", 507 "Session %p: Waking up PUT handle\n",
503 s); 508 s);
509 GNUNET_assert (s->server_recv->suspended);
504 MHD_resume_connection (s->server_recv->mhd_conn); 510 MHD_resume_connection (s->server_recv->mhd_conn);
511 s->server_recv->suspended = false;
505} 512}
506 513
507 514
@@ -541,7 +548,11 @@ server_delete_session (struct GNUNET_ATS_Session *s)
541 GNUNET_SCHEDULER_cancel (s->recv_wakeup_task); 548 GNUNET_SCHEDULER_cancel (s->recv_wakeup_task);
542 s->recv_wakeup_task = NULL; 549 s->recv_wakeup_task = NULL;
543 if (NULL != s->server_recv) 550 if (NULL != s->server_recv)
551 {
552 GNUNET_assert (s->server_recv->suspended);
544 MHD_resume_connection (s->server_recv->mhd_conn); 553 MHD_resume_connection (s->server_recv->mhd_conn);
554 s->server_recv->suspended = false;
555 }
545 } 556 }
546 GNUNET_assert (GNUNET_OK == 557 GNUNET_assert (GNUNET_OK ==
547 GNUNET_CONTAINER_multipeermap_remove (plugin->sessions, 558 GNUNET_CONTAINER_multipeermap_remove (plugin->sessions,
@@ -760,9 +771,16 @@ http_server_plugin_send (void *cls,
760 GNUNET_free (stat_txt); 771 GNUNET_free (stat_txt);
761 772
762 if (NULL != session->server_send) 773 if (NULL != session->server_send)
774 {
775 if (session->server_send->suspended)
776 {
777 MHD_resume_connection (session->server_send->mhd_conn);
778 session->server_send->suspended = false;
779 }
763 server_reschedule (session->plugin, 780 server_reschedule (session->plugin,
764 session->server_send->mhd_daemon, 781 session->server_send->mhd_daemon,
765 GNUNET_YES); 782 GNUNET_YES);
783 }
766 return bytes_sent; 784 return bytes_sent;
767} 785}
768 786
@@ -1613,6 +1631,12 @@ server_send_callback (void *cls,
1613 s); 1631 s);
1614 return MHD_CONTENT_READER_END_OF_STREAM; 1632 return MHD_CONTENT_READER_END_OF_STREAM;
1615 } 1633 }
1634 else
1635 {
1636 MHD_suspend_connection (s->server_send->mhd_conn);
1637 s->server_send->suspended = true;
1638 return 0;
1639 }
1616 return bytes_read; 1640 return bytes_read;
1617} 1641}
1618 1642
@@ -1868,6 +1892,7 @@ server_access_cb (void *cls,
1868 GNUNET_YES)); 1892 GNUNET_YES));
1869 GNUNET_assert(s->server_recv->mhd_conn == mhd_connection); 1893 GNUNET_assert(s->server_recv->mhd_conn == mhd_connection);
1870 MHD_suspend_connection (s->server_recv->mhd_conn); 1894 MHD_suspend_connection (s->server_recv->mhd_conn);
1895 s->server_recv->suspended = true;
1871 if (NULL == s->recv_wakeup_task) 1896 if (NULL == s->recv_wakeup_task)
1872 s->recv_wakeup_task 1897 s->recv_wakeup_task
1873 = GNUNET_SCHEDULER_add_delayed (delay, 1898 = GNUNET_SCHEDULER_add_delayed (delay,