123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129 |
- // -*- mode: cpp; mode: fold -*-
- // Description /*{{{*/
- /* ######################################################################
- Acquire Method - Method helper class + functions
-
- These functions are designed to be used within the method task to
- ease communication with APT.
-
- ##################################################################### */
- /*}}}*/
- /** \addtogroup acquire
- * @{
- *
- * \file acquire-method.h
- */
- #ifndef PKGLIB_ACQUIRE_METHOD_H
- #define PKGLIB_ACQUIRE_METHOD_H
- #include <apt-pkg/hashes.h>
- #include <apt-pkg/macros.h>
- #include <stdarg.h>
- #include <time.h>
- #include <string>
- #include <vector>
- #ifndef APT_8_CLEANER_HEADERS
- #include <apt-pkg/configuration.h>
- #include <apt-pkg/strutl.h>
- #endif
- class pkgAcqMethod
- {
- protected:
- struct FetchItem
- {
- FetchItem *Next;
- 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
- {
- HashStringList Hashes;
- std::vector<std::string> GPGVOutput;
- time_t LastModified;
- bool IMSHit;
- std::string Filename;
- unsigned long long Size;
- unsigned long long ResumePoint;
-
- void TakeHashes(class Hashes &Hash);
- FetchResult();
- virtual ~FetchResult();
- private:
- void * const d;
- };
- // State
- std::vector<std::string> Messages;
- FetchItem *Queue;
- FetchItem *QueueBack;
- std::string FailReason;
- std::string UsedMirror;
- std::string IP;
- // Handlers for messages
- 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);
- 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), 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();
- void DropPrivsOrDie();
- private:
- APT_HIDDEN void Dequeue();
- };
- /** @} */
- #endif
|