]> git.saurik.com Git - apt.git/blame - apt-pkg/acquire-item.h
* use "red" now, print meaningfull pdiff names, use IMS for the IndexDiff
[apt.git] / apt-pkg / acquire-item.h
CommitLineData
0118833a
AL
1// -*- mode: cpp; mode: fold -*-
2// Description /*{{{*/
7db98ffc 3// $Id: acquire-item.h,v 1.26.2.3 2004/01/02 18:51:00 mdz Exp $
0118833a
AL
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
17caf1b1 10 register all the URI's they wish to fetch at the initial moment.
0118833a
AL
11
12 Two item classes are provided to provide functionality for downloading
13 of Index files and downloading of Packages.
14
b185acc2 15 A Archive class is provided for downloading .deb files. It does Md5
17caf1b1 16 checking and source location as well as a retry algorithm.
b185acc2 17
0118833a
AL
18 ##################################################################### */
19 /*}}}*/
20#ifndef PKGLIB_ACQUIRE_ITEM_H
21#define PKGLIB_ACQUIRE_ITEM_H
22
23#include <apt-pkg/acquire.h>
b2e465d6 24#include <apt-pkg/indexfile.h>
7db98ffc
MZ
25#include <apt-pkg/vendor.h>
26#include <apt-pkg/sourcelist.h>
03e39e59 27#include <apt-pkg/pkgrecords.h>
7db98ffc 28#include <apt-pkg/indexrecords.h>
0118833a
AL
29
30#ifdef __GNUG__
31#pragma interface "apt-pkg/acquire-item.h"
32#endif
33
34// Item to acquire
35class pkgAcquire::Item
36{
37 protected:
38
17caf1b1 39 // Some private helper methods for registering URIs
0118833a 40 pkgAcquire *Owner;
8267fe24
AL
41 inline void QueueURI(ItemDesc &Item)
42 {Owner->Enqueue(Item);};
681d76d0 43 inline void Dequeue() {Owner->Dequeue(this);};
0118833a 44
17caf1b1 45 // Safe rename function with timestamp preservation
8b89e57f
AL
46 void Rename(string From,string To);
47
0118833a
AL
48 public:
49
c88edf1d 50 // State of the item
7db98ffc 51 enum {StatIdle, StatFetching, StatDone, StatError, StatAuthError} Status;
c88edf1d 52 string ErrorText;
8267fe24 53 unsigned long FileSize;
6b1ff003 54 unsigned long PartialSize;
b2e465d6 55 const char *Mode;
b98f2859 56 unsigned long ID;
8267fe24 57 bool Complete;
a6568219 58 bool Local;
30e1eab5 59
0a8a80e5 60 // Number of queues we are inserted into
0118833a 61 unsigned int QueueCounter;
0118833a 62
0a8a80e5
AL
63 // File to write the fetch into
64 string DestFile;
7d8afa39 65
17caf1b1 66 // Action members invoked by the worker
7d8afa39 67 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
459681d3
AL
68 virtual void Done(string Message,unsigned long Size,string Md5Hash,
69 pkgAcquire::MethodConfig *Cnf);
8267fe24 70 virtual void Start(string Message,unsigned long Size);
17caf1b1 71 virtual string Custom600Headers() {return string();};
36375005 72 virtual string DescURI() = 0;
7db98ffc 73 virtual string ShortDesc() {return DescURI();}
ab559b35 74 virtual void Finished() {};
17caf1b1
AL
75
76 // Inquire functions
f7a08e33 77 virtual string MD5Sum() {return string();};
c5ccf175 78 pkgAcquire *GetOwner() {return Owner;};
7db98ffc 79 virtual bool IsTrusted() {return false;};
c5ccf175 80
0118833a
AL
81 Item(pkgAcquire *Owner);
82 virtual ~Item();
83};
84
ac5b205a
MV
85// item for index diffs
86class pkgAcqIndexDiffs : public pkgAcquire::Item
87{
88 protected:
89 bool Debug;
90 pkgAcquire::ItemDesc Desc;
91 string RealURI;
92 string ExpectedMD5;
93 // this is the SHA-1 sum we expect after the patching
94 string ServerSha1;
95 string CurrentPackagesFile;
96 string Description;
6cb30d01
MV
97 struct DiffInfo {
98 string file;
99 string sha1;
100 unsigned long size;
101 };
102 vector<DiffInfo> needed_files;
ac5b205a 103
6cb30d01 104
ac5b205a
MV
105 public:
106
107 // Specialized action members
108 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
109 virtual void Done(string Message,unsigned long Size,string Md5Hash,
110 pkgAcquire::MethodConfig *Cnf);
111 virtual string DescURI() {return RealURI + "Index";};
6cb30d01 112 virtual string Custom600Headers();
ac5b205a
MV
113
114 // various helpers
115 bool ParseIndexDiff(string IndexDiffFile);
116 void QueueDiffIndex(string URI);
117 bool QueueNextDiff();
118 bool ApplyDiff(string PatchFile);
119 void Finish(bool allDone=false);
120
121 pkgAcqIndexDiffs(pkgAcquire *Owner,string URI,string URIDesc,
122 string ShortDesct, string ExpectedMD5,
6cb30d01 123 vector<DiffInfo> diffs=vector<DiffInfo>());
ac5b205a
MV
124};
125
0118833a
AL
126// Item class for index files
127class pkgAcqIndex : public pkgAcquire::Item
128{
129 protected:
130
8b89e57f 131 bool Decompression;
bfd22fc0 132 bool Erase;
8267fe24 133 pkgAcquire::ItemDesc Desc;
b2e465d6 134 string RealURI;
7db98ffc 135 string ExpectedMD5;
ac5b205a 136
0118833a
AL
137 public:
138
17caf1b1 139 // Specialized action members
debc84b2 140 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
459681d3
AL
141 virtual void Done(string Message,unsigned long Size,string Md5Hash,
142 pkgAcquire::MethodConfig *Cnf);
0a8a80e5 143 virtual string Custom600Headers();
40285ffd 144 virtual string DescURI() {return RealURI + ".gz";};
0118833a 145
b2e465d6 146 pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc,
4a177844 147 string ShortDesct, string ExpectedMD5, string compressExt="");
0118833a
AL
148};
149
7db98ffc
MZ
150struct IndexTarget
151{
152 string URI;
153 string Description;
154 string ShortDesc;
155 string MetaKey;
156};
157
158// Item class for index signatures
159class pkgAcqMetaSig : public pkgAcquire::Item
0118833a
AL
160{
161 protected:
162
8267fe24 163 pkgAcquire::ItemDesc Desc;
7db98ffc
MZ
164 string RealURI,MetaIndexURI,MetaIndexURIDesc,MetaIndexShortDesc;
165 indexRecords* MetaIndexParser;
166 const vector<struct IndexTarget*>* IndexTargets;
167
0118833a
AL
168 public:
169
17caf1b1 170 // Specialized action members
681d76d0 171 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
459681d3 172 virtual void Done(string Message,unsigned long Size,string Md5Hash,
7db98ffc 173 pkgAcquire::MethodConfig *Cnf);
0a8a80e5 174 virtual string Custom600Headers();
7db98ffc
MZ
175 virtual string DescURI() {return RealURI; };
176
177 pkgAcqMetaSig(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc,
178 string MetaIndexURI, string MetaIndexURIDesc, string MetaIndexShortDesc,
179 const vector<struct IndexTarget*>* IndexTargets,
180 indexRecords* MetaIndexParser);
181};
182
183// Item class for index signatures
184class pkgAcqMetaIndex : public pkgAcquire::Item
185{
186 protected:
187
188 pkgAcquire::ItemDesc Desc;
189 string RealURI; // FIXME: is this redundant w/ Desc.URI?
190 string SigFile;
191 const vector<struct IndexTarget*>* IndexTargets;
192 indexRecords* MetaIndexParser;
193 bool AuthPass;
194
195 bool VerifyVendor();
196 void RetrievalDone(string Message);
197 void AuthDone(string Message);
198 void QueueIndexes(bool verify);
199
200 public:
0a8a80e5 201
7db98ffc
MZ
202 // Specialized action members
203 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
204 virtual void Done(string Message,unsigned long Size,string Md5Hash,
205 pkgAcquire::MethodConfig *Cnf);
206 virtual string Custom600Headers();
207 virtual string DescURI() {return RealURI; };
208
209 pkgAcqMetaIndex(pkgAcquire *Owner,
210 string URI,string URIDesc, string ShortDesc,
211 string SigFile,
212 const vector<struct IndexTarget*>* IndexTargets,
213 indexRecords* MetaIndexParser);
0118833a
AL
214};
215
03e39e59
AL
216// Item class for archive files
217class pkgAcqArchive : public pkgAcquire::Item
218{
219 protected:
220
17caf1b1 221 // State information for the retry mechanism
03e39e59
AL
222 pkgCache::VerIterator Version;
223 pkgAcquire::ItemDesc Desc;
224 pkgSourceList *Sources;
225 pkgRecords *Recs;
226 string MD5;
30e1eab5 227 string &StoreFilename;
b185acc2 228 pkgCache::VerFileIterator Vf;
7d8afa39 229 unsigned int Retries;
7db98ffc 230 bool Trusted;
17caf1b1
AL
231
232 // Queue the next available file for download.
b185acc2 233 bool QueueNext();
03e39e59
AL
234
235 public:
236
17caf1b1 237 // Specialized action members
7d8afa39 238 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
459681d3
AL
239 virtual void Done(string Message,unsigned long Size,string Md5Hash,
240 pkgAcquire::MethodConfig *Cnf);
17caf1b1 241 virtual string MD5Sum() {return MD5;};
36375005 242 virtual string DescURI() {return Desc.URI;};
7db98ffc 243 virtual string ShortDesc() {return Desc.ShortDesc;};
ab559b35 244 virtual void Finished();
7db98ffc 245 virtual bool IsTrusted();
03e39e59
AL
246
247 pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
30e1eab5
AL
248 pkgRecords *Recs,pkgCache::VerIterator const &Version,
249 string &StoreFilename);
03e39e59
AL
250};
251
36375005
AL
252// Fetch a generic file to the current directory
253class pkgAcqFile : public pkgAcquire::Item
254{
255 pkgAcquire::ItemDesc Desc;
b3c39978 256 string Md5Hash;
08cfc005 257 unsigned int Retries;
36375005
AL
258
259 public:
260
261 // Specialized action members
08cfc005 262 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
459681d3
AL
263 virtual void Done(string Message,unsigned long Size,string Md5Hash,
264 pkgAcquire::MethodConfig *Cnf);
b3c39978 265 virtual string MD5Sum() {return Md5Hash;};
36375005
AL
266 virtual string DescURI() {return Desc.URI;};
267
268 pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,unsigned long Size,
269 string Desc,string ShortDesc);
270};
271
0118833a 272#endif