- initial import of revision 374 from cnc
[apt.git] / apt-pkg / acquire-item.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description                                                          /*{{{*/
3 // $Id: acquire-item.h,v 1.26 2003/02/02 03:13:13 doogie Exp $
4 /* ######################################################################
5
6    Acquire Item - Item to acquire
7
8    When an item is instantiated it will add it self to the local list in
9    the Owner Acquire class. Derived classes will then call QueueURI to 
10    register all the URI's they wish to fetch at the initial moment.   
11    
12    Two item classes are provided to provide functionality for downloading
13    of Index files and downloading of Packages.
14    
15    A Archive class is provided for downloading .deb files. It does Md5
16    checking and source location as well as a retry algorithm.
17    
18    ##################################################################### */
19                                                                         /*}}}*/
20 #ifndef PKGLIB_ACQUIRE_ITEM_H
21 #define PKGLIB_ACQUIRE_ITEM_H
22
23 #include <apt-pkg/acquire.h>
24 #include <apt-pkg/indexfile.h>
25 #include <apt-pkg/pkgrecords.h>
26
27 #ifdef __GNUG__
28 #pragma interface "apt-pkg/acquire-item.h"
29 #endif 
30
31 // Item to acquire
32 class pkgAcquire::Item
33 {  
34    protected:
35    
36    // Some private helper methods for registering URIs
37    pkgAcquire *Owner;
38    inline void QueueURI(ItemDesc &Item)
39                  {Owner->Enqueue(Item);};
40    inline void Dequeue() {Owner->Dequeue(this);};
41    
42    // Safe rename function with timestamp preservation
43    void Rename(string From,string To);
44    
45    public:
46
47    // State of the item
48    /* CNC:2002-11-22
49     * Do not use anonyomus enums, as this breaks SWIG in some cases */
50    enum StatusFlags {StatIdle, StatFetching, StatDone, StatError} Status;
51    string ErrorText;
52    unsigned long FileSize;
53    unsigned long PartialSize;   
54    const char *Mode;
55    unsigned long ID;
56    bool Complete;
57    bool Local;
58
59    // Number of queues we are inserted into
60    unsigned int QueueCounter;
61    
62    // File to write the fetch into
63    string DestFile;
64
65    // Action members invoked by the worker
66    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
67    virtual void Done(string Message,unsigned long Size,string Md5Hash,
68                      pkgAcquire::MethodConfig *Cnf);
69    virtual void Start(string Message,unsigned long Size);
70    virtual string Custom600Headers() {return string();};
71    virtual string DescURI() = 0;
72    virtual void Finished() {};
73    
74    // Inquire functions
75    virtual string MD5Sum() {return string();};
76    pkgAcquire *GetOwner() {return Owner;};
77    
78    Item(pkgAcquire *Owner);
79    virtual ~Item();
80 };
81
82 // CNC:2002-07-03
83 class pkgRepository;
84
85 // Item class for index files
86 class pkgAcqIndex : public pkgAcquire::Item
87 {
88    protected:
89    
90    bool Decompression;
91    bool Erase;
92    pkgAcquire::ItemDesc Desc;
93    string RealURI;
94
95    // CNC:2002-07-03
96    pkgRepository *Repository;
97    
98    public:
99    
100    // Specialized action members
101    virtual void Done(string Message,unsigned long Size,string Md5Hash,
102                      pkgAcquire::MethodConfig *Cnf);
103    virtual string Custom600Headers();
104    virtual string DescURI() {return RealURI;}; // CNC:2003-02-14
105
106    // CNC:2002-07-03
107    pkgAcqIndex(pkgAcquire *Owner,pkgRepository *Repository,string URI,
108                string URIDesc,string ShortDesct);
109 };
110
111 // Item class for index files
112 class pkgAcqIndexRel : public pkgAcquire::Item
113 {
114    protected:
115    
116    pkgAcquire::ItemDesc Desc;
117    string RealURI;
118  
119    // CNC:2002-07-03
120    bool Authentication;
121    bool Master;
122    bool Erase;
123    pkgRepository *Repository;
124    
125    public:
126    
127    // Specialized action members
128    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
129    virtual void Done(string Message,unsigned long Size,string Md5Hash,
130                      pkgAcquire::MethodConfig *Cnf);   
131    virtual string Custom600Headers();
132    virtual string DescURI() {return RealURI;};
133    
134    // CNC:2002-07-03
135    pkgAcqIndexRel(pkgAcquire *Owner,pkgRepository *Repository,string URI,
136                   string URIDesc,string ShortDesc,bool Master=false);
137 };
138
139 // Item class for archive files
140 class pkgAcqArchive : public pkgAcquire::Item
141 {
142    protected:
143    
144    // State information for the retry mechanism
145    pkgCache::VerIterator Version;
146    pkgAcquire::ItemDesc Desc;
147    pkgSourceList *Sources;
148    pkgRecords *Recs;
149    string MD5;
150    string &StoreFilename;
151    pkgCache::VerFileIterator Vf;
152    unsigned int Retries;
153
154    // Queue the next available file for download.
155    bool QueueNext();
156    
157    public:
158    
159    // Specialized action members
160    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
161    virtual void Done(string Message,unsigned long Size,string Md5Hash,
162                      pkgAcquire::MethodConfig *Cnf);
163    virtual string MD5Sum() {return MD5;};
164    virtual string DescURI() {return Desc.URI;};
165    virtual void Finished();
166    
167    pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
168                  pkgRecords *Recs,pkgCache::VerIterator const &Version,
169                  string &StoreFilename);
170 };
171
172 // Fetch a generic file to the current directory
173 class pkgAcqFile : public pkgAcquire::Item
174 {
175    pkgAcquire::ItemDesc Desc;
176    string Md5Hash;
177    unsigned int Retries;
178    
179    public:
180    
181    // Specialized action members
182    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
183    virtual void Done(string Message,unsigned long Size,string Md5Hash,
184                      pkgAcquire::MethodConfig *Cnf);
185    virtual string MD5Sum() {return Md5Hash;};
186    virtual string DescURI() {return Desc.URI;};
187    
188    pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,unsigned long Size,
189                   string Desc,string ShortDesc);
190 };
191
192 #endif