]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/acquire-item.cc
Checks for the partial directories before doing downloads
[apt.git] / apt-pkg / acquire-item.cc
index 5dc9413a9cdb05e355a8584668e89b14a89aae23..2bae109fd486a7976e53a1dc3c0ff8eea0a21830 100644 (file)
@@ -1,6 +1,6 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: acquire-item.cc,v 1.36 1999/08/28 03:22:34 jgg Exp $
+// $Id: acquire-item.cc,v 1.39 1999/10/17 20:58:36 jgg Exp $
 /* ######################################################################
 
    Acquire Item - Item to acquire
@@ -136,7 +136,7 @@ pkgAcqIndex::pkgAcqIndex(pkgAcquire *Owner,const pkgSourceList::Item *Location)
    DestFile = _config->FindDir("Dir::State::lists") + "partial/";
    DestFile += URItoFileName(Location->PackagesURI());
 
-   // Create the item 
+   // Create the item
    Desc.URI = Location->PackagesURI() + ".gz";
    Desc.Description = Location->PackagesInfo();
    Desc.Owner = this;
@@ -565,8 +565,10 @@ void pkgAcqArchive::Finished()
 /* The file is added to the queue */
 pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,
                       unsigned long Size,string Dsc,string ShortDesc) :
-                       Item(Owner), MD5(MD5)
+                       Item(Owner), Md5Hash(MD5)
 {
+   Retries = _config->FindI("Acquire::Retries",0);
+   
    DestFile = flNotDir(URI);
    
    // Create the item
@@ -597,6 +599,18 @@ pkgAcqFile::pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,
 /* */
 void pkgAcqFile::Done(string Message,unsigned long Size,string MD5)
 {
+   // Check the md5
+   if (Md5Hash.empty() == false && MD5.empty() == false)
+   {
+      if (Md5Hash != MD5)
+      {
+        Status = StatError;
+        ErrorText = "MD5Sum mismatch";
+        Rename(DestFile,DestFile + ".FAILED");
+        return;
+      }
+   }
+   
    Item::Done(Message,Size,MD5);
 
    string FileName = LookupTag(Message,"Filename");
@@ -633,3 +647,23 @@ void pkgAcqFile::Done(string Message,unsigned long Size,string MD5)
    }
 }
                                                                        /*}}}*/
+// AcqFile::Failed - Failure handler                                   /*{{{*/
+// ---------------------------------------------------------------------
+/* Here we try other sources */
+void pkgAcqFile::Failed(string Message,pkgAcquire::MethodConfig *Cnf)
+{
+   ErrorText = LookupTag(Message,"Message");
+   
+   // This is the retry counter
+   if (Retries != 0 &&
+       Cnf->LocalOnly == false &&
+       StringToBool(LookupTag(Message,"Transient-Failure"),false) == true)
+   {
+      Retries--;
+      QueueURI(Desc);
+      return;
+   }
+   
+   Item::Failed(Message,Cnf);
+}
+                                                                       /*}}}*/