[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[GNUnet-SVN] [taler-twister] branch master updated (701d03e -> 2f69f62)
From: |
gnunet |
Subject: |
[GNUnet-SVN] [taler-twister] branch master updated (701d03e -> 2f69f62) |
Date: |
Thu, 20 Sep 2018 15:23:35 +0200 |
This is an automated email from the git hooks/post-receive script.
marcello pushed a change to branch master
in repository twister.
from 701d03e force Expect: 100-continue header.
new 3af28f7 Undo last #5337 fix attemp.
new 2f69f62 3557.
The 2 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails. The revisions
listed as "add" were already present in the repository and have only
been added to this reference.
Summary of changes:
src/twister/taler-twister-service.c | 111 ++++++++++++++++++------------------
1 file changed, 54 insertions(+), 57 deletions(-)
diff --git a/src/twister/taler-twister-service.c
b/src/twister/taler-twister-service.c
index 046687a..d12bc67 100644
--- a/src/twister/taler-twister-service.c
+++ b/src/twister/taler-twister-service.c
@@ -41,6 +41,12 @@
#include <taler/taler_util.h>
+/**
+ * We allow X runs of the progress callback before
+ * declaring the upload callback dead.
+ */
+#define DOWNLOAD_PAUSED_TIMES_MAX 10
+
/**
* Log curl error.
*
@@ -118,12 +124,12 @@ struct HttpRequest
/**
* Client socket read task
*/
- struct GNUNET_SCHEDULER_Task * rtask;
+ struct GNUNET_SCHEDULER_Task *rtask;
/**
* Client socket write task
*/
- struct GNUNET_SCHEDULER_Task * wtask;
+ struct GNUNET_SCHEDULER_Task *wtask;
/**
* Buffer we use for moving data between MHD and
@@ -192,9 +198,15 @@ struct HttpRequest
enum RequestState state;
/**
- * Did we pause the curl download?
+ * Indicates that the download callback is sleeping.
+ */
+ int download_paused;
+
+ /**
+ * Indicates that the Web server returned a "Connection: close"
+ * header line.
*/
- int curl_download_suspended;
+ int connection_closed;
};
@@ -339,6 +351,9 @@ curl_check_hdr (void *buffer,
char *hdr_val;
char *tok;
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Checking headers..\n");
+
ndup = GNUNET_strndup (buffer, bytes);
hdr_type = strtok (ndup, ":");
if (NULL == hdr_type)
@@ -380,6 +395,18 @@ curl_check_hdr (void *buffer,
*tok = '\0';
if (NULL != (tok = strchr (hdr_val, '\t')))
*tok = '\0';
+
+ if (0 == strcasecmp (hdr_type,
+ MHD_HTTP_HEADER_CONNECTION)
+ && (0 == strcasecmp (hdr_val,
+ "close")))
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Server wants to close the TCP connection\n");
+ hr->connection_closed = GNUNET_YES;
+ }
+
+
if (0 != strlen (hdr_val)) /* Rely in MHD to set those */
{
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
@@ -462,11 +489,13 @@ curl_download_cb (void *ptr,
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
"Curl download proceeding\n");
- if (REQUEST_STATE_DOWNLOAD_STARTED != hr->state)
- {
- hr->curl_download_suspended = GNUNET_YES;
- return CURL_WRITEFUNC_PAUSE;
- }
+ if (REQUEST_STATE_DOWNLOAD_STARTED != hr->state)
+ {
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Download callback goes to sleep\n");
+ hr->download_paused = GNUNET_YES;
+ return CURL_WRITEFUNC_PAUSE;
+ }
GNUNET_assert
(REQUEST_STATE_DOWNLOAD_STARTED == hr->state);
@@ -520,12 +549,6 @@ 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 */
@@ -543,12 +566,6 @@ 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");
}
@@ -748,7 +765,6 @@ curl_task_download (void *cls)
curl_download_prepare ();
}
-
static int
curl_progress_cb (void *clientp,
double dltotal,
@@ -756,8 +772,22 @@ curl_progress_cb (void *clientp,
double ultotal,
double ulnow)
{
+ struct HttpRequest *hr = clientp;
+
GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
- "I'm the progress callback\n");
+ "Progress callback..\n");
+
+ if ((GNUNET_YES == hr->download_paused)
+ && (GNUNET_YES == hr->connection_closed))
+ {
+ hr->state = REQUEST_STATE_DOWNLOAD_STARTED;
+ hr->download_paused = GNUNET_NO;
+ hr->connection_closed = GNUNET_NO;
+ curl_easy_pause (hr->curl, CURLPAUSE_CONT);
+ GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+ "Unpausing the download callback\n");
+ }
+
return CURLE_OK;
}
@@ -1436,12 +1466,6 @@ 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);
@@ -1450,12 +1474,6 @@ 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");
@@ -1464,12 +1482,6 @@ 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);
@@ -1524,12 +1536,6 @@ create_response (void *cls,
MHD_HEADER_KIND,
&con_val_iter,
hr);
-
- if (0 == strcasecmp (meth,
- MHD_HTTP_METHOD_POST))
- hr->headers = curl_slist_append (hr->headers,
- "Expect: 100-continue");
-
curl_easy_setopt (hr->curl,
CURLOPT_HTTPHEADER,
hr->headers);
@@ -1537,17 +1543,8 @@ 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;
}
--
To stop receiving notification emails like this one, please contact
address@hidden
- [GNUnet-SVN] [taler-twister] branch master updated (701d03e -> 2f69f62),
gnunet <=