summaryrefslogtreecommitdiff
path: root/apt-pkg/acquire-worker.cc
diff options
context:
space:
mode:
authorMichael Vogt <michael.vogt@ubuntu.com>2013-05-08 17:45:17 +0200
committerMichael Vogt <michael.vogt@ubuntu.com>2013-05-08 17:45:17 +0200
commit1dea08eb2e1115b8da14cc3da02d53f8e069ba14 (patch)
tree9d662f7af19792e0239c3f2e08413c26cb771992 /apt-pkg/acquire-worker.cc
parent55971004215609a02ca19c59bd058da20729ba11 (diff)
properly handle if-modfied-since with libcurl/https
(closes: #705648)
Diffstat (limited to 'apt-pkg/acquire-worker.cc')
-rw-r--r--apt-pkg/acquire-worker.cc13
1 files changed, 10 insertions, 3 deletions
diff --git a/apt-pkg/acquire-worker.cc b/apt-pkg/acquire-worker.cc
index 9d90b08bc..44a84216a 100644
--- a/apt-pkg/acquire-worker.cc
+++ b/apt-pkg/acquire-worker.cc
@@ -305,7 +305,15 @@ bool pkgAcquire::Worker::RunMessages()
OwnerQ->ItemDone(Itm);
unsigned long long const ServerSize = strtoull(LookupTag(Message,"Size","0").c_str(), NULL, 10);
- if (TotalSize != 0 && ServerSize != TotalSize)
+ bool isHit = StringToBool(LookupTag(Message,"IMS-Hit"),false) ||
+ StringToBool(LookupTag(Message,"Alt-IMS-Hit"),false);
+ // Using the https method the server might return 200, but the
+ // If-Modified-Since condition is not satsified, libcurl will
+ // discard the download. In this case, however, TotalSize will be
+ // set to the actual size of the file, while ServerSize will be set
+ // to 0. Therefore, if the item is marked as a hit and the
+ // downloaded size (ServerSize) is 0, we ignore TotalSize.
+ if (TotalSize != 0 && (!isHit || ServerSize != 0) && ServerSize != TotalSize)
_error->Warning("Size of file %s is not what the server reported %s %llu",
Owner->DestFile.c_str(), LookupTag(Message,"Size","0").c_str(),TotalSize);
@@ -332,8 +340,7 @@ bool pkgAcquire::Worker::RunMessages()
// Log that we are done
if (Log != 0)
{
- if (StringToBool(LookupTag(Message,"IMS-Hit"),false) == true ||
- StringToBool(LookupTag(Message,"Alt-IMS-Hit"),false) == true)
+ if (isHit)
{
/* Hide 'hits' for local only sources - we also manage to
hide gets */