]> git.saurik.com Git - apt.git/blob - apt-pkg/acquire-item.h
* cmdline/apt-get.cc:
[apt.git] / apt-pkg / acquire-item.h
1 // -*- mode: cpp; mode: fold -*-
2 // Description /*{{{*/
3 // $Id: acquire-item.h,v 1.26.2.3 2004/01/02 18:51:00 mdz 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/vendor.h>
26 #include <apt-pkg/sourcelist.h>
27 #include <apt-pkg/pkgrecords.h>
28 #include <apt-pkg/indexrecords.h>
29
30 #ifdef __GNUG__
31 #pragma interface "apt-pkg/acquire-item.h"
32 #endif
33
34 // Item to acquire
35 class pkgAcquire::Item
36 {
37 protected:
38
39 // Some private helper methods for registering URIs
40 pkgAcquire *Owner;
41 inline void QueueURI(ItemDesc &Item)
42 {Owner->Enqueue(Item);};
43 inline void Dequeue() {Owner->Dequeue(this);};
44
45 // Safe rename function with timestamp preservation
46 void Rename(string From,string To);
47
48 public:
49
50 // State of the item
51 enum {StatIdle, StatFetching, StatDone, StatError,
52 StatAuthError, StatTransientNetworkError} Status;
53 string ErrorText;
54 unsigned long FileSize;
55 unsigned long PartialSize;
56 const char *Mode;
57 unsigned long ID;
58 bool Complete;
59 bool Local;
60
61 // Number of queues we are inserted into
62 unsigned int QueueCounter;
63
64 // File to write the fetch into
65 string DestFile;
66
67 // Action members invoked by the worker
68 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
69 virtual void Done(string Message,unsigned long Size,string Md5Hash,
70 pkgAcquire::MethodConfig *Cnf);
71 virtual void Start(string Message,unsigned long Size);
72 virtual string Custom600Headers() {return string();};
73 virtual string DescURI() = 0;
74 virtual string ShortDesc() {return DescURI();}
75 virtual void Finished() {};
76
77 // Inquire functions
78 virtual string MD5Sum() {return string();};
79 pkgAcquire *GetOwner() {return Owner;};
80 virtual bool IsTrusted() {return false;};
81
82 Item(pkgAcquire *Owner);
83 virtual ~Item();
84 };
85
86 // Item class for index files
87 class pkgAcqIndex : public pkgAcquire::Item
88 {
89 protected:
90
91 bool Decompression;
92 bool Erase;
93 pkgAcquire::ItemDesc Desc;
94 string RealURI;
95 string ExpectedMD5;
96 string CompressionExtension;
97
98 public:
99
100 // Specialized action members
101 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
102 virtual void Done(string Message,unsigned long Size,string Md5Hash,
103 pkgAcquire::MethodConfig *Cnf);
104 virtual string Custom600Headers();
105 virtual string DescURI() {return RealURI + CompressionExtension;};
106
107 pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc,
108 string ShortDesct, string ExpectedMD5, string compressExt="");
109 };
110
111 struct IndexTarget
112 {
113 string URI;
114 string Description;
115 string ShortDesc;
116 string MetaKey;
117 };
118
119 // Item class for index signatures
120 class pkgAcqMetaSig : public pkgAcquire::Item
121 {
122 protected:
123
124 pkgAcquire::ItemDesc Desc;
125 string RealURI,MetaIndexURI,MetaIndexURIDesc,MetaIndexShortDesc;
126 indexRecords* MetaIndexParser;
127 const vector<struct IndexTarget*>* IndexTargets;
128
129 public:
130
131 // Specialized action members
132 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
133 virtual void Done(string Message,unsigned long Size,string Md5Hash,
134 pkgAcquire::MethodConfig *Cnf);
135 virtual string Custom600Headers();
136 virtual string DescURI() {return RealURI; };
137
138 pkgAcqMetaSig(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc,
139 string MetaIndexURI, string MetaIndexURIDesc, string MetaIndexShortDesc,
140 const vector<struct IndexTarget*>* IndexTargets,
141 indexRecords* MetaIndexParser);
142 };
143
144 // Item class for index signatures
145 class pkgAcqMetaIndex : public pkgAcquire::Item
146 {
147 protected:
148
149 pkgAcquire::ItemDesc Desc;
150 string RealURI; // FIXME: is this redundant w/ Desc.URI?
151 string SigFile;
152 const vector<struct IndexTarget*>* IndexTargets;
153 indexRecords* MetaIndexParser;
154 bool AuthPass;
155 // required to deal gracefully with problems caused by incorrect ims hits
156 bool IMSHit;
157
158 bool VerifyVendor(string Message);
159 void RetrievalDone(string Message);
160 void AuthDone(string Message);
161 void QueueIndexes(bool verify);
162
163 public:
164
165 // Specialized action members
166 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
167 virtual void Done(string Message,unsigned long Size,string Md5Hash,
168 pkgAcquire::MethodConfig *Cnf);
169 virtual string Custom600Headers();
170 virtual string DescURI() {return RealURI; };
171
172 pkgAcqMetaIndex(pkgAcquire *Owner,
173 string URI,string URIDesc, string ShortDesc,
174 string SigFile,
175 const vector<struct IndexTarget*>* IndexTargets,
176 indexRecords* MetaIndexParser);
177 };
178
179 // Item class for archive files
180 class pkgAcqArchive : public pkgAcquire::Item
181 {
182 protected:
183
184 // State information for the retry mechanism
185 pkgCache::VerIterator Version;
186 pkgAcquire::ItemDesc Desc;
187 pkgSourceList *Sources;
188 pkgRecords *Recs;
189 string MD5;
190 string &StoreFilename;
191 pkgCache::VerFileIterator Vf;
192 unsigned int Retries;
193 bool Trusted;
194
195 // Queue the next available file for download.
196 bool QueueNext();
197
198 public:
199
200 // Specialized action members
201 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
202 virtual void Done(string Message,unsigned long Size,string Md5Hash,
203 pkgAcquire::MethodConfig *Cnf);
204 virtual string MD5Sum() {return MD5;};
205 virtual string DescURI() {return Desc.URI;};
206 virtual string ShortDesc() {return Desc.ShortDesc;};
207 virtual void Finished();
208 virtual bool IsTrusted();
209
210 pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
211 pkgRecords *Recs,pkgCache::VerIterator const &Version,
212 string &StoreFilename);
213 };
214
215 // Fetch a generic file to the current directory
216 class pkgAcqFile : public pkgAcquire::Item
217 {
218 pkgAcquire::ItemDesc Desc;
219 string Md5Hash;
220 unsigned int Retries;
221
222 public:
223
224 // Specialized action members
225 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
226 virtual void Done(string Message,unsigned long Size,string Md5Hash,
227 pkgAcquire::MethodConfig *Cnf);
228 virtual string MD5Sum() {return Md5Hash;};
229 virtual string DescURI() {return Desc.URI;};
230
231 // If DestFilename is empty, download to DestDir/<basename> if
232 // DestDir is non-empty, $CWD/<basename> otherwise. If
233 // DestFilename is NOT empty, DestDir is ignored and DestFilename
234 // is the absolute name to which the file should be downloaded.
235 pkgAcqFile(pkgAcquire *Owner, string URI, string MD5, unsigned long Size,
236 string Desc, string ShortDesc,
237 const string &DestDir="", const string &DestFilename="");
238 };
239
240 #endif