diff options
author | Michael Vogt <michael.vogt@ubuntu.com> | 2007-08-03 12:18:12 +0200 |
---|---|---|
committer | Michael Vogt <michael.vogt@ubuntu.com> | 2007-08-03 12:18:12 +0200 |
commit | f060e833f53ba3ed0024f8a2bebfc78e8aa552f2 (patch) | |
tree | ccf327402d9e02f24fdf95065c06c7a5dd2fa650 /methods/https.cc | |
parent | 3e8bdb6fe22d6feeca07d47e07c9b79ddd882c59 (diff) | |
parent | c3279b9d100fb62f412267512458b58dda40f95b (diff) |
* apt-inst/contrib/extracttar.cc:
- fix fd leak for zero size files (thanks to Bill Broadley for
reporting this bug)
* apt-pkg/acquire-item.cc:
- remove zero size files on I-M-S hit
* methods/https.cc:
- only send LastModified if we actually have one
- send range request with if-range
- delete failed downloads
* apt-pkg/deb/dpkgpm.{cc,h}:
- merged dpkg-log branch, this lets you specify a
Dir::Log::Terminal file to log dpkg output to
(ABI break)
* merged apt--sha256 branch to fully support the new
sha256 checksums in the Packages and Release files
(ABI break)
* Applied patch from Aurelien Jarno <aurel32@debian.org> to fix wrong
directory downloading on non-linux architectures (closes: #435597)
* Applied patch from Guillem Jover <guillem@debian.org> to use
* Applied patch from Guillem Jover <guillem@debian.org> to add
support to add lzma support (closes: #408201)
* methods/makefile:
- install lzma symlink method (for full lzma support)
* debian/control:
- suggest "lzma"
* Simplified HttpMethod::Fetch on http.cc removing Tail variable;
* Fix pipeline handling on http.cc (closes: #413324)
* Fix building to properly support binNMUs. Thanks to Daniel Schepler
<schepler@math.unipd.it> by the patch (closes: #359634)
* Fix example for Install-{Recommends,Suggests} options on
configure-index example file. Thanks to Peter Eisentraut
<peter_e@gmx.net> by the patch (closes: #432223)
* fixed compile errors with g++ 4.3 (thanks to
Daniel Burrows, closes: #429378)
* fixes in the auto-mark code (thanks to Daniel
Burrows)
* fix FTFBFS by changing build-depends to
libcurl4-gnutls-dev (closes: #428363)
* cmdline/apt-get.cc:
- fix InstallTask code when a pkgRecord ends
with a single '\n' (thanks to Soren Hansen for reporting)
* merged from Christian Perrier:
* vi.po: completed to 532t, again. Closes: #429899
* gl.po: completed to 532t. Closes: #429506
* vi.po: completed to 532t. Closes: #428672
* Update all PO and the POT. Gives 514t14f4u for formerly
complete translations
* fr.po: completed to 532t
* ku.po, uk.po, LINGUAS: reintegrate those translations
which disappeared from the BZR repositories
Diffstat (limited to 'methods/https.cc')
-rw-r--r-- | methods/https.cc | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/methods/https.cc b/methods/https.cc index d48ac97fb..e6717e63a 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -107,6 +107,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm) struct stat SBuf; struct curl_slist *headers=NULL; char curl_errorstr[CURL_ERROR_SIZE]; + long curl_responsecode; // TODO: // - http::Timeout @@ -159,8 +160,11 @@ bool HttpsMethod::Fetch(FetchItem *Itm) curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); // set time values - curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE); - curl_easy_setopt(curl, CURLOPT_TIMEVALUE, Itm->LastModified); + if(Itm->LastModified > 0) + { + curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE); + curl_easy_setopt(curl, CURLOPT_TIMEVALUE, Itm->LastModified); + } // speed limit int dlLimit = _config->FindI("Acquire::http::Dl-Limit",0)*1024; @@ -178,8 +182,14 @@ bool HttpsMethod::Fetch(FetchItem *Itm) curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curl_errorstr); // In this case we send an if-range query with a range header - if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0) - curl_easy_setopt(curl, CURLOPT_RESUME_FROM, (long)SBuf.st_size); + if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0) + { + char Buf[1000]; + sprintf(Buf,"Range: bytes=%li-\r\nIf-Range: %s\r\n", + (long)SBuf.st_size - 1, + TimeRFC1123(SBuf.st_mtime).c_str()); + headers = curl_slist_append(headers, Buf); + } // go for it - if the file exists, append on it File = new FileFd(Itm->DestFile, FileFd::WriteAny); @@ -190,14 +200,17 @@ bool HttpsMethod::Fetch(FetchItem *Itm) // get it! CURLcode success = curl_easy_perform(curl); - + curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &curl_responsecode); // cleanup - if(success != 0) { + if(success != 0) + { + unlink(File->Name().c_str()); _error->Error(curl_errorstr); Fail(); return true; } + File->Close(); if (Res.Size == 0) Res.Size = File->Size(); @@ -210,7 +223,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm) Res.Filename = File->Name(); Res.LastModified = Buf.st_mtime; Res.IMSHit = false; - if (Itm->LastModified != 0 && Buf.st_mtime >= Itm->LastModified) + if (curl_responsecode == 304) { Res.IMSHit = true; Res.LastModified = Itm->LastModified; @@ -227,7 +240,6 @@ bool HttpsMethod::Fetch(FetchItem *Itm) URIDone(Res); // cleanup - File->Close(); Res.Size = 0; delete File; curl_slist_free_all(headers); |