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 /*}}}*/ /*{{{*/ 00691 class OptionalSubIndexTarget : public OptionalIndexTarget 00692 { 00693 virtual bool IsSubIndex() const { 00694 return true; 00695 } 00696 }; 00697 /*}}}*/ 00698 00707 class pkgAcqMetaSig : public pkgAcquire::Item 00708 { 00709 protected: 00711 string LastGoodSig; 00712 00714 pkgAcquire::ItemDesc Desc; 00715 00720 string RealURI; 00721 00723 string MetaIndexURI; 00724 00728 string MetaIndexURIDesc; 00729 00733 string MetaIndexShortDesc; 00734 00736 indexRecords* MetaIndexParser; 00737 00743 const vector<struct IndexTarget*>* IndexTargets; 00744 00745 public: 00746 00747 // Specialized action members 00748 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00749 virtual void Done(string Message,unsigned long long Size,string Md5Hash, 00750 pkgAcquire::MethodConfig *Cnf); 00751 virtual string Custom600Headers(); 00752 virtual string DescURI() {return RealURI; }; 00753 00755 pkgAcqMetaSig(pkgAcquire *Owner,string URI,string URIDesc, string ShortDesc, 00756 string MetaIndexURI, string MetaIndexURIDesc, string MetaIndexShortDesc, 00757 const vector<struct IndexTarget*>* IndexTargets, 00758 indexRecords* MetaIndexParser); 00759 }; 00760 /*}}}*/ 00771 class pkgAcqMetaIndex : public pkgAcquire::Item 00772 { 00773 protected: 00775 pkgAcquire::ItemDesc Desc; 00776 00780 string RealURI; 00781 00787 string SigFile; 00788 00790 const vector<struct IndexTarget*>* IndexTargets; 00791 00793 indexRecords* MetaIndexParser; 00794 00797 bool AuthPass; 00798 // required to deal gracefully with problems caused by incorrect ims hits 00799 bool IMSHit; 00800 00806 bool VerifyVendor(string Message); 00807 00817 void RetrievalDone(string Message); 00818 00828 void AuthDone(string Message); 00829 00838 void QueueIndexes(bool verify); 00839 00840 public: 00841 00842 // Specialized action members 00843 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00844 virtual void Done(string Message,unsigned long long Size, string Hash, 00845 pkgAcquire::MethodConfig *Cnf); 00846 virtual string Custom600Headers(); 00847 virtual string DescURI() {return RealURI; }; 00848 00850 pkgAcqMetaIndex(pkgAcquire *Owner, 00851 string URI,string URIDesc, string ShortDesc, 00852 string SigFile, 00853 const vector<struct IndexTarget*>* IndexTargets, 00854 indexRecords* MetaIndexParser); 00855 }; 00856 /*}}}*/ 00858 class pkgAcqMetaClearSig : public pkgAcqMetaIndex 00859 { 00861 string MetaIndexURI; 00862 00864 string MetaIndexURIDesc; 00865 00867 string MetaIndexShortDesc; 00868 00870 string MetaSigURI; 00871 00873 string MetaSigURIDesc; 00874 00876 string MetaSigShortDesc; 00877 00878 public: 00879 void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00880 virtual string Custom600Headers(); 00881 00883 pkgAcqMetaClearSig(pkgAcquire *Owner, 00884 string const &URI, string const &URIDesc, string const &ShortDesc, 00885 string const &MetaIndexURI, string const &MetaIndexURIDesc, string const &MetaIndexShortDesc, 00886 string const &MetaSigURI, string const &MetaSigURIDesc, string const &MetaSigShortDesc, 00887 const vector<struct IndexTarget*>* IndexTargets, 00888 indexRecords* MetaIndexParser); 00889 }; 00890 /*}}}*/ 00896 class pkgAcqArchive : public pkgAcquire::Item 00897 { 00898 protected: 00900 pkgCache::VerIterator Version; 00901 00903 pkgAcquire::ItemDesc Desc; 00904 00908 pkgSourceList *Sources; 00909 00913 pkgRecords *Recs; 00914 00916 HashString ExpectedHash; 00917 00921 string &StoreFilename; 00922 00924 pkgCache::VerFileIterator Vf; 00925 00931 unsigned int Retries; 00932 00936 bool Trusted; 00937 00939 bool QueueNext(); 00940 00941 public: 00942 00943 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 00944 virtual void Done(string Message,unsigned long long Size,string Hash, 00945 pkgAcquire::MethodConfig *Cnf); 00946 virtual string DescURI() {return Desc.URI;}; 00947 virtual string ShortDesc() {return Desc.ShortDesc;}; 00948 virtual void Finished(); 00949 virtual string HashSum() {return ExpectedHash.toStr(); }; 00950 virtual bool IsTrusted(); 00951 00970 pkgAcqArchive(pkgAcquire *Owner,pkgSourceList *Sources, 00971 pkgRecords *Recs,pkgCache::VerIterator const &Version, 00972 string &StoreFilename); 00973 }; 00974 /*}}}*/ 00981 class pkgAcqFile : public pkgAcquire::Item 00982 { 00984 pkgAcquire::ItemDesc Desc; 00985 00987 HashString ExpectedHash; 00988 00992 unsigned int Retries; 00993 00995 bool IsIndexFile; 00996 00997 public: 00998 00999 // Specialized action members 01000 virtual void Failed(string Message,pkgAcquire::MethodConfig *Cnf); 01001 virtual void Done(string Message,unsigned long long Size,string CalcHash, 01002 pkgAcquire::MethodConfig *Cnf); 01003 virtual string DescURI() {return Desc.URI;}; 01004 virtual string HashSum() {return ExpectedHash.toStr(); }; 01005 virtual string Custom600Headers(); 01006 01038 pkgAcqFile(pkgAcquire *Owner, string URI, string Hash, unsigned long long Size, 01039 string Desc, string ShortDesc, 01040 const string &DestDir="", const string &DestFilename="", 01041 bool IsIndexFile=false); 01042 }; 01043 /*}}}*/ 01046 #endif