gnunet-svn
[Top][All Lists]
Advanced

[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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]