summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMichael Vogt <mvo@ubuntu.com>2015-01-05 10:27:53 +0100
committerMichael Vogt <mvo@ubuntu.com>2015-01-05 10:27:53 +0100
commit9127d7aecf01f2999a2589e4b0503288518b2927 (patch)
tree27eff97a29ea4946f02168f02f460a57e54988c5
parent0312a4ab115195b3b34ddf5a7a50ee1a07a59d1a (diff)
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.
-rw-r--r--methods/https.cc9
-rw-r--r--methods/https.h1
2 files changed, 8 insertions, 2 deletions
diff --git a/methods/https.cc b/methods/https.cc
index 65a744e2a..3a5981b58 100644
--- a/methods/https.cc
+++ b/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)
return buffer_size;
- if (me->Res.Size == 0)
+ if (me->ReceivedData == false)
+ {
me->URIStart(me->Res);
+ me->ReceivedData = true;
+ }
+
if(me->File->Write(buffer, buffer_size) != true)
return false;
@@ -95,7 +99,7 @@ HttpsMethod::write_data(void *buffer, size_t size, size_t nmemb, void *userp)
int
HttpsMethod::progress_callback(void *clientp, double dltotal, double /*dlnow*/,
- double /*ultotal*/, double /*ulnow*/)
+ double /*ultotal*/, double /*ulnow*/)
{
HttpsMethod *me = (HttpsMethod *)clientp;
if(dltotal > 0 && me->Res.Size == 0) {
@@ -179,6 +183,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm)
char curl_errorstr[CURL_ERROR_SIZE];
URI Uri = Itm->Uri;
string remotehost = Uri.Host;
+ ReceivedData = false;
// TODO:
// - http::Pipeline-Depth
diff --git a/methods/https.h b/methods/https.h
index faac8a3cd..411b71440 100644
--- a/methods/https.h
+++ b/methods/https.h
@@ -66,6 +66,7 @@ class HttpsMethod : public pkgAcqMethod
CURL *curl;
FetchResult Res;
HttpsServerState *Server;
+ bool ReceivedData;
public:
FileFd *File;