|
apt @VERSION@
|
00001 // -*- mode: cpp; mode: fold -*- 00002 // Description /*{{{*/ 00003 // $Id: acquire-item.h,v 1.26.2.3 2004/01/02 18:51:00 mdz Exp $ 00004 /* ###################################################################### 00005 00006 Acquire Item - Item to acquire 00007 00008 When an item is instantiated it will add it self to the local list in 00009 the Owner Acquire class. Derived classes will then call QueueURI to 00010 register all the URI's they wish to fetch at the initial moment. 00011 00012 Three item classes are provided to provide functionality for 00013 downloading of Index, Translation and Packages files. 00014 00015 A Archive class is provided for downloading .deb files. It does Hash 00016 checking and source location as well as a retry algorithm. 00017 00018 ##################################################################### */ 00019 /*}}}*/ 00020 #ifndef PKGLIB_ACQUIRE_ITEM_H 00021 #define PKGLIB_ACQUIRE_ITEM_H 00022 00023 #include <apt-pkg/acquire.h> 00024 #include <apt-pkg/indexfile.h> 00025 #include <apt-pkg/vendor.h> 00026 #include <apt-pkg/sourcelist.h> 00027 #include <apt-pkg/pkgrecords.h> 00028 #include <apt-pkg/indexrecords.h> 00029 #include <apt-pkg/hashes.h> 00030 #include <apt-pkg/weakptr.h> 00031 00050 class pkgAcquire::Item : public WeakPointable 00051 { 00052 protected: 00053 00055 pkgAcquire *Owner; 00056 00062 inline void QueueURI(ItemDesc &Item) 00063 {Owner->Enqueue(Item);}; 00064 00066 inline void Dequeue() {Owner->Dequeue(this);}; 00067 00077 void Rename(string From,string To); 00078 00079 public: 00080 00082 enum ItemState 00083 { 00085 StatIdle, 00086 00088 StatFetching, 00089 00091 StatDone, 00092 00096 StatError, 00097 00101 StatAuthError, 00102 00106 StatTransientNetworkError 00107 } Status; 00108 00112 string ErrorText; 00113 00115 unsigned long long FileSize; 00116 00118 unsigned long long PartialSize; 00119 00123 const char *Mode; 00124 00132 unsigned long ID; 00133 00138 bool Complete; 00139 00145 bool Local; 00146 string UsedMirror; 00147 00156 unsigned int QueueCounter; 00157 00161 string DestFile; 00162 00176 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00177 00197 virtual void Done(string Message,unsigned long long Size,string Hash, 00198 pkgAcquire::MethodConfig *Cnf); 00199 00209 virtual void Start(string Message,unsigned long long Size); 00210 00219 virtual string Custom600Headers() {return string();}; 00220 00225 virtual string DescURI() = 0; 00230 virtual string ShortDesc() {return DescURI();} 00231 00233 virtual void Finished() {}; 00234 00240 virtual string HashSum() {return string();}; 00241 00243 pkgAcquire *GetOwner() {return Owner;}; 00244 00246 virtual bool IsTrusted() {return false;}; 00247 00248 // report mirror problems 00256 void ReportMirrorFailure(string FailCode); 00257 00258 00270 Item(pkgAcquire *Owner); 00271 00275 virtual ~Item(); 00276 }; 00277 /*}}}*/ /*{{{*/ 00279 struct DiffInfo { 00281 string file; 00282 00284 string sha1; 00285 00287 unsigned long size; 00288 }; 00289 /*}}}*/ 00296 class pkgAcqSubIndex : public pkgAcquire::Item 00297 { 00298 protected: 00300 bool Debug; 00301 00303 pkgAcquire::ItemDesc Desc; 00304 00307 HashString ExpectedHash; 00308 00309 public: 00310 // Specialized action members 00311 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00312 virtual void Done(string Message,unsigned long long Size,string Md5Hash, 00313 pkgAcquire::MethodConfig *Cnf); 00314 virtual string DescURI() {return Desc.URI;}; 00315 virtual string Custom600Headers(); 00316 virtual bool ParseIndex(string const &IndexFile); 00317 00330 pkgAcqSubIndex(pkgAcquire *Owner, string const &URI,string const &URIDesc, 00331 string const &ShortDesc, HashString const &ExpectedHash); 00332 }; 00333 /*}}}*/ 00343 class pkgAcqDiffIndex : public pkgAcquire::Item 00344 { 00345 protected: 00347 bool Debug; 00348 00350 pkgAcquire::ItemDesc Desc; 00351 00355 string RealURI; 00356 00360 HashString ExpectedHash; 00361 00365 string CurrentPackagesFile; 00366 00370 string Description; 00371 00372 public: 00373 // Specialized action members 00374 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00375 virtual void Done(string Message,unsigned long long Size,string Md5Hash, 00376 pkgAcquire::MethodConfig *Cnf); 00377 virtual string DescURI() {return RealURI + "Index";}; 00378 virtual string Custom600Headers(); 00379 00390 bool ParseDiffIndex(string IndexDiffFile); 00391 00392 00405 pkgAcqDiffIndex(pkgAcquire *Owner,string URI,string URIDesc, 00406 string ShortDesc, HashString ExpectedHash); 00407 }; 00408 /*}}}*/ 00420 class pkgAcqIndexDiffs : public pkgAcquire::Item 00421 { 00422 private: 00423 00433 bool QueueNextDiff(); 00434 00446 void Finish(bool allDone=false); 00447 00448 protected: 00449 00453 bool Debug; 00454 00458 pkgAcquire::ItemDesc Desc; 00459 00463 string RealURI; 00464 00468 HashString ExpectedHash; 00469 00471 string Description; 00472 00481 vector<DiffInfo> available_patches; 00482 00484 string ServerSha1; 00485 00487 enum DiffState 00488 { 00490 StateFetchUnkown, 00491 00493 StateFetchDiff, 00494 00496 StateUnzipDiff, // FIXME: No longer used 00497 00499 StateApplyDiff 00500 } State; 00501 00502 public: 00503 00509 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00510 00511 virtual void Done(string Message,unsigned long long Size,string Md5Hash, 00512 pkgAcquire::MethodConfig *Cnf); 00513 virtual string DescURI() {return RealURI + "Index";}; 00514 00537 pkgAcqIndexDiffs(pkgAcquire *Owner,string URI,string URIDesc, 00538 string ShortDesc, HashString ExpectedHash, 00539 string ServerSha1, 00540 vector<DiffInfo> diffs=vector<DiffInfo>()); 00541 }; 00542 /*}}}*/ 00550 class pkgAcqIndex : public pkgAcquire::Item 00551 { 00552 protected: 00553 00555 bool Decompression; 00556 00560 bool Erase; 00561 00565 pkgAcquire::ItemDesc Desc; 00566 00570 string RealURI; 00571 00573 HashString ExpectedHash; 00574 00578 string CompressionExtension; 00579 00580 public: 00581 00582 // Specialized action members 00583 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00584 virtual void Done(string Message,unsigned long long Size,string Md5Hash, 00585 pkgAcquire::MethodConfig *Cnf); 00586 virtual string Custom600Headers(); 00587 virtual string DescURI() {return Desc.URI;}; 00588 virtual string HashSum() {return ExpectedHash.toStr(); }; 00589 00609 pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc, 00610 string ShortDesc, HashString ExpectedHash, 00611 string compressExt=""); 00612 pkgAcqIndex(pkgAcquire *Owner, struct IndexTarget const * const Target, 00613 HashString const &ExpectedHash, indexRecords const *MetaIndexParser); 00614 void Init(string const &URI, string const &URIDesc, string const &ShortDesc); 00615 }; 00616 /*}}}*/ 00624 class pkgAcqIndexTrans : public pkgAcqIndex 00625 { 00626 public: 00627 00628 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00629 virtual string Custom600Headers(); 00630 00642 pkgAcqIndexTrans(pkgAcquire *Owner,string URI,string URIDesc, 00643 string ShortDesc); 00644 pkgAcqIndexTrans(pkgAcquire *Owner, struct IndexTarget const * const Target, 00645 HashString const &ExpectedHash, indexRecords const *MetaIndexParser); 00646 }; 00647 /*}}}*/ /*{{{*/ 00649 class IndexTarget 00650 { 00651 public: 00653 string URI; 00654 00656 string Description; 00657 00659 string ShortDesc; 00660 00664 string MetaKey; 00665 00666 virtual bool IsOptional() const { 00667 return false; 00668 } 00669 virtual bool IsSubIndex() const { 00670 return false; 00671 } 00672 }; 00673 /*}}}*/ /*{{{*/ 00675 class OptionalIndexTarget : public IndexTarget 00676 { 00677 virtual bool IsOptional() const { 00678 return true; 00679 } 00680 }; 00681 /*}}}*/ /*{{{*/ 00683 class SubIndexTarget : public IndexTarget 00684 { 00685 virtual bool IsSubIndex() const { 00686 return true; 00687 } 00688 }; 00689 /*}}}*/ 00690 00699 class pkgAcqMetaSig : public pkgAcquire::Item 00700 { 00701 protected: 00703 string LastGoodSig; 00704 00706 pkgAcquire::ItemDesc Desc; 00707 00712 string RealURI; 00713 00715 string MetaIndexURI; 00716 00720 string MetaIndexURIDesc; 00721 00725 string MetaIndexShortDesc; 00726 00728 indexRecords* MetaIndexParser; 00729 00735 const vector<struct IndexTarget*>* IndexTargets; 00736 00737 public: 00738 00739 // Specialized action members 00740 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00741 virtual void Done(string Message,unsigned long long Size,string Md5Hash, 00742 pkgAcquire::MethodConfig *Cnf); 00743 virtual string Custom600Headers(); 00744 virtual string DescURI() {return RealURI; }; 00745 00747 pkgAcqMetaSig(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc, 00748 string MetaIndexURI, string MetaIndexURIDesc, string MetaIndexShortDesc, 00749 const vector<struct IndexTarget*>* IndexTargets, 00750 indexRecords* MetaIndexParser); 00751 }; 00752 /*}}}*/ 00763 class pkgAcqMetaIndex : public pkgAcquire::Item 00764 { 00765 protected: 00767 pkgAcquire::ItemDesc Desc; 00768 00772 string RealURI; 00773 00779 string SigFile; 00780 00782 const vector<struct IndexTarget*>* IndexTargets; 00783 00785 indexRecords* MetaIndexParser; 00786 00789 bool AuthPass; 00790 // required to deal gracefully with problems caused by incorrect ims hits 00791 bool IMSHit; 00792 00798 bool VerifyVendor(string Message); 00799 00809 void RetrievalDone(string Message); 00810 00820 void AuthDone(string Message); 00821 00830 void QueueIndexes(bool verify); 00831 00832 public: 00833 00834 // Specialized action members 00835 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00836 virtual void Done(string Message,unsigned long long Size, string Hash, 00837 pkgAcquire::MethodConfig *Cnf); 00838 virtual string Custom600Headers(); 00839 virtual string DescURI() {return RealURI; }; 00840 00842 pkgAcqMetaIndex(pkgAcquire *Owner, 00843 string URI,string URIDesc, string ShortDesc, 00844 string SigFile, 00845 const vector<struct IndexTarget*>* IndexTargets, 00846 indexRecords* MetaIndexParser); 00847 }; 00848 /*}}}*/ 00850 class pkgAcqMetaClearSig : public pkgAcqMetaIndex 00851 { 00853 string MetaIndexURI; 00854 00856 string MetaIndexURIDesc; 00857 00859 string MetaIndexShortDesc; 00860 00862 string MetaSigURI; 00863 00865 string MetaSigURIDesc; 00866 00868 string MetaSigShortDesc; 00869 00870 public: 00871 void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00872 virtual string Custom600Headers(); 00873 00875 pkgAcqMetaClearSig(pkgAcquire *Owner, 00876 string const &URI, string const &URIDesc, string const &ShortDesc, 00877 string const &MetaIndexURI, string const &MetaIndexURIDesc, string const &MetaIndexShortDesc, 00878 string const &MetaSigURI, string const &MetaSigURIDesc, string const &MetaSigShortDesc, 00879 const vector<struct IndexTarget*>* IndexTargets, 00880 indexRecords* MetaIndexParser); 00881 }; 00882 /*}}}*/ 00888 class pkgAcqArchive : public pkgAcquire::Item 00889 { 00890 protected: 00892 pkgCache::VerIterator Version; 00893 00895 pkgAcquire::ItemDesc Desc; 00896 00900 pkgSourceList *Sources; 00901 00905 pkgRecords *Recs; 00906 00908 HashString ExpectedHash; 00909 00913 string &StoreFilename; 00914 00916 pkgCache::VerFileIterator Vf; 00917 00923 unsigned int Retries; 00924 00928 bool Trusted; 00929 00931 bool QueueNext(); 00932 00933 public: 00934 00935 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00936 virtual void Done(string Message,unsigned long long Size,string Hash, 00937 pkgAcquire::MethodConfig *Cnf); 00938 virtual string DescURI() {return Desc.URI;}; 00939 virtual string ShortDesc() {return Desc.ShortDesc;}; 00940 virtual void Finished(); 00941 virtual string HashSum() {return ExpectedHash.toStr(); }; 00942 virtual bool IsTrusted(); 00943 00962 pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources, 00963 pkgRecords *Recs,pkgCache::VerIterator const &Version, 00964 string &StoreFilename); 00965 }; 00966 /*}}}*/ 00973 class pkgAcqFile : public pkgAcquire::Item 00974 { 00976 pkgAcquire::ItemDesc Desc; 00977 00979 HashString ExpectedHash; 00980 00984 unsigned int Retries; 00985 00987 bool IsIndexFile; 00988 00989 public: 00990 00991 // Specialized action members 00992 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00993 virtual void Done(string Message,unsigned long long Size,string CalcHash, 00994 pkgAcquire::MethodConfig *Cnf); 00995 virtual string DescURI() {return Desc.URI;}; 00996 virtual string HashSum() {return ExpectedHash.toStr(); }; 00997 virtual string Custom600Headers(); 00998 01030 pkgAcqFile(pkgAcquire *Owner, string URI, string Hash, unsigned long long Size, 01031 string Desc, string ShortDesc, 01032 const string &DestDir="", const string &DestFilename="", 01033 bool IsIndexFile=false); 01034 }; 01035 /*}}}*/ 01038 #endif
1.7.4