- more off_t typing fixes (Ralf)
[apt.git] / apt-pkg / acquire-item.h
1 // -*- mode: c++; 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,off_t 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    // LORG:2006-03-16
75    virtual string ChecksumType() {return "MD5-Hash";};
76    
77    // Inquire functions
78    virtual string MD5Sum() {return string();};
79    pkgAcquire *GetOwner() {return Owner;};
80    
81    Item(pkgAcquire *Owner);
82    virtual ~Item();
83 };
84
85 // CNC:2002-07-03
86 class pkgRepository;
87
88 // Item class for index files
89 class pkgAcqIndex : public pkgAcquire::Item
90 {
91    protected:
92    
93    bool Decompression;
94    bool Erase;
95    pkgAcquire::ItemDesc Desc;
96    string RealURI;
97
98    // CNC:2002-07-03
99    pkgRepository *Repository;
100    
101    public:
102    
103    // Specialized action members
104    virtual void Done(string Message,off_t Size,string Md5Hash,
105                      pkgAcquire::MethodConfig *Cnf);
106    virtual string Custom600Headers();
107    virtual string DescURI() {return RealURI;}; // CNC:2003-02-14
108
109    // LORG:2006-03-16
110    virtual string ChecksumType();
111
112    // CNC:2002-07-03
113    pkgAcqIndex(pkgAcquire *Owner,pkgRepository *Repository,string URI,
114                string URIDesc,string ShortDesct);
115 };
116
117 // Item class for index files
118 class pkgAcqIndexRel : public pkgAcquire::Item
119 {
120    protected:
121    
122    pkgAcquire::ItemDesc Desc;
123    string RealURI;
124  
125    // CNC:2002-07-03
126    bool Authentication;
127    bool Master;
128    bool Erase;
129    pkgRepository *Repository;
130    
131    public:
132    
133    // Specialized action members
134    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
135    virtual void Done(string Message,off_t Size,string Md5Hash,
136                      pkgAcquire::MethodConfig *Cnf);   
137    virtual string Custom600Headers();
138    virtual string DescURI() {return RealURI;};
139    
140    // CNC:2002-07-03
141    pkgAcqIndexRel(pkgAcquire *Owner,pkgRepository *Repository,string URI,
142                   string URIDesc,string ShortDesc,bool Master=false);
143 };
144
145 // Item class for archive files
146 class pkgAcqArchive : public pkgAcquire::Item
147 {
148    protected:
149    
150    // State information for the retry mechanism
151    pkgCache::VerIterator Version;
152    pkgAcquire::ItemDesc Desc;
153    pkgSourceList *Sources;
154    pkgRecords *Recs;
155    string MD5;
156    string ChkType;
157    string &StoreFilename;
158    pkgCache::VerFileIterator Vf;
159    unsigned int Retries;
160
161    // Queue the next available file for download.
162    bool QueueNext();
163    
164    public:
165    
166    // Specialized action members
167    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
168    virtual void Done(string Message,off_t Size,string Md5Hash,
169                      pkgAcquire::MethodConfig *Cnf);
170    virtual string MD5Sum() {return MD5;};
171    virtual string DescURI() {return Desc.URI;};
172    virtual void Finished();
173    
174    // LORG:2006-03-16
175    virtual string ChecksumType() {return ChkType;};
176
177    pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources,
178                  pkgRecords *Recs,pkgCache::VerIterator const &Version,
179                  string &StoreFilename);
180 };
181
182 // Fetch a generic file to the current directory
183 class pkgAcqFile : public pkgAcquire::Item
184 {
185    pkgAcquire::ItemDesc Desc;
186    string Md5Hash;
187    unsigned int Retries;
188    
189    public:
190    
191    // Specialized action members
192    virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf);
193    virtual void Done(string Message,off_t Size,string Md5Hash,
194                      pkgAcquire::MethodConfig *Cnf);
195    virtual string MD5Sum() {return Md5Hash;};
196    virtual string DescURI() {return Desc.URI;};
197    
198    pkgAcqFile(pkgAcquire *Owner,string URI,string MD5,unsigned long Size,
199                   string Desc,string ShortDesc);
200 };
201
202 #endif