X-Git-Url: https://git.saurik.com/apt.git/blobdiff_plain/a72ace2091afd833e9359514644676c6bca55d96..317bb39f3cd6626c74f25d7bdf2907f1b235f553:/apt-pkg/acquire-method.h diff --git a/apt-pkg/acquire-method.h b/apt-pkg/acquire-method.h index 9e4ac65b6..cab2bda40 100644 --- a/apt-pkg/acquire-method.h +++ b/apt-pkg/acquire-method.h @@ -1,6 +1,5 @@ // -*- mode: cpp; mode: fold -*- // Description /*{{{*/ -// $Id: acquire-method.h,v 1.4 1998/11/29 01:24:16 jgg Exp $ /* ###################################################################### Acquire Method - Method helper class + functions @@ -10,15 +9,29 @@ ##################################################################### */ /*}}}*/ + +/** \addtogroup acquire + * @{ + * + * \file acquire-method.h + */ + #ifndef PKGLIB_ACQUIRE_METHOD_H #define PKGLIB_ACQUIRE_METHOD_H -#include -#include +#include +#include -#ifdef __GNUG__ -#pragma interface "apt-pkg/acquire-method.h" -#endif +#include +#include + +#include +#include + +#ifndef APT_8_CLEANER_HEADERS +#include +#include +#endif class pkgAcqMethod { @@ -28,50 +41,88 @@ class pkgAcqMethod { FetchItem *Next; - string Uri; - string DestFile; + std::string Uri; + std::string DestFile; + int DestFileFd; time_t LastModified; bool IndexFile; + bool FailIgnore; + HashStringList ExpectedHashes; + // a maximum size we will download, this can be the exact filesize + // for when we know it or a arbitrary limit when we don't know the + // filesize (like a InRelease file) + unsigned long long MaximumSize; + + FetchItem(); + virtual ~FetchItem(); + private: + void * const d; }; struct FetchResult { - string MD5Sum; + HashStringList Hashes; + std::vector GPGVOutput; time_t LastModified; bool IMSHit; - string Filename; - unsigned long Size; - unsigned long ResumePoint; + std::string Filename; + unsigned long long Size; + unsigned long long ResumePoint; + + void TakeHashes(class Hashes &Hash); FetchResult(); + virtual ~FetchResult(); + private: + void * const d; }; // State - vector Messages; + std::vector Messages; FetchItem *Queue; - + FetchItem *QueueBack; + std::string FailReason; + std::string UsedMirror; + std::string IP; + // Handlers for messages - virtual bool Configuration(string Message); - virtual bool Fetch(FetchItem *Item) {return true;}; - + virtual bool Configuration(std::string Message); + virtual bool Fetch(FetchItem * /*Item*/) {return true;}; + virtual bool URIAcquire(std::string const &/*Message*/, FetchItem *Itm) { return Fetch(Itm); }; + // Outgoing messages void Fail(bool Transient = false); - void Fail(string Why, bool Transient = false); - void URIStart(FetchResult &Res); - void URIDone(FetchResult &Res,FetchResult *Alt = 0); - - public: + inline void Fail(const char *Why, bool Transient = false) {Fail(std::string(Why),Transient);}; + virtual void Fail(std::string Why, bool Transient = false); + virtual void URIStart(FetchResult &Res); + virtual void URIDone(FetchResult &Res,FetchResult *Alt = 0); + bool MediaFail(std::string Required,std::string Drive); + virtual void Exit() {}; + + void PrintStatus(char const * const header, const char* Format, va_list &args) const; + + public: enum CnfFlags {SingleInstance = (1<<0), Pipeline = (1<<1), SendConfig = (1<<2), - LocalOnly = (1<<3)}; + LocalOnly = (1<<3), NeedsCleanup = (1<<4), + Removable = (1<<5)}; void Log(const char *Format,...); void Status(const char *Format,...); + void Redirect(const std::string &NewURI); + int Run(bool Single = false); + inline void SetFailReason(std::string Msg) {FailReason = Msg;}; + inline void SetIP(std::string aIP) {IP = aIP;}; pkgAcqMethod(const char *Ver,unsigned long Flags = 0); - virtual ~pkgAcqMethod() {}; + virtual ~pkgAcqMethod(); + void DropPrivsOrDie(); + private: + APT_HIDDEN void Dequeue(); }; +/** @} */ + #endif