twister

HTTP fault injector for testing
Log | Files | Refs | README | LICENSE

commit 324f6db4891803a2007b12365e7b9e245638021c
parent 26b8340734547f067410e56caa68e0bf05a8d59d
Author: Christian Grothoff <christian@grothoff.org>
Date:   Tue, 18 Sep 2018 12:22:13 +0200

try to fix #5337

Diffstat:
Msrc/twister/taler-twister-service.c | 54+++++++++++++++++++++++++++++++++++++++++++++++++++---
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; }