|
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 00567 // FIXME: instead of a bool it should use a verify string that will 00568 // then be used in the pkgAcqIndex::Done method to ensure that 00569 // the downloaded file contains the expected tag 00570 bool Verify; 00571 00575 pkgAcquire::ItemDesc Desc; 00576 00580 string RealURI; 00581 00583 HashString ExpectedHash; 00584 00588 string CompressionExtension; 00589 00590 public: 00591 00592 // Specialized action members 00593 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00594 virtual void Done(string Message,unsigned long long Size,string Md5Hash, 00595 pkgAcquire::MethodConfig *Cnf); 00596 virtual string Custom600Headers(); 00597 virtual string DescURI() {return Desc.URI;}; 00598 virtual string HashSum() {return ExpectedHash.toStr(); }; 00599 00619 pkgAcqIndex(pkgAcquire *Owner,string URI,string URIDesc, 00620 string ShortDesc, HashString ExpectedHash, 00621 string compressExt=""); 00622 pkgAcqIndex(pkgAcquire *Owner, struct IndexTarget const * const Target, 00623 HashString const &ExpectedHash, indexRecords const *MetaIndexParser); 00624 void Init(string const &URI, string const &URIDesc, string const &ShortDesc); 00625 }; 00626 /*}}}*/ 00634 class pkgAcqIndexTrans : public pkgAcqIndex 00635 { 00636 public: 00637 00638 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00639 virtual string Custom600Headers(); 00640 00652 pkgAcqIndexTrans(pkgAcquire *Owner,string URI,string URIDesc, 00653 string ShortDesc); 00654 pkgAcqIndexTrans(pkgAcquire *Owner, struct IndexTarget const * const Target, 00655 HashString const &ExpectedHash, indexRecords const *MetaIndexParser); 00656 }; 00657 /*}}}*/ /*{{{*/ 00659 class IndexTarget 00660 { 00661 public: 00663 string URI; 00664 00666 string Description; 00667 00669 string ShortDesc; 00670 00674 string MetaKey; 00675 00676 virtual bool IsOptional() const { 00677 return false; 00678 } 00679 virtual bool IsSubIndex() const { 00680 return false; 00681 } 00682 }; 00683 /*}}}*/ /*{{{*/ 00685 class OptionalIndexTarget : public IndexTarget 00686 { 00687 virtual bool IsOptional() const { 00688 return true; 00689 } 00690 }; 00691 /*}}}*/ /*{{{*/ 00693 class SubIndexTarget : public IndexTarget 00694 { 00695 virtual bool IsSubIndex() const { 00696 return true; 00697 } 00698 }; 00699 /*}}}*/ 00700 00709 class pkgAcqMetaSig : public pkgAcquire::Item 00710 { 00711 protected: 00713 string LastGoodSig; 00714 00716 pkgAcquire::ItemDesc Desc; 00717 00722 string RealURI; 00723 00725 string MetaIndexURI; 00726 00730 string MetaIndexURIDesc; 00731 00735 string MetaIndexShortDesc; 00736 00738 indexRecords* MetaIndexParser; 00739 00745 const vector<struct IndexTarget*>* IndexTargets; 00746 00747 public: 00748 00749 // Specialized action members 00750 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00751 virtual void Done(string Message,unsigned long long Size,string Md5Hash, 00752 pkgAcquire::MethodConfig *Cnf); 00753 virtual string Custom600Headers(); 00754 virtual string DescURI() {return RealURI; }; 00755 00757 pkgAcqMetaSig(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc, 00758 string MetaIndexURI, string MetaIndexURIDesc, string MetaIndexShortDesc, 00759 const vector<struct IndexTarget*>* IndexTargets, 00760 indexRecords* MetaIndexParser); 00761 }; 00762 /*}}}*/ 00773 class pkgAcqMetaIndex : public pkgAcquire::Item 00774 { 00775 protected: 00777 pkgAcquire::ItemDesc Desc; 00778 00782 string RealURI; 00783 00789 string SigFile; 00790 00792 const vector<struct IndexTarget*>* IndexTargets; 00793 00795 indexRecords* MetaIndexParser; 00796 00799 bool AuthPass; 00800 // required to deal gracefully with problems caused by incorrect ims hits 00801 bool IMSHit; 00802 00808 bool VerifyVendor(string Message); 00809 00819 void RetrievalDone(string Message); 00820 00830 void AuthDone(string Message); 00831 00840 void QueueIndexes(bool verify); 00841 00842 public: 00843 00844 // Specialized action members 00845 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00846 virtual void Done(string Message,unsigned long long Size, string Hash, 00847 pkgAcquire::MethodConfig *Cnf); 00848 virtual string Custom600Headers(); 00849 virtual string DescURI() {return RealURI; }; 00850 00852 pkgAcqMetaIndex(pkgAcquire *Owner, 00853 string URI,string URIDesc, string ShortDesc, 00854 string SigFile, 00855 const vector<struct IndexTarget*>* IndexTargets, 00856 indexRecords* MetaIndexParser); 00857 }; 00858 /*}}}*/ 00860 class pkgAcqMetaClearSig : public pkgAcqMetaIndex 00861 { 00863 string MetaIndexURI; 00864 00866 string MetaIndexURIDesc; 00867 00869 string MetaIndexShortDesc; 00870 00872 string MetaSigURI; 00873 00875 string MetaSigURIDesc; 00876 00878 string MetaSigShortDesc; 00879 00880 public: 00881 void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00882 virtual string Custom600Headers(); 00883 00885 pkgAcqMetaClearSig(pkgAcquire *Owner, 00886 string const &URI, string const &URIDesc, string const &ShortDesc, 00887 string const &MetaIndexURI, string const &MetaIndexURIDesc, string const &MetaIndexShortDesc, 00888 string const &MetaSigURI, string const &MetaSigURIDesc, string const &MetaSigShortDesc, 00889 const vector<struct IndexTarget*>* IndexTargets, 00890 indexRecords* MetaIndexParser); 00891 }; 00892 /*}}}*/ 00898 class pkgAcqArchive : public pkgAcquire::Item 00899 { 00900 protected: 00902 pkgCache::VerIterator Version; 00903 00905 pkgAcquire::ItemDesc Desc; 00906 00910 pkgSourceList *Sources; 00911 00915 pkgRecords *Recs; 00916 00918 HashString ExpectedHash; 00919 00923 string &StoreFilename; 00924 00926 pkgCache::VerFileIterator Vf; 00927 00933 unsigned int Retries; 00934 00938 bool Trusted; 00939 00941 bool QueueNext(); 00942 00943 public: 00944 00945 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00946 virtual void Done(string Message,unsigned long long Size,string Hash, 00947 pkgAcquire::MethodConfig *Cnf); 00948 virtual string DescURI() {return Desc.URI;}; 00949 virtual string ShortDesc() {return Desc.ShortDesc;}; 00950 virtual void Finished(); 00951 virtual string HashSum() {return ExpectedHash.toStr(); }; 00952 virtual bool IsTrusted(); 00953 00972 pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources, 00973 pkgRecords *Recs,pkgCache::VerIterator const &Version, 00974 string &StoreFilename); 00975 }; 00976 /*}}}*/ 00983 class pkgAcqFile : public pkgAcquire::Item 00984 { 00986 pkgAcquire::ItemDesc Desc; 00987 00989 HashString ExpectedHash; 00990 00994 unsigned int Retries; 00995 00997 bool IsIndexFile; 00998 00999 public: 01000 01001 // Specialized action members 01002 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 01003 virtual void Done(string Message,unsigned long long Size,string CalcHash, 01004 pkgAcquire::MethodConfig *Cnf); 01005 virtual string DescURI() {return Desc.URI;}; 01006 virtual string HashSum() {return ExpectedHash.toStr(); }; 01007 virtual string Custom600Headers(); 01008 01040 pkgAcqFile(pkgAcquire *Owner, string URI, string Hash, unsigned long long Size, 01041 string Desc, string ShortDesc, 01042 const string &DestDir="", const string &DestFilename="", 01043 bool IsIndexFile=false); 01044 }; 01045 /*}}}*/ 01048 #endif
1.7.4