libzypp  17.31.31
zypp::media::multifetchworker Class Reference
Inheritance diagram for zypp::media::multifetchworker:

Public Member Functions

 multifetchworker (int no, multifetchrequest &request, const Url &url)
 
 ~multifetchworker ()
 
void nextjob ()
 
void runjob ()
 
bool continueJob ()
 
bool recheckChecksum (off_t blockIdx)
 
void disableCompetition ()
 
void checkdns ()
 
void adddnsfd (std::vector< GPollFD > &waitFds)
 
void dnsevent (const std::vector< GPollFD > &waitFds)
 
- Public Member Functions inherited from zyppng::CurlMultiPartDataReceiver
virtual ~CurlMultiPartDataReceiver ()=default
 

Public Attributes

const int _workerno
 
MultiFetchWorkerState _state = WORKER_STARTING
 
bool _competing = false
 
std::vector< MultiByteHandler::Range_blocks
 
std::vector< off_t > _rangeToStripeBlock
 
MultiByteHandler::ProtocolMode _protocolMode = MultiByteHandler::ProtocolMode::Basic
 
std::unique_ptr< MultiByteHandler_multiByteHandler
 
off_t _stripe = 0
 
size_t _datasize = 0
 
double _starttime = 0
 
size_t _datareceived = 0
 
off_t _received = 0
 
double _avgspeed = 0
 
double _maxspeed = 0
 
double _sleepuntil = 0
 

Private Member Functions

void run ()
 
void stealjob ()
 
bool setupHandle ()
 
MultiByteHandler::Range rangeFromBlock (off_t blockNo) const
 
size_t writefunction (char *ptr, std::optional< off_t > offset, size_t bytes) override
 
size_t headerfunction (char *ptr, size_t bytes) override
 
bool beginRange (off_t range, std::string &cancelReason) override
 
bool finishedRange (off_t range, bool validated, std::string &cancelReason) override
 
- Private Member Functions inherited from zypp::media::MediaCurl
 ZYPP_DECLARE_FLAGS (RequestOptions, RequestOption)
 
 MediaCurl (const Url &url_r, const Pathname &attach_point_hint_r)
 
virtual ~MediaCurl () override
 
Url clearQueryString (const Url &url) const
 
virtual void attachTo (bool next=false) override
 Call concrete handler to attach the media. More...
 
virtual void releaseFrom (const std::string &ejectDev) override
 Call concrete handler to release the media. More...
 
virtual void getFile (const OnMediaLocation &file) const override
 Call concrete handler to provide file below attach point. More...
 
virtual void getDir (const Pathname &dirname, bool recurse_r) const override
 Call concrete handler to provide directory content (not recursive!) below attach point. More...
 
virtual void getDirInfo (std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const override
 Call concrete handler to provide a content list of directory on media via retlist. More...
 
virtual void getDirInfo (filesystem::DirContent &retlist, const Pathname &dirname, bool dots=true) const override
 Basically the same as getDirInfo above. More...
 
virtual bool getDoesFileExist (const Pathname &filename) const override
 Repeatedly calls doGetDoesFileExist() until it successfully returns, fails unexpectedly, or user cancels the operation. More...
 
virtual bool doGetDoesFileExist (const Pathname &filename) const
 
virtual void disconnectFrom () override
 
virtual void getFileCopy (const OnMediaLocation &srcFile, const Pathname &targetFilename) const override
 
virtual void doGetFileCopy (const OnMediaLocation &srcFile, const Pathname &targetFilename, callback::SendReport< DownloadProgressReport > &_report, RequestOptions options=OPTION_NONE) const
 
virtual bool checkAttachPoint (const Pathname &apoint) const override
 Verify if the specified directory as attach point (root) as requires by the particular media handler implementation. More...
 
void checkProtocol (const Url &url) const
 check the url is supported by the curl library More...
 
virtual void setupEasy ()
 initializes the curl easy handle with the data from the url More...
 
void evaluateCurlCode (const zypp::Pathname &filename, CURLcode code, bool timeout) const
 Evaluates a curl return code and throws the right MediaException filename Filename being downloaded code Code curl returnes timeout Whether we reached timeout, which we need to differentiate in case the codes aborted-by-callback or timeout are returned by curl Otherwise we can't differentiate abort from timeout. More...
 
void doGetFileCopyFile (const OnMediaLocation &srcFile, const Pathname &dest, FILE *file, callback::SendReport< DownloadProgressReport > &report, RequestOptions options=OPTION_NONE) const
 
- Private Member Functions inherited from zypp::media::MediaNetworkCommonHandler
 MediaNetworkCommonHandler (const Url &url_r, const Pathname &attach_point_r, const Pathname &urlpath_below_attachpoint_r, const bool does_download_r)
 
TransferSettingssettings ()
 
Url getFileUrl (const Pathname &filename) const
 concatenate the attach url and the filename to a complete download url More...
 
- Private Member Functions inherited from zypp::media::MediaHandler
bool dependsOnParent (MediaAccessId parentId, bool exactIdMatch)
 Check if the current media handler depends on an another handler specified by media access id. More...
 
bool dependsOnParent ()
 
void resetParentId ()
 Called in case, where the media manager takes over the destruction of the parent id (e.g. More...
 
Pathname attachPoint () const
 Return the currently used attach point. More...
 
void setAttachPoint (const Pathname &path, bool temp)
 Set a new attach point. More...
 
void setAttachPoint (const AttachPointRef &ref)
 Set a (shared) attach point. More...
 
AttachPoint attachPointHint () const
 Get the actual attach point hint. More...
 
void attachPointHint (const Pathname &path, bool temp)
 Set the attach point hint as specified by the user. More...
 
Pathname createAttachPoint () const
 Try to create a default / temporary attach point. More...
 
Pathname createAttachPoint (const Pathname &attach_root) const
 Try to create a temporary attach point in specified root. More...
 
void removeAttachPoint ()
 Remove unused attach point. More...
 
bool isUseableAttachPoint (const Pathname &path, bool mtab=true) const
 Ask media manager, if the specified path is already used as attach point or if there are another attach points bellow of it. More...
 
std::string mediaSourceName () const
 Get the media source name or an empty string. More...
 
void setMediaSource (const MediaSourceRef &ref)
 Set new media source reference. More...
 
AttachedMedia findAttachedMedia (const MediaSourceRef &media) const
 Ask the media manager if specified media source is already attached. More...
 
AttachedMedia attachedMedia () const
 Returns the attached media. More...
 
bool isSharedMedia () const
 Returns a hint if the media is shared or not. More...
 
bool checkAttached (bool matchMountFs) const
 Check actual mediaSource attachment against the current mount table of the system. More...
 
void forceRelaseAllMedia (bool matchMountFs)
 Call to this function will try to release all media matching the currenlty attached media source, that it is able to find in the mount table. More...
 
void forceRelaseAllMedia (const MediaSourceRef &ref, bool matchMountFs)
 
 MediaHandler (const Url &url_r, const Pathname &attach_point_r, const Pathname &urlpath_below_attachpoint_r, const bool does_download_r)
 If the concrete media handler provides a nonempty attach_point, it must be an existing directory. More...
 
virtual ~MediaHandler ()
 Contolling MediaAccess takes care, that attached media is released prior to deleting this. More...
 
bool downloads () const
 Hint if files are downloaded or not. More...
 
std::string protocol () const
 Protocol hint for MediaAccess. More...
 
Url url () const
 Url used. More...
 
void attach (bool next)
 Use concrete handler to attach the media. More...
 
virtual bool isAttached () const
 True if media is attached. More...
 
Pathname localRoot () const
 Return the local directory that corresponds to medias url, no matter if media isAttached or not. More...
 
Pathname localPath (const Pathname &pathname) const
 Files provided will be available at 'localPath(filename)'. More...
 
void disconnect ()
 Use concrete handler to isconnect media. More...
 
void release (const std::string &ejectDev="")
 Use concrete handler to release the media. More...
 
void provideFile (const OnMediaLocation &file) const
 Use concrete handler to provide file denoted by path below 'localRoot'. More...
 
void provideFileCopy (const OnMediaLocation &srcFile, Pathname targetFilename) const
 Call concrete handler to provide a copy of a file under a different place in the file system (usually not under attach point) as a copy. More...
 
void provideDir (Pathname dirname) const
 Use concrete handler to provide directory denoted by path below 'localRoot' (not recursive!). More...
 
void provideDirTree (Pathname dirname) const
 Use concrete handler to provide directory tree denoted by path below 'localRoot' (recursive!!). More...
 
void releaseFile (const Pathname &filename) const
 Remove filename below localRoot IFF handler downloads files to the local filesystem. More...
 
void releaseDir (const Pathname &dirname) const
 Remove directory tree below localRoot IFF handler downloads files to the local filesystem. More...
 
void releasePath (Pathname pathname) const
 Remove pathname below localRoot IFF handler downloads files to the local filesystem. More...
 
void dirInfo (std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const
 Return content of directory on media via retlist. More...
 
void dirInfo (filesystem::DirContent &retlist, const Pathname &dirname, bool dots=true) const
 Basically the same as dirInfo above. More...
 
bool doesFileExist (const Pathname &filename) const
 check if a file exists More...
 
virtual bool hasMoreDevices ()
 Check if the media has one more device available for attach(true). More...
 
virtual void getDetectedDevices (std::vector< std::string > &devices, unsigned int &index) const
 Fill in a vector of detected ejectable devices and the index of the currently attached device within the vector. More...
 
virtual void precacheFiles (const std::vector< OnMediaLocation > &files)
 Tries to fetch the given files and precaches them. More...
 
virtual void forceEject (const std::string &device)
 Call concrete handler to physically eject the media (i.e. More...
 
void getDirectoryYast (std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const
 Retrieve and if available scan dirname/directory.yast. More...
 
void getDirectoryYast (filesystem::DirContent &retlist, const Pathname &dirname, bool dots=true) const
 Retrieve and if available scan dirname/directory.yast. More...
 

Private Attributes

multifetchrequest_request = nullptr
 
int _pass = 0
 
std::string _urlbuf
 
pid_t _pid = 0
 
int _dnspipe = -1
 
- Private Attributes inherited from zypp::media::MediaCurl
CURL * _curl
 
char _curlError [CURL_ERROR_SIZE]
 
curl_slist * _customHeaders
 
- Private Attributes inherited from zypp::media::MediaNetworkCommonHandler
TransferSettings _settings
 
Url _redirTarget
 
- Private Attributes inherited from zypp::media::MediaHandler
const Url _url
 Url to handle. More...
 
MediaAccessId _parentId
 Access Id of media handler we depend on. More...
 

Friends

class multifetchrequest
 

Additional Inherited Members

- Private Types inherited from zypp::media::MediaCurl
enum  RequestOption {
  OPTION_NONE = 0x0, OPTION_RANGE = 0x1, OPTION_HEAD = 0x02, OPTION_NO_IFMODSINCE = 0x04,
  OPTION_NO_REPORT_START = 0x08
}
 
- Private Types inherited from zypp::media::MediaHandler
typedef shared_ptr< MediaHandlerPtr
 
typedef shared_ptr< const MediaHandlerconstPtr
 
- Static Private Member Functions inherited from zypp::media::MediaCurl
static void setCookieFile (const Pathname &)
 
static int aliveCallback (void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow)
 Callback sending just an alive trigger to the UI, without stats (e.g. More...
 
static int progressCallback (void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow)
 Callback reporting download progress. More...
 
static CURL * progressCallback_getcurl (void *clientp)
 
static void resetExpectedFileSize (void *clientp, const ByteCount &expectedFileSize)
 MediaMultiCurl needs to reset the expected filesize in case a metalink file is downloaded otherwise this function should not be called. More...
 
- Static Private Member Functions inherited from zypp::media::MediaNetworkCommonHandler
static zypp::Url findGeoIPRedirect (const zypp::Url &url)
 Rewrites the baseURL to the geoIP target if one is found in the metadata cache, otherwise simply returns the url again. More...
 
- Static Private Member Functions inherited from zypp::media::MediaHandler
static bool setAttachPrefix (const Pathname &attach_prefix)
 
static std::string getRealPath (const std::string &path)
 
static Pathname getRealPath (const Pathname &path)
 
static bool checkAttachPoint (const Pathname &apoint, bool empty_dir, bool writeable)
 Verify if the specified directory as attach point (root) using requested checks. More...
 

Detailed Description

Definition at line 141 of file MediaMultiCurl.cc.

Constructor & Destructor Documentation

◆ multifetchworker()

zypp::media::multifetchworker::multifetchworker ( int  no,
multifetchrequest request,
const Url url 
)

Definition at line 416 of file MediaMultiCurl.cc.

◆ ~multifetchworker()

zypp::media::multifetchworker::~multifetchworker ( )

Definition at line 479 of file MediaMultiCurl.cc.

Member Function Documentation

◆ nextjob()

void zypp::media::multifetchworker::nextjob ( )

Fetches the next job from the parent request, then calls runjob to execute it

Definition at line 849 of file MediaMultiCurl.cc.

◆ runjob()

void zypp::media::multifetchworker::runjob ( )

Fetches all jobs from the currently claimed stripe or calls nextjob() if the current stripe has all blocks marked as FINALIZED

Definition at line 864 of file MediaMultiCurl.cc.

◆ continueJob()

bool zypp::media::multifetchworker::continueJob ( )

Continues a running job, only called by the dispatcher if the multibyte handler indicates it has more work to trigger fetching the next range batch

Definition at line 900 of file MediaMultiCurl.cc.

◆ recheckChecksum()

bool zypp::media::multifetchworker::recheckChecksum ( off_t  blockIdx)

Rechecks the checksum of the given block at blockIdx. The index is relative to the workers blocklist

Definition at line 659 of file MediaMultiCurl.cc.

◆ disableCompetition()

void zypp::media::multifetchworker::disableCompetition ( )

Stop all competing workers and set them to WORKER_DISCARD

Definition at line 833 of file MediaMultiCurl.cc.

◆ checkdns()

void zypp::media::multifetchworker::checkdns ( )

Starts the dns check

Definition at line 527 of file MediaMultiCurl.cc.

◆ adddnsfd()

void zypp::media::multifetchworker::adddnsfd ( std::vector< GPollFD > &  waitFds)

Definition at line 605 of file MediaMultiCurl.cc.

◆ dnsevent()

void zypp::media::multifetchworker::dnsevent ( const std::vector< GPollFD > &  waitFds)

Definition at line 619 of file MediaMultiCurl.cc.

◆ run()

void zypp::media::multifetchworker::run ( )
private

Definition at line 925 of file MediaMultiCurl.cc.

◆ stealjob()

void zypp::media::multifetchworker::stealjob ( )
private

Definition at line 729 of file MediaMultiCurl.cc.

◆ setupHandle()

bool zypp::media::multifetchworker::setupHandle ( )
private

Definition at line 441 of file MediaMultiCurl.cc.

◆ rangeFromBlock()

zyppng::CurlMultiPartHandler::Range zypp::media::multifetchworker::rangeFromBlock ( off_t  blkNo) const
private

Calculates the range information for the given blkNo ( actual block index in the request blocklist, NOT the stripe or worker index )

Definition at line 703 of file MediaMultiCurl.cc.

◆ writefunction()

size_t zypp::media::multifetchworker::writefunction ( char *  ptr,
std::optional< off_t >  offset,
size_t  bytes 
)
overrideprivatevirtual

Data callback func, this is called whenever there is actual data to be written to the file. If offset is set, usually when starting to write a new range, it means to continue to write on the current file pointer position, otherwise seek to the given one.

Implements zyppng::CurlMultiPartDataReceiver.

Definition at line 307 of file MediaMultiCurl.cc.

◆ headerfunction()

size_t zypp::media::multifetchworker::headerfunction ( char *  ptr,
size_t  bytes 
)
overrideprivatevirtual

Called for all received header data, after it was processed by the CurlMultiPartHandler.

Implements zyppng::CurlMultiPartDataReceiver.

Definition at line 394 of file MediaMultiCurl.cc.

◆ beginRange()

bool zypp::media::multifetchworker::beginRange ( off_t  range,
std::string &  cancelReason 
)
overrideprivatevirtual

Called everytime a new range is about to be written, returning false from the function will immediately cancel the request and not write anything to the file.

Parameters
rangeThe index of the range that is to be started
cancelReasonSet to indicate why the request was cancelled.

Reimplemented from zyppng::CurlMultiPartDataReceiver.

Definition at line 346 of file MediaMultiCurl.cc.

◆ finishedRange()

bool zypp::media::multifetchworker::finishedRange ( off_t  range,
bool  validated,
std::string &  cancelReason 
)
overrideprivatevirtual

Called everytime a range was finished, returning false from the function will cancel the request.

Note
Normally CurlMultiPartHandler will try to finish all ranges before failing even if one of them can not be validated. If the code should cancel early do it via returning false here.
Parameters
rangeThe index of the range that was finished
validatedIndicates of the range data could be validated against its given checksum
cancelReasonSet to indicate why the request was cancelled.

Reimplemented from zyppng::CurlMultiPartDataReceiver.

Definition at line 362 of file MediaMultiCurl.cc.

Friends And Related Function Documentation

◆ multifetchrequest

friend class multifetchrequest
friend

Definition at line 142 of file MediaMultiCurl.cc.

Member Data Documentation

◆ _workerno

const int zypp::media::multifetchworker::_workerno

Definition at line 185 of file MediaMultiCurl.cc.

◆ _state

MultiFetchWorkerState zypp::media::multifetchworker::_state = WORKER_STARTING

Definition at line 187 of file MediaMultiCurl.cc.

◆ _competing

bool zypp::media::multifetchworker::_competing = false

Definition at line 188 of file MediaMultiCurl.cc.

◆ _blocks

std::vector<MultiByteHandler::Range> zypp::media::multifetchworker::_blocks

Definition at line 190 of file MediaMultiCurl.cc.

◆ _rangeToStripeBlock

std::vector<off_t> zypp::media::multifetchworker::_rangeToStripeBlock

Definition at line 191 of file MediaMultiCurl.cc.

◆ _protocolMode

MultiByteHandler::ProtocolMode zypp::media::multifetchworker::_protocolMode = MultiByteHandler::ProtocolMode::Basic

Definition at line 193 of file MediaMultiCurl.cc.

◆ _multiByteHandler

std::unique_ptr<MultiByteHandler> zypp::media::multifetchworker::_multiByteHandler

Definition at line 194 of file MediaMultiCurl.cc.

◆ _stripe

off_t zypp::media::multifetchworker::_stripe = 0

Definition at line 196 of file MediaMultiCurl.cc.

◆ _datasize

size_t zypp::media::multifetchworker::_datasize = 0

Definition at line 197 of file MediaMultiCurl.cc.

◆ _starttime

double zypp::media::multifetchworker::_starttime = 0

Definition at line 199 of file MediaMultiCurl.cc.

◆ _datareceived

size_t zypp::media::multifetchworker::_datareceived = 0

Definition at line 200 of file MediaMultiCurl.cc.

◆ _received

off_t zypp::media::multifetchworker::_received = 0

Definition at line 201 of file MediaMultiCurl.cc.

◆ _avgspeed

double zypp::media::multifetchworker::_avgspeed = 0

Definition at line 203 of file MediaMultiCurl.cc.

◆ _maxspeed

double zypp::media::multifetchworker::_maxspeed = 0

Definition at line 204 of file MediaMultiCurl.cc.

◆ _sleepuntil

double zypp::media::multifetchworker::_sleepuntil = 0

Definition at line 206 of file MediaMultiCurl.cc.

◆ _request

multifetchrequest* zypp::media::multifetchworker::_request = nullptr
private

Definition at line 219 of file MediaMultiCurl.cc.

◆ _pass

int zypp::media::multifetchworker::_pass = 0
private

Definition at line 220 of file MediaMultiCurl.cc.

◆ _urlbuf

std::string zypp::media::multifetchworker::_urlbuf
private

Definition at line 221 of file MediaMultiCurl.cc.

◆ _pid

pid_t zypp::media::multifetchworker::_pid = 0
private

Definition at line 223 of file MediaMultiCurl.cc.

◆ _dnspipe

int zypp::media::multifetchworker::_dnspipe = -1
private

Definition at line 224 of file MediaMultiCurl.cc.


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