]> git.saurik.com Git - apt.git/blobdiff - apt-pkg/acquire-item.h
Open 0.5.31
[apt.git] / apt-pkg / acquire-item.h
index 6ab8859e40aa827a5dda4703492cd8e04cc0a8e2..9dab78f366dbf204e8b494d287152489ad03be8a 100644 (file)
@@ -1,24 +1,28 @@
 // -*- mode: cpp; mode: fold -*-
 // Description                                                         /*{{{*/
-// $Id: acquire-item.h,v 1.1 1998/10/15 06:59:59 jgg Exp $
+// $Id: acquire-item.h,v 1.26 2003/02/02 03:13:13 doogie Exp $
 /* ######################################################################
 
    Acquire Item - Item to acquire
 
    When an item is instantiated it will add it self to the local list in
    the Owner Acquire class. Derived classes will then call QueueURI to 
-   register all the URI's they wish to fetch for at the initial moment.   
+   register all the URI's they wish to fetch at the initial moment.   
    
    Two item classes are provided to provide functionality for downloading
    of Index files and downloading of Packages.
    
+   A Archive class is provided for downloading .deb files. It does Md5
+   checking and source location as well as a retry algorithm.
+   
    ##################################################################### */
                                                                        /*}}}*/
 #ifndef PKGLIB_ACQUIRE_ITEM_H
 #define PKGLIB_ACQUIRE_ITEM_H
 
 #include <apt-pkg/acquire.h>
-#include <apt-pkg/sourcelist.h>
+#include <apt-pkg/indexfile.h>
+#include <apt-pkg/pkgrecords.h>
 
 #ifdef __GNUG__
 #pragma interface "apt-pkg/acquire-item.h"
@@ -29,16 +33,45 @@ class pkgAcquire::Item
 {  
    protected:
    
+   // Some private helper methods for registering URIs
    pkgAcquire *Owner;
-   inline void QueueURI(string URI) {Owner->Enqueue(this,URI);};
+   inline void QueueURI(ItemDesc &Item)
+                 {Owner->Enqueue(Item);};
+   inline void Dequeue() {Owner->Dequeue(this);};
+   
+   // Safe rename function with timestamp preservation
+   void Rename(string From,string To);
    
    public:
 
+   // State of the item
+   enum {StatIdle, StatFetching, StatDone, StatError} Status;
+   string ErrorText;
+   unsigned long FileSize;
+   unsigned long PartialSize;   
+   const char *Mode;
+   unsigned long ID;
+   bool Complete;
+   bool Local;
+
+   // Number of queues we are inserted into
    unsigned int QueueCounter;
-   string Description;
    
-   virtual string ToFile() = 0;
-   virtual void Failed() {};
+   // File to write the fetch into
+   string DestFile;
+
+   // Action members invoked by the worker
+   virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
+   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+                    pkgAcquire::MethodConfig *Cnf);
+   virtual void Start(string Message,unsigned long Size);
+   virtual string Custom600Headers() {return string();};
+   virtual string DescURI() = 0;
+   virtual void Finished() {};
+   
+   // Inquire functions
+   virtual string MD5Sum() {return string();};
+   pkgAcquire *GetOwner() {return Owner;};
    
    Item(pkgAcquire *Owner);
    virtual ~Item();
@@ -49,13 +82,22 @@ class pkgAcqIndex : public pkgAcquire::Item
 {
    protected:
    
-   const pkgSourceList::Item *Location;
+   bool Decompression;
+   bool Erase;
+   pkgAcquire::ItemDesc Desc;
+   string RealURI;
    
    public:
    
-   virtual string ToFile();
+   // Specialized action members
+   virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
+   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+                    pkgAcquire::MethodConfig *Cnf);
+   virtual string Custom600Headers();
+   virtual string DescURI() {return RealURI + ".gz";};
 
-   pkgAcqIndex(pkgAcquire *Owner,const pkgSourceList::Item *Location);
+   pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc,
+              string ShortDesct);
 };
 
 // Item class for index files
@@ -63,14 +105,73 @@ class pkgAcqIndexRel : public pkgAcquire::Item
 {
    protected:
    
-   const pkgSourceList::Item *Location;
+   pkgAcquire::ItemDesc Desc;
+   string RealURI;
    
    public:
    
-   virtual string ToFile();
+   // Specialized action members
+   virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
+   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+                    pkgAcquire::MethodConfig *Cnf);   
+   virtual string Custom600Headers();
+   virtual string DescURI() {return RealURI;};
+   
+   pkgAcqIndexRel(pkgAcquire *Owner,string URI,string URIDesc,
+              string ShortDesct);
+};
+
+// Item class for archive files
+class pkgAcqArchive : public pkgAcquire::Item
+{
+   protected:
+   
+   // State information for the retry mechanism
+   pkgCache::VerIterator Version;
+   pkgAcquire::ItemDesc Desc;
+   pkgSourceList *Sources;
+   pkgRecords *Recs;
+   string MD5;
+   string &StoreFilename;
+   pkgCache::VerFileIterator Vf;
+   unsigned int Retries;
 
-   pkgAcqIndexRel(pkgAcquire *Owner,const pkgSourceList::Item *Location);
+   // Queue the next available file for download.
+   bool QueueNext();
+   
+   public:
+   
+   // Specialized action members
+   virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
+   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+                    pkgAcquire::MethodConfig *Cnf);
+   virtual string MD5Sum() {return MD5;};
+   virtual string DescURI() {return Desc.URI;};
+   virtual void Finished();
+   
+   pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
+                pkgRecords *Recs,pkgCache::VerIterator const &Version,
+                string &StoreFilename);
 };
 
+// Fetch a generic file to the current directory
+class pkgAcqFile : public pkgAcquire::Item
+{
+   pkgAcquire::ItemDesc Desc;
+   string Md5Hash;
+   unsigned int Retries;
+   
+   public:
+   
+   // Specialized action members
+   virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
+   virtual void Done(string Message,unsigned long Size,string Md5Hash,
+                    pkgAcquire::MethodConfig *Cnf);
+   virtual string MD5Sum() {return Md5Hash;};
+   virtual string DescURI() {return Desc.URI;};
+   
+   pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,unsigned long Size,
+                 string Desc,string ShortDesc);
+};
 
 #endif