From 96c1153afd783c40af8bce9add60fb0b6f18080d Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Mon, 30 Jul 2007 21:48:03 +0200 Subject: * methods/makefile: - install lzma symlink method (for full lzma support) * debian/control: - suggest "lzma" --- methods/makefile | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'methods') diff --git a/methods/makefile b/methods/makefile index f178cbbea..f0fd4e414 100644 --- a/methods/makefile +++ b/methods/makefile @@ -80,9 +80,9 @@ LIB_MAKES = apt-pkg/makefile SOURCE = rsh.cc include $(PROGRAM_H) -# SSH and vzip2 method symlink -binary: $(BIN)/ssh $(BIN)/bzip2 -veryclean: clean-$(BIN)/ssh clean-$(BIN)/bzip2 +# SSH and bzip2 method symlink +binary: $(BIN)/ssh $(BIN)/bzip2 $(BIN)/lzma +veryclean: clean-$(BIN)/ssh clean-$(BIN)/bzip2 clean-$(BIN)/lzma $(BIN)/ssh: echo "Installing ssh method link" ln -fs rsh $(BIN)/ssh @@ -92,5 +92,10 @@ clean-$(BIN)/ssh: $(BIN)/bzip2: echo "Installing bzip2 method link" ln -fs gzip $(BIN)/bzip2 +$(BIN)/lzma: + echo "Installing lzma method link" + ln -fs gzip $(BIN)/lzma clean-$(BIN)/bzip2: -rm $(BIN)/bzip2 +clean-$(BIN)/lzma: + -rm $(BIN)/lzma -- cgit v1.2.3 From 4c49961112370b869c3c7db61793bb899c709c09 Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Thu, 2 Aug 2007 19:23:41 +0200 Subject: * methods/https.cc: - only send i-m-s if last-modified is > 0 - instead of resume send a range: if-range: custom header - merge 304 detection patch from thom may (thanks!) * apt-pkg/acquire-item.cc: - remove empty files on i-m-s hits from partial/ --- methods/https.cc | 28 ++++++++++++++++++++-------- 1 file changed, 20 insertions(+), 8 deletions(-) (limited to 'methods') diff --git a/methods/https.cc b/methods/https.cc index b758e4ab3..7a6148d14 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -108,6 +108,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 @@ -160,8 +161,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; @@ -179,8 +183,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); @@ -191,14 +201,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(); @@ -211,7 +224,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; @@ -228,7 +241,6 @@ bool HttpsMethod::Fetch(FetchItem *Itm) URIDone(Res); // cleanup - File->Close(); Res.Size = 0; delete File; curl_slist_free_all(headers); -- cgit v1.2.3 From ded14999815cc2dea0fe1916ceacc307ea339d40 Mon Sep 17 00:00:00 2001 From: Otavio Salvador Date: Mon, 6 Aug 2007 10:45:59 -0300 Subject: * Add hash support to copy method. Thanks Anders Kaseorg by the patch (closes: #436055) --- methods/copy.cc | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'methods') diff --git a/methods/copy.cc b/methods/copy.cc index d737e3c33..72896b4c0 100644 --- a/methods/copy.cc +++ b/methods/copy.cc @@ -12,6 +12,7 @@ #include #include #include +#include #include #include @@ -79,6 +80,10 @@ bool CopyMethod::Fetch(FetchItem *Itm) return _error->Errno("utime",_("Failed to set modification time")); } + Hashes Hash; + FileFd Fd(Res.Filename, FileFd::ReadOnly); + Hash.AddFD(Fd.Fd(), Fd.Size()); + Res.TakeHashes(Hash); URIDone(Res); return true; } -- cgit v1.2.3 From 5820530d3d12e509229fd624b8bb166728e6a21a Mon Sep 17 00:00:00 2001 From: Otavio Salvador Date: Fri, 10 Aug 2007 18:05:05 -0300 Subject: * Reset curl options and timestamp between downloaded files. Thanks to Ryan Murray for the patch (closes: #437150) --- methods/https.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'methods') diff --git a/methods/https.cc b/methods/https.cc index e6717e63a..3b2b0bb19 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -115,6 +115,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm) // - error checking/reporting // - more debug options? (CURLOPT_DEBUGFUNCTION?) + curl_easy_reset(curl); SetupProxy(); // callbacks @@ -125,6 +126,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm) curl_easy_setopt(curl, CURLOPT_PROGRESSDATA, this); curl_easy_setopt(curl, CURLOPT_NOPROGRESS, false); curl_easy_setopt(curl, CURLOPT_FAILONERROR, true); + curl_easy_setopt(curl, CURLOPT_FILETIME, true); // FIXME: https: offer various options of verification bool peer_verify = _config->FindB("Acquire::https::Verify-Peer", false); @@ -202,6 +204,9 @@ bool HttpsMethod::Fetch(FetchItem *Itm) CURLcode success = curl_easy_perform(curl); curl_easy_getinfo(curl, CURLINFO_RESPONSE_CODE, &curl_responsecode); + long curl_servdate; + curl_easy_getinfo(curl, CURLINFO_FILETIME, &curl_servdate); + // cleanup if(success != 0) { @@ -215,6 +220,14 @@ bool HttpsMethod::Fetch(FetchItem *Itm) if (Res.Size == 0) Res.Size = File->Size(); + // Timestamp + struct utimbuf UBuf; + if (curl_servdate != -1) { + UBuf.actime = curl_servdate; + UBuf.modtime = curl_servdate; + utime(File->Name().c_str(),&UBuf); + } + // check the downloaded result struct stat Buf; if (stat(File->Name().c_str(),&Buf) == 0) -- cgit v1.2.3 From 31c64df39bad4c709a2fd5ca6a336f4b652a8613 Mon Sep 17 00:00:00 2001 From: Otavio Salvador Date: Tue, 2 Oct 2007 09:35:23 -0300 Subject: - methods/gpgv.cc: conversion from string constant to 'char*'; --- methods/gpgv.cc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'methods') diff --git a/methods/gpgv.cc b/methods/gpgv.cc index 227e08d63..2b1fa5169 100644 --- a/methods/gpgv.cc +++ b/methods/gpgv.cc @@ -121,9 +121,9 @@ string GPGVMethod::VerifyGetSigners(const char *file, const char *outfile, // Redirect the pipe to the status fd (3) dup2(fd[1], 3); - putenv("LANG="); - putenv("LC_ALL="); - putenv("LC_MESSAGES="); + putenv((char *)"LANG="); + putenv((char *)"LC_ALL="); + putenv((char *)"LC_MESSAGES="); execvp(gpgvpath.c_str(), (char **)Args); exit(111); -- cgit v1.2.3 From b856433668b3ffeab82ae2712f2e672a5dca1396 Mon Sep 17 00:00:00 2001 From: Otavio Salvador Date: Tue, 2 Oct 2007 09:36:42 -0300 Subject: - methods/ftp.cc: likewise; --- methods/ftp.cc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'methods') diff --git a/methods/ftp.cc b/methods/ftp.cc index 0c2aa00a7..554a24cf5 100644 --- a/methods/ftp.cc +++ b/methods/ftp.cc @@ -1101,7 +1101,7 @@ int main(int argc,const char *argv[]) char S[300]; snprintf(S,sizeof(S),"http_proxy=%s",getenv("ftp_proxy")); putenv(S); - putenv("no_proxy="); + putenv((char *)"no_proxy="); // Run the http method string Path = flNotFile(argv[0]) + "http"; -- cgit v1.2.3 From d6039f9e73d440f1e49ac880f5017cb6aaf4546e Mon Sep 17 00:00:00 2001 From: Michael Vogt Date: Fri, 5 Oct 2007 07:48:13 +0200 Subject: methods/https.cc: - delete zero size I-M-S hits - fix of-by-one error in I-M-S code --- methods/https.cc | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) (limited to 'methods') diff --git a/methods/https.cc b/methods/https.cc index 3b2b0bb19..b2bbbddb1 100644 --- a/methods/https.cc +++ b/methods/https.cc @@ -161,13 +161,6 @@ bool HttpsMethod::Fetch(FetchItem *Itm) } curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers); - // set time values - 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; if (dlLimit > 0) @@ -183,7 +176,7 @@ bool HttpsMethod::Fetch(FetchItem *Itm) // error handling curl_easy_setopt(curl, CURLOPT_ERRORBUFFER, curl_errorstr); - // In this case we send an if-range query with a range header + // if we have the file send an if-range query with a range header if (stat(Itm->DestFile.c_str(),&SBuf) >= 0 && SBuf.st_size > 0) { char Buf[1000]; @@ -191,11 +184,17 @@ bool HttpsMethod::Fetch(FetchItem *Itm) (long)SBuf.st_size - 1, TimeRFC1123(SBuf.st_mtime).c_str()); headers = curl_slist_append(headers, Buf); + } + else if(Itm->LastModified > 0) + { + curl_easy_setopt(curl, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE); + curl_easy_setopt(curl, CURLOPT_TIMEVALUE, Itm->LastModified); } // go for it - if the file exists, append on it File = new FileFd(Itm->DestFile, FileFd::WriteAny); - File->Seek(File->Size()); + if (File->Size() > 0) + File->Seek(File->Size() - 1); // keep apt updated Res.Filename = Itm->DestFile; @@ -217,9 +216,6 @@ bool HttpsMethod::Fetch(FetchItem *Itm) } File->Close(); - if (Res.Size == 0) - Res.Size = File->Size(); - // Timestamp struct utimbuf UBuf; if (curl_servdate != -1) { @@ -232,15 +228,19 @@ bool HttpsMethod::Fetch(FetchItem *Itm) struct stat Buf; if (stat(File->Name().c_str(),&Buf) == 0) { - Res.Size = Buf.st_size; Res.Filename = File->Name(); Res.LastModified = Buf.st_mtime; Res.IMSHit = false; if (curl_responsecode == 304) { + unlink(File->Name().c_str()); Res.IMSHit = true; Res.LastModified = Itm->LastModified; + Res.Size = 0; + URIDone(Res); + return true; } + Res.Size = Buf.st_size; } // take hashes -- cgit v1.2.3