libapt-pkg-dev  v0.9.7.5ubuntu5.4
Debian+Ubuntu APT Package Management
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
pkgAcqIndexDiffs Class Reference

An item that is responsible for fetching all the patches {{{ that need to be applied to a given package index file. More...

#include <acquire-item.h>

Inheritance diagram for pkgAcqIndexDiffs:
Collaboration diagram for pkgAcqIndexDiffs:

Public Types

enum  ItemState {
  StatIdle,
  StatFetching,
  StatDone,
  StatError,
  StatAuthError,
  StatTransientNetworkError
}
 The current status of this item. More...
 

Public Member Functions

 pkgAcqIndexDiffs (pkgAcquire *Owner, std::string URI, std::string URIDesc, std::string ShortDesc, HashString ExpectedHash, std::string ServerSha1, std::vector< DiffInfo > diffs=std::vector< DiffInfo >())
 Create an index diff item. More...
 
void AddWeakPointer (WeakPointable **weakptr)
 Add a new weak pointer. More...
 
virtual std::string Custom600Headers ()
 Custom headers to be sent to the fetch process. More...
 
virtual std::string DescURI ()
 A "descriptive" URI-like string. More...
 
virtual void Done (std::string Message, unsigned long long Size, std::string Md5Hash, pkgAcquire::MethodConfig *Cnf)
 Invoked by the acquire worker when the object was fetched successfully. More...
 
virtual void Failed (std::string Message, pkgAcquire::MethodConfig *Cnf)
 Called when the patch file failed to be downloaded. More...
 
virtual void Finished ()
 Invoked by the worker when the download is completely done. More...
 
pkgAcquireGetOwner ()
 
virtual std::string HashSum ()
 HashSum. More...
 
virtual bool IsTrusted ()
 
void RemoveWeakPointer (WeakPointable **weakptr)
 Remove the weak pointer from the list of weak pointers. More...
 
void ReportMirrorFailure (std::string FailCode)
 Report mirror problem. More...
 
virtual std::string ShortDesc ()
 Short item description. More...
 
virtual void Start (std::string Message, unsigned long long Size)
 Invoked when the worker starts to fetch this object. More...
 

Public Attributes

bool Complete
 If true, the entire object has been successfully fetched. More...
 
std::string DestFile
 The name of the file into which the retrieved object will be written. More...
 
std::string ErrorText
 Contains a textual description of the error encountered if Status is StatError or StatAuthError. More...
 
unsigned long long FileSize
 The size of the object to fetch. More...
 
unsigned long ID
 A client-supplied unique identifier. More...
 
bool Local
 If true, the URI of this object is "local". More...
 
const char * Mode
 If not NULL, contains the name of a subprocess that is operating on this object (for instance, "gzip" or "gpgv"). More...
 
unsigned long long PartialSize
 How much of the object was already fetched. More...
 
unsigned int QueueCounter
 The number of fetch queues into which this item has been inserted. More...
 
enum pkgAcquire::Item::ItemState Status
 
std::string UsedMirror
 

Protected Types

enum  DiffState {
  StateFetchUnkown,
  StateFetchDiff,
  StateUnzipDiff,
  StateApplyDiff
}
 The current status of this patch. More...
 

Protected Member Functions

void Dequeue ()
 Remove this item from its owner's queue. More...
 
void QueueURI (ItemDesc &Item)
 Insert this item into its owner's queue. More...
 
void Rename (std::string From, std::string To)
 Rename a file without modifying its timestamp. More...
 

Protected Attributes

std::vector< DiffInfoavailable_patches
 The patches that remain to be downloaded, including the patch being downloaded right now. More...
 
bool Debug
 If true, debugging output will be written to std::clog. More...
 
pkgAcquire::ItemDesc Desc
 A description of the item that is currently being downloaded. More...
 
std::string Description
 A description of the file being downloaded. More...
 
HashString ExpectedHash
 The HashSum of the package index file that is being reconstructed. More...
 
pkgAcquireOwner
 The acquire object with which this item is associated. More...
 
std::string RealURI
 The URI of the package index file that is being reconstructed. More...
 
std::string ServerSha1
 Stop applying patches when reaching that sha1. More...
 
enum pkgAcqIndexDiffs::DiffState State
 

Private Member Functions

void Finish (bool allDone=false)
 Handle tasks that must be performed after the item finishes downloading. More...
 
bool QueueNextDiff ()
 Queue up the next diff download. More...
 

Detailed Description

An item that is responsible for fetching all the patches {{{ that need to be applied to a given package index file.

After downloading and applying a single patch, this item will enqueue a new pkgAcqIndexDiffs to download and apply the remaining patches. If no patch can be found that applies to an intermediate file or if one of the patches cannot be downloaded, falls back to downloading the entire package index file using pkgAcqIndex.

See Also
pkgAcqDiffIndex, pkgAcqIndex

Member Enumeration Documentation

The current status of this patch.

Enumerator
StateFetchUnkown 

The diff is in an unknown state.

StateFetchDiff 

The diff is currently being fetched.

StateUnzipDiff 

The diff is currently being uncompressed.

StateApplyDiff 

The diff is currently being applied.

The current status of this item.

Enumerator
StatIdle 

The item is waiting to be downloaded.

StatFetching 

The item is currently being downloaded.

StatDone 

The item has been successfully downloaded.

StatError 

An error was encountered while downloading this item.

StatAuthError 

The item was downloaded but its authenticity could not be verified.

StatTransientNetworkError 

The item was could not be downloaded because of a transient network error (e.g.

network down)

Constructor & Destructor Documentation

pkgAcqIndexDiffs::pkgAcqIndexDiffs ( pkgAcquire Owner,
std::string  URI,
std::string  URIDesc,
std::string  ShortDesc,
HashString  ExpectedHash,
std::string  ServerSha1,
std::vector< DiffInfo diffs = std::vector< DiffInfo >() 
)

Create an index diff item.

After filling in its basic fields, this invokes Finish(true) if #diffs is empty, or QueueNextDiff() otherwise.

Parameters
OwnerThe pkgAcquire object that owns this item.
URIThe URI of the package index file being reconstructed.
URIDescA long description of this item.
ShortDescA brief description of this item.
ExpectedHashThe expected md5sum of the completely reconstructed package index file; the index file will be tested against this value when it is entirely reconstructed.
diffsThe remaining diffs from the index of diffs. They should be ordered so that each diff appears before any diff that depends on it.

Member Function Documentation

void WeakPointable::AddWeakPointer ( WeakPointable **  weakptr)
inlineinherited

Add a new weak pointer.

References WeakPointable::pointers.

virtual std::string pkgAcquire::Item::Custom600Headers ( )
inlinevirtualinherited

Custom headers to be sent to the fetch process.

Returns
a string containing RFC822-style headers that are to be inserted into the 600 URI Acquire message sent to the fetch subprocess. The headers are inserted after a newline-less line, so they should (if nonempty) have a leading newline and no trailing newline.

Reimplemented in pkgAcqFile, pkgAcqMetaClearSig, pkgAcqMetaIndex, pkgAcqMetaSig, pkgAcqIndexTrans, pkgAcqIndex, pkgAcqDiffIndex, and pkgAcqSubIndex.

void pkgAcquire::Item::Dequeue ( )
inlineprotectedinherited

Remove this item from its owner's queue.

References pkgAcquire::Dequeue(), and pkgAcquire::Item::Owner.

Here is the call graph for this function:

virtual std::string pkgAcqIndexDiffs::DescURI ( )
inlinevirtual

A "descriptive" URI-like string.

Returns
a URI that should be used to describe what is being fetched.

Implements pkgAcquire::Item.

References RealURI.

virtual void pkgAcqIndexDiffs::Done ( std::string  Message,
unsigned long long  Size,
std::string  Hash,
pkgAcquire::MethodConfig Cnf 
)
virtual

Invoked by the acquire worker when the object was fetched successfully.

Note that the object might not have been written to DestFile; check for the presence of an Alt-Filename entry in Message to find the file to which it was really written.

Done is often used to switch from one stage of the processing to the next (e.g. fetching, unpacking, copying). It is one branch of the continuation of the fetch process.

Parameters
MessageData from the acquire method. Use LookupTag() to parse it.
SizeThe size of the object that was fetched.
HashThe HashSum of the object that was fetched.
CnfThe method via which the object was fetched.
See Also
pkgAcqMethod

Reimplemented from pkgAcquire::Item.

virtual void pkgAcqIndexDiffs::Failed ( std::string  Message,
pkgAcquire::MethodConfig Cnf 
)
virtual

Called when the patch file failed to be downloaded.

This method will fall back to downloading the whole index file outright; its arguments are ignored.

Reimplemented from pkgAcquire::Item.

void pkgAcqIndexDiffs::Finish ( bool  allDone = false)
private

Handle tasks that must be performed after the item finishes downloading.

Dequeues the item and checks the resulting file's md5sum against ExpectedHash after the last patch was applied. There is no need to check the md5/sha1 after a "normal" patch because QueueNextDiff() will check the sha1 later.

Parameters
allDoneIf true, the file was entirely reconstructed, and its md5sum is verified.
virtual void pkgAcquire::Item::Finished ( )
inlinevirtualinherited

Invoked by the worker when the download is completely done.

Reimplemented in pkgAcqArchive.

pkgAcquire* pkgAcquire::Item::GetOwner ( )
inlineinherited
Returns
the acquire process with which this item is associated.

References pkgAcquire::Item::Owner.

virtual std::string pkgAcquire::Item::HashSum ( )
inlinevirtualinherited

HashSum.

Returns
the HashSum of this object, if applicable; otherwise, an empty string.

Reimplemented in pkgAcqFile, pkgAcqArchive, and pkgAcqIndex.

virtual bool pkgAcquire::Item::IsTrusted ( )
inlinevirtualinherited
Returns
true if this object is being fetched from a trusted source.

Reimplemented in pkgAcqArchive.

bool pkgAcqIndexDiffs::QueueNextDiff ( )
private

Queue up the next diff download.

Search for the next available diff that applies to the file that currently exists on disk, and enqueue it by calling QueueURI().

Returns
true if an applicable diff was found, false otherwise.
void pkgAcquire::Item::QueueURI ( ItemDesc Item)
inlineprotectedinherited

Insert this item into its owner's queue.

Parameters
ItemDescMetadata about this item (its URI and description).

References pkgAcquire::Enqueue(), and pkgAcquire::Item::Owner.

Here is the call graph for this function:

void WeakPointable::RemoveWeakPointer ( WeakPointable **  weakptr)
inlineinherited

Remove the weak pointer from the list of weak pointers.

References WeakPointable::pointers.

void pkgAcquire::Item::Rename ( std::string  From,
std::string  To 
)
protectedinherited

Rename a file without modifying its timestamp.

Many item methods call this as their final action.

Parameters
FromThe file to be renamed.
ToThe new name of #From. If #To exists it will be overwritten.
void pkgAcquire::Item::ReportMirrorFailure ( std::string  FailCode)
inherited

Report mirror problem.

This allows reporting mirror failures back to a centralized server. The apt-report-mirror-failure script is called for this

Parameters
FailCodeA short failure string that is send
virtual std::string pkgAcquire::Item::ShortDesc ( )
inlinevirtualinherited

Short item description.

Returns
a brief description of the object being fetched.

Reimplemented in pkgAcqArchive.

References pkgAcquire::Item::DescURI().

Here is the call graph for this function:

virtual void pkgAcquire::Item::Start ( std::string  Message,
unsigned long long  Size 
)
virtualinherited

Invoked when the worker starts to fetch this object.

Parameters
MessageRFC822-formatted data from the worker process. Use LookupTag() to parse it.
SizeThe size of the object being fetched.
See Also
pkgAcqMethod

Member Data Documentation

std::vector<DiffInfo> pkgAcqIndexDiffs::available_patches
protected

The patches that remain to be downloaded, including the patch being downloaded right now.

This list should be ordered so that each diff appears before any diff that depends on it.

Todo:
These are indexed by sha1sum; why not use some sort of dictionary instead of relying on ordering and stripping them off the front?
bool pkgAcquire::Item::Complete
inherited

If true, the entire object has been successfully fetched.

Subclasses should set this to true when appropriate.

bool pkgAcqIndexDiffs::Debug
protected

If true, debugging output will be written to std::clog.

pkgAcquire::ItemDesc pkgAcqIndexDiffs::Desc
protected

A description of the item that is currently being downloaded.

std::string pkgAcqIndexDiffs::Description
protected

A description of the file being downloaded.

std::string pkgAcquire::Item::DestFile
inherited

The name of the file into which the retrieved object will be written.

std::string pkgAcquire::Item::ErrorText
inherited

Contains a textual description of the error encountered if Status is StatError or StatAuthError.

HashString pkgAcqIndexDiffs::ExpectedHash
protected

The HashSum of the package index file that is being reconstructed.

unsigned long long pkgAcquire::Item::FileSize
inherited

The size of the object to fetch.

unsigned long pkgAcquire::Item::ID
inherited

A client-supplied unique identifier.

This field is initalized to 0; it is meant to be filled in by clients that wish to use it to uniquely identify items.

Todo:
it's unused in apt itself
bool pkgAcquire::Item::Local
inherited

If true, the URI of this object is "local".

The only effect of this field is to exclude the object from the download progress indicator's overall statistics.

const char* pkgAcquire::Item::Mode
inherited

If not NULL, contains the name of a subprocess that is operating on this object (for instance, "gzip" or "gpgv").

pkgAcquire* pkgAcquire::Item::Owner
protectedinherited

The acquire object with which this item is associated.

Referenced by pkgAcquire::Item::Dequeue(), pkgAcquire::Item::GetOwner(), and pkgAcquire::Item::QueueURI().

unsigned long long pkgAcquire::Item::PartialSize
inherited

How much of the object was already fetched.

unsigned int pkgAcquire::Item::QueueCounter
inherited

The number of fetch queues into which this item has been inserted.

There is one queue for each source from which an item could be downloaded.

See Also
pkgAcquire
std::string pkgAcqIndexDiffs::RealURI
protected

The URI of the package index file that is being reconstructed.

Referenced by DescURI().

std::string pkgAcqIndexDiffs::ServerSha1
protected

Stop applying patches when reaching that sha1.

enum pkgAcqIndexDiffs::DiffState pkgAcqIndexDiffs::State
protected
enum pkgAcquire::Item::ItemState pkgAcquire::Item::Status
inherited
std::string pkgAcquire::Item::UsedMirror
inherited

The documentation for this class was generated from the following file: