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