commit 324f6db4891803a2007b12365e7b9e245638021c
parent 26b8340734547f067410e56caa68e0bf05a8d59d
Author: Christian Grothoff <christian@grothoff.org>
Date: Tue, 18 Sep 2018 12:22:13 +0200
try to fix #5337
Diffstat:
1 file changed, 51 insertions(+), 3 deletions(-)
diff --git a/src/twister/taler-twister-service.c b/src/twister/taler-twister-service.c
@@ -190,6 +190,11 @@ struct HttpRequest
* Request processing state machine.
*/
enum RequestState state;
+
+ /**
+ * Did we pause the curl download?
+ */
+ int curl_download_suspended;
};
@@ -457,8 +462,11 @@ curl_download_cb (void *ptr,
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Curl download proceeding\n");
- if (REQUEST_STATE_DOWNLOAD_STARTED != hr->state)
- return CURL_WRITEFUNC_PAUSE;
+ if (REQUEST_STATE_DOWNLOAD_STARTED != hr->state)
+ {
+ hr->curl_download_suspended = GNUNET_YES;
+ return CURL_WRITEFUNC_PAUSE;
+ }
GNUNET_assert
(REQUEST_STATE_DOWNLOAD_STARTED == hr->state);
@@ -512,6 +520,12 @@ curl_upload_cb (void *buf,
if (0 == hr->io_len)
{
hr->state = REQUEST_STATE_DOWNLOAD_STARTED;
+ if (GNUNET_YES == hr->curl_download_suspended)
+ {
+ curl_easy_pause (hr->curl,
+ CURLPAUSE_CONT);
+ hr->curl_download_suspended = GNUNET_NO;
+ }
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Completed CURL UPLOAD\n");
return 0; /* upload finished, can now download */
@@ -529,6 +543,12 @@ curl_upload_cb (void *buf,
if (0 == hr->io_len)
{
hr->state = REQUEST_STATE_DOWNLOAD_STARTED;
+ if (GNUNET_YES == hr->curl_download_suspended)
+ {
+ curl_easy_pause (hr->curl,
+ CURLPAUSE_CONT);
+ hr->curl_download_suspended = GNUNET_NO;
+ }
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Completed CURL UPLOAD\n");
}
@@ -728,6 +748,7 @@ curl_task_download (void *cls)
curl_download_prepare ();
}
+
static int
curl_progress_cb (void *clientp,
double dltotal,
@@ -1415,6 +1436,12 @@ create_response (void *cls,
MHD_HTTP_METHOD_HEAD))
{
hr->state = REQUEST_STATE_DOWNLOAD_STARTED;
+ if (GNUNET_YES == hr->curl_download_suspended)
+ {
+ curl_easy_pause (hr->curl,
+ CURLPAUSE_CONT);
+ hr->curl_download_suspended = GNUNET_NO;
+ }
curl_easy_setopt (hr->curl,
CURLOPT_NOBODY,
1L);
@@ -1423,6 +1450,12 @@ create_response (void *cls,
MHD_HTTP_METHOD_OPTIONS))
{
hr->state = REQUEST_STATE_DOWNLOAD_STARTED;
+ if (GNUNET_YES == hr->curl_download_suspended)
+ {
+ curl_easy_pause (hr->curl,
+ CURLPAUSE_CONT);
+ hr->curl_download_suspended = GNUNET_NO;
+ }
curl_easy_setopt (hr->curl,
CURLOPT_CUSTOMREQUEST,
"OPTIONS");
@@ -1431,6 +1464,12 @@ create_response (void *cls,
MHD_HTTP_METHOD_GET))
{
hr->state = REQUEST_STATE_DOWNLOAD_STARTED;
+ if (GNUNET_YES == hr->curl_download_suspended)
+ {
+ curl_easy_pause (hr->curl,
+ CURLPAUSE_CONT);
+ hr->curl_download_suspended = GNUNET_NO;
+ }
curl_easy_setopt (hr->curl,
CURLOPT_HTTPGET,
1L);
@@ -1492,8 +1531,17 @@ create_response (void *cls,
curl_download_prepare ();
/* means (?) upload is over. */
- if (0 == hr->io_len) /* FIXME: gnunet-gns-proxy has an extra check here... */
+ if (0 == hr->io_len)
+ {
+ /* FIXME: gnunet-gns-proxy has an extra check here... */
hr->state = REQUEST_STATE_DOWNLOAD_STARTED;
+ if (GNUNET_YES == hr->curl_download_suspended)
+ {
+ curl_easy_pause (hr->curl,
+ CURLPAUSE_CONT);
+ hr->curl_download_suspended = GNUNET_NO;
+ }
+ }
return MHD_YES;
}