1 // -*- mode: cpp; mode: fold -*-
3 // $Id: acquire-item.h,v 1.26.2.3 2004/01/02 18:51:00 mdz Exp $
4 /* ######################################################################
6 Acquire Item - Item to acquire
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.
12 Two item classes are provided to provide functionality for downloading
13 of Index files and downloading of Packages.
15 A Archive class is provided for downloading .deb files. It does Md5
16 checking and source location as well as a retry algorithm.
18 ##################################################################### */
20 #ifndef PKGLIB_ACQUIRE_ITEM_H
21 #define PKGLIB_ACQUIRE_ITEM_H
23 #include <apt-pkg/acquire.h>
24 #include <apt-pkg/indexfile.h>
25 #include <apt-pkg/vendor.h>
26 #include <apt-pkg/sourcelist.h>
27 #include <apt-pkg/pkgrecords.h>
28 #include <apt-pkg/indexrecords.h>
31 #pragma interface "apt-pkg/acquire-item.h"
35 class pkgAcquire::Item
39 // Some private helper methods for registering URIs
41 inline void QueueURI(ItemDesc
&Item
)
42 {Owner
->Enqueue(Item
);};
43 inline void Dequeue() {Owner
->Dequeue(this);};
45 // Safe rename function with timestamp preservation
46 void Rename(string From
,string To
);
51 enum {StatIdle
, StatFetching
, StatDone
, StatError
, StatAuthError
} Status
;
53 unsigned long FileSize
;
54 unsigned long PartialSize
;
60 // Number of queues we are inserted into
61 unsigned int QueueCounter
;
63 // File to write the fetch into
66 // Action members invoked by the worker
67 virtual void Failed(string Message
,pkgAcquire::MethodConfig
*Cnf
);
68 virtual void Done(string Message
,unsigned long Size
,string Md5Hash
,
69 pkgAcquire::MethodConfig
*Cnf
);
70 virtual void Start(string Message
,unsigned long Size
);
71 virtual string
Custom600Headers() {return string();};
72 virtual string
DescURI() = 0;
73 virtual string
ShortDesc() {return DescURI();}
74 virtual void Finished() {};
77 virtual string
MD5Sum() {return string();};
78 pkgAcquire
*GetOwner() {return Owner
;};
79 virtual bool IsTrusted() {return false;};
81 Item(pkgAcquire
*Owner
);
85 // item for index diffs
86 class pkgAcqIndexDiffs
: public pkgAcquire::Item
90 pkgAcquire::ItemDesc Desc
;
94 // this is the SHA-1 sum we expect after the patching
96 string CurrentPackagesFile
;
103 vector
<DiffInfo
> available_patches
;
104 enum {StateFetchIndex
,StateFetchDiff
,StateUnzipDiff
,StateApplyDiff
} State
;
108 // Specialized action members
109 virtual void Failed(string Message
,pkgAcquire::MethodConfig
*Cnf
);
110 virtual void Done(string Message
,unsigned long Size
,string Md5Hash
,
111 pkgAcquire::MethodConfig
*Cnf
);
112 virtual string
DescURI() {return RealURI
+ "Index";};
113 virtual string
Custom600Headers();
116 bool ParseIndexDiff(string IndexDiffFile
);
117 void QueueDiffIndex(string URI
);
118 bool QueueNextDiff();
119 bool ApplyDiff(string PatchFile
);
120 void Finish(bool allDone
=false);
122 pkgAcqIndexDiffs(pkgAcquire
*Owner
,string URI
,string URIDesc
,
123 string ShortDesct
, string ExpectedMD5
,
124 vector
<DiffInfo
> diffs
=vector
<DiffInfo
>());
127 // Item class for index files
128 class pkgAcqIndex
: public pkgAcquire::Item
134 pkgAcquire::ItemDesc Desc
;
140 // Specialized action members
141 virtual void Failed(string Message
,pkgAcquire::MethodConfig
*Cnf
);
142 virtual void Done(string Message
,unsigned long Size
,string Md5Hash
,
143 pkgAcquire::MethodConfig
*Cnf
);
144 virtual string
Custom600Headers();
145 virtual string
DescURI() {return RealURI
+ ".gz";};
147 pkgAcqIndex(pkgAcquire
*Owner
,string URI
,string URIDesc
,
148 string ShortDesct
, string ExpectedMD5
, string compressExt
="");
159 // Item class for index signatures
160 class pkgAcqMetaSig
: public pkgAcquire::Item
164 pkgAcquire::ItemDesc Desc
;
165 string RealURI
,MetaIndexURI
,MetaIndexURIDesc
,MetaIndexShortDesc
;
166 indexRecords
* MetaIndexParser
;
167 const vector
<struct IndexTarget
*>* IndexTargets
;
171 // Specialized action members
172 virtual void Failed(string Message
,pkgAcquire::MethodConfig
*Cnf
);
173 virtual void Done(string Message
,unsigned long Size
,string Md5Hash
,
174 pkgAcquire::MethodConfig
*Cnf
);
175 virtual string
Custom600Headers();
176 virtual string
DescURI() {return RealURI
; };
178 pkgAcqMetaSig(pkgAcquire
*Owner
,string URI
,string URIDesc
, string ShortDesc
,
179 string MetaIndexURI
, string MetaIndexURIDesc
, string MetaIndexShortDesc
,
180 const vector
<struct IndexTarget
*>* IndexTargets
,
181 indexRecords
* MetaIndexParser
);
184 // Item class for index signatures
185 class pkgAcqMetaIndex
: public pkgAcquire::Item
189 pkgAcquire::ItemDesc Desc
;
190 string RealURI
; // FIXME: is this redundant w/ Desc.URI?
192 const vector
<struct IndexTarget
*>* IndexTargets
;
193 indexRecords
* MetaIndexParser
;
197 void RetrievalDone(string Message
);
198 void AuthDone(string Message
);
199 void QueueIndexes(bool verify
);
203 // Specialized action members
204 virtual void Failed(string Message
,pkgAcquire::MethodConfig
*Cnf
);
205 virtual void Done(string Message
,unsigned long Size
,string Md5Hash
,
206 pkgAcquire::MethodConfig
*Cnf
);
207 virtual string
Custom600Headers();
208 virtual string
DescURI() {return RealURI
; };
210 pkgAcqMetaIndex(pkgAcquire
*Owner
,
211 string URI
,string URIDesc
, string ShortDesc
,
213 const vector
<struct IndexTarget
*>* IndexTargets
,
214 indexRecords
* MetaIndexParser
);
217 // Item class for archive files
218 class pkgAcqArchive
: public pkgAcquire::Item
222 // State information for the retry mechanism
223 pkgCache::VerIterator Version
;
224 pkgAcquire::ItemDesc Desc
;
225 pkgSourceList
*Sources
;
228 string
&StoreFilename
;
229 pkgCache::VerFileIterator Vf
;
230 unsigned int Retries
;
233 // Queue the next available file for download.
238 // Specialized action members
239 virtual void Failed(string Message
,pkgAcquire::MethodConfig
*Cnf
);
240 virtual void Done(string Message
,unsigned long Size
,string Md5Hash
,
241 pkgAcquire::MethodConfig
*Cnf
);
242 virtual string
MD5Sum() {return MD5
;};
243 virtual string
DescURI() {return Desc
.URI
;};
244 virtual string
ShortDesc() {return Desc
.ShortDesc
;};
245 virtual void Finished();
246 virtual bool IsTrusted();
248 pkgAcqArchive(pkgAcquire
*Owner
,pkgSourceList
*Sources
,
249 pkgRecords
*Recs
,pkgCache::VerIterator
const &Version
,
250 string
&StoreFilename
);
253 // Fetch a generic file to the current directory
254 class pkgAcqFile
: public pkgAcquire::Item
256 pkgAcquire::ItemDesc Desc
;
258 unsigned int Retries
;
262 // Specialized action members
263 virtual void Failed(string Message
,pkgAcquire::MethodConfig
*Cnf
);
264 virtual void Done(string Message
,unsigned long Size
,string Md5Hash
,
265 pkgAcquire::MethodConfig
*Cnf
);
266 virtual string
MD5Sum() {return Md5Hash
;};
267 virtual string
DescURI() {return Desc
.URI
;};
269 pkgAcqFile(pkgAcquire
*Owner
,string URI
,string MD5
,unsigned long Size
,
270 string Desc
,string ShortDesc
);