Bläddra i källkod

Fix missing URIStart() for https downloads

Add a explicit ReceivedData to HttpsMethod that indicates when
we got data from the connection so that we can send URISTart()
to the parent.

This is needed because URIStart got moved in f9b4f12d from
the progress_callback to write_data() and it only checks for
Res.Size. In the old code if progress_callback is called by
libcurl (and sets Res.Size) before write_data is called then
URIStart() is never send. Making this a explicit ReceivedData
variable fixes this issue.
Michael Vogt 11 år sedan
förälder
incheckning
9127d7aecf
2 ändrade filer med 8 tillägg och 2 borttagningar
  1. 7 2
      methods/https.cc
  2. 1 0
      methods/https.h

+ 7 - 2
methods/https.cc

@@ -85,8 +85,12 @@ HttpsMethod::write_data(void *buffer, size_t size, size_t nmemb, void *userp)
    if (me->Server->JunkSize != 0)
    if (me->Server->JunkSize != 0)
       return buffer_size;
       return buffer_size;
 
 
-   if (me->Res.Size == 0)
+   if (me->ReceivedData == false)
+   {
       me->URIStart(me->Res);
       me->URIStart(me->Res);
+      me->ReceivedData = true;
+   }
+
    if(me->File->Write(buffer, buffer_size) != true)
    if(me->File->Write(buffer, buffer_size) != true)
       return false;
       return false;
 
 
@@ -95,7 +99,7 @@ HttpsMethod::write_data(void *buffer, size_t size, size_t nmemb, void *userp)
 
 
 int
 int
 HttpsMethod::progress_callback(void *clientp, double dltotal, double /*dlnow*/,
 HttpsMethod::progress_callback(void *clientp, double dltotal, double /*dlnow*/,
-			      double /*ultotal*/, double /*ulnow*/)
+                             double /*ultotal*/, double /*ulnow*/)
 {
 {
    HttpsMethod *me = (HttpsMethod *)clientp;
    HttpsMethod *me = (HttpsMethod *)clientp;
    if(dltotal > 0 && me->Res.Size == 0) {
    if(dltotal > 0 && me->Res.Size == 0) {
@@ -179,6 +183,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
    char curl_errorstr[CURL_ERROR_SIZE];
    char curl_errorstr[CURL_ERROR_SIZE];
    URI Uri = Itm->Uri;
    URI Uri = Itm->Uri;
    string remotehost = Uri.Host;
    string remotehost = Uri.Host;
+   ReceivedData = false;
 
 
    // TODO:
    // TODO:
    //       - http::Pipeline-Depth
    //       - http::Pipeline-Depth

+ 1 - 0
methods/https.h

@@ -66,6 +66,7 @@ class HttpsMethod : public pkgAcqMethod
    CURL *curl;
    CURL *curl;
    FetchResult Res;
    FetchResult Res;
    HttpsServerState *Server;
    HttpsServerState *Server;
+   bool ReceivedData;
 
 
    public:
    public:
    FileFd *File;
    FileFd *File;