libzypp 17.32.5
|
Public Member Functions | |
multifetchworker (int no, multifetchrequest &request, const Url &url) | |
multifetchworker (const multifetchworker &)=delete | |
multifetchworker (multifetchworker &&)=delete | |
multifetchworker & | operator= (const multifetchworker &)=delete |
multifetchworker & | operator= (multifetchworker &&)=delete |
~multifetchworker () override | |
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) |
![]() | |
virtual | ~CurlMultiPartDataReceiver ()=default |
virtual void | notifyErrorCodeChanged () |
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 |
![]() | |
ZYPP_DECLARE_FLAGS (RequestOptions, RequestOption) | |
MediaCurl (const Url &url_r, const Pathname &attach_point_hint_r) | |
~MediaCurl () override | |
Url | clearQueryString (const Url &url) const |
void | attachTo (bool next=false) override |
Call concrete handler to attach the media. | |
void | releaseFrom (const std::string &ejectDev) override |
Call concrete handler to release the media. | |
void | getFile (const OnMediaLocation &file) const override |
Call concrete handler to provide file below attach point. | |
void | getDir (const Pathname &dirname, bool recurse_r) const override |
Call concrete handler to provide directory content (not recursive!) below attach point. | |
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. | |
void | getDirInfo (filesystem::DirContent &retlist, const Pathname &dirname, bool dots=true) const override |
Basically the same as getDirInfo above. | |
bool | getDoesFileExist (const Pathname &filename) const override |
Repeatedly calls doGetDoesFileExist() until it successfully returns, fails unexpectedly, or user cancels the operation. | |
virtual bool | doGetDoesFileExist (const Pathname &filename) const |
void | disconnectFrom () override |
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 |
bool | checkAttachPoint (const Pathname &apoint) const override |
Verify if the specified directory as attach point (root) as requires by the particular media handler implementation. | |
void | checkProtocol (const Url &url) const |
check the url is supported by the curl library | |
virtual void | setupEasy () |
initializes the curl easy handle with the data from the url | |
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. | |
void | doGetFileCopyFile (const OnMediaLocation &srcFile, const Pathname &dest, FILE *file, callback::SendReport< DownloadProgressReport > &report, RequestOptions options=OPTION_NONE) const |
![]() | |
MediaNetworkCommonHandler (const Url &url_r, const Pathname &attach_point_r, const Pathname &urlpath_below_attachpoint_r, const bool does_download_r) | |
TransferSettings & | settings () |
Url | getFileUrl (const Pathname &filename) const |
concatenate the attach url and the filename to a complete download url | |
![]() | |
bool | dependsOnParent (MediaAccessId parentId, bool exactIdMatch) |
Check if the current media handler depends on an another handler specified by media access id. | |
bool | dependsOnParent () |
void | resetParentId () |
Called in case, where the media manager takes over the destruction of the parent id (e.g. | |
Pathname | attachPoint () const |
Return the currently used attach point. | |
void | setAttachPoint (const Pathname &path, bool temp) |
Set a new attach point. | |
void | setAttachPoint (const AttachPointRef &ref) |
Set a (shared) attach point. | |
AttachPoint | attachPointHint () const |
Get the actual attach point hint. | |
void | attachPointHint (const Pathname &path, bool temp) |
Set the attach point hint as specified by the user. | |
Pathname | createAttachPoint () const |
Try to create a default / temporary attach point. | |
Pathname | createAttachPoint (const Pathname &attach_root) const |
Try to create a temporary attach point in specified root. | |
void | removeAttachPoint () |
Remove unused attach point. | |
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. | |
std::string | mediaSourceName () const |
Get the media source name or an empty string. | |
void | setMediaSource (const MediaSourceRef &ref) |
Set new media source reference. | |
AttachedMedia | findAttachedMedia (const MediaSourceRef &media) const |
Ask the media manager if specified media source is already attached. | |
AttachedMedia | attachedMedia () const |
Returns the attached media. | |
bool | isSharedMedia () const |
Returns a hint if the media is shared or not. | |
bool | checkAttached (bool matchMountFs) const |
Check actual mediaSource attachment against the current mount table of the system. | |
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. | |
void | forceRelaseAllMedia (const MediaSourceRef &ref, bool matchMountFs) |
MediaHandler (Url url_r, const Pathname &attach_point_r, 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. | |
virtual | ~MediaHandler () |
Contolling MediaAccess takes care, that attached media is released prior to deleting this. | |
bool | downloads () const |
Hint if files are downloaded or not. | |
std::string | protocol () const |
Protocol hint for MediaAccess. | |
Url | url () const |
Url used. | |
void | attach (bool next) |
Use concrete handler to attach the media. | |
virtual bool | isAttached () const |
True if media is attached. | |
Pathname | localRoot () const |
Return the local directory that corresponds to medias url, no matter if media isAttached or not. | |
Pathname | localPath (const Pathname &pathname) const |
Files provided will be available at 'localPath(filename)'. | |
void | disconnect () |
Use concrete handler to isconnect media. | |
void | release (const std::string &ejectDev="") |
Use concrete handler to release the media. | |
void | provideFile (const OnMediaLocation &file) const |
Use concrete handler to provide file denoted by path below 'localRoot'. | |
void | provideFileCopy (const OnMediaLocation &srcFile, const 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. | |
void | provideDir (const Pathname &dirname) const |
Use concrete handler to provide directory denoted by path below 'localRoot' (not recursive!). | |
void | provideDirTree (const Pathname &dirname) const |
Use concrete handler to provide directory tree denoted by path below 'localRoot' (recursive!!). | |
void | releaseFile (const Pathname &filename) const |
Remove filename below localRoot IFF handler downloads files to the local filesystem. | |
void | releaseDir (const Pathname &dirname) const |
Remove directory tree below localRoot IFF handler downloads files to the local filesystem. | |
void | releasePath (const Pathname &pathname) const |
Remove pathname below localRoot IFF handler downloads files to the local filesystem. | |
void | dirInfo (std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const |
Return content of directory on media via retlist. | |
void | dirInfo (filesystem::DirContent &retlist, const Pathname &dirname, bool dots=true) const |
Basically the same as dirInfo above. | |
bool | doesFileExist (const Pathname &filename) const |
check if a file exists | |
virtual bool | hasMoreDevices () |
Check if the media has one more device available for attach(true). | |
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. | |
virtual void | precacheFiles (const std::vector< OnMediaLocation > &files) |
Tries to fetch the given files and precaches them. | |
virtual void | forceEject (const std::string &device) |
Call concrete handler to physically eject the media (i.e. | |
void | getDirectoryYast (std::list< std::string > &retlist, const Pathname &dirname, bool dots=true) const |
Retrieve and if available scan dirname/directory.yast. | |
void | getDirectoryYast (filesystem::DirContent &retlist, const Pathname &dirname, bool dots=true) const |
Retrieve and if available scan dirname/directory.yast. | |
Private Attributes | |
multifetchrequest * | _request = nullptr |
int | _pass = 0 |
std::string | _urlbuf |
pid_t | _pid = 0 |
int | _dnspipe = -1 |
![]() | |
CURL * | _curl |
char | _curlError [CURL_ERROR_SIZE] |
curl_slist * | _customHeaders |
![]() | |
TransferSettings | _settings |
Url | _redirTarget |
![]() | |
const Url | _url |
Url to handle. | |
MediaAccessId | _parentId |
Access Id of media handler we depend on. | |
Friends | |
class | multifetchrequest |
Additional Inherited Members | |
![]() | |
enum | RequestOption { OPTION_NONE = 0x0 , OPTION_RANGE = 0x1 , OPTION_HEAD = 0x02 , OPTION_NO_IFMODSINCE = 0x04 , OPTION_NO_REPORT_START = 0x08 } |
![]() | |
using | Ptr = shared_ptr<MediaHandler> |
using | constPtr = shared_ptr<const MediaHandler> |
![]() | |
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. | |
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. | |
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. | |
![]() | |
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. | |
![]() | |
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. | |
Definition at line 142 of file MediaMultiCurl.cc.
zypp::media::multifetchworker::multifetchworker | ( | int | no, |
multifetchrequest & | request, | ||
const Url & | url ) |
Definition at line 442 of file MediaMultiCurl.cc.
|
delete |
|
delete |
|
override |
Definition at line 505 of file MediaMultiCurl.cc.
|
delete |
|
delete |
void zypp::media::multifetchworker::nextjob | ( | ) |
Fetches the next job from the parent request, then calls runjob to execute it
Definition at line 875 of file MediaMultiCurl.cc.
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 890 of file MediaMultiCurl.cc.
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 926 of file MediaMultiCurl.cc.
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 685 of file MediaMultiCurl.cc.
void zypp::media::multifetchworker::disableCompetition | ( | ) |
Stop all competing workers and set them to WORKER_DISCARD
Definition at line 859 of file MediaMultiCurl.cc.
void zypp::media::multifetchworker::checkdns | ( | ) |
Starts the dns check
Definition at line 553 of file MediaMultiCurl.cc.
Definition at line 631 of file MediaMultiCurl.cc.
Definition at line 645 of file MediaMultiCurl.cc.
|
private |
Definition at line 951 of file MediaMultiCurl.cc.
|
private |
Definition at line 755 of file MediaMultiCurl.cc.
|
private |
Definition at line 467 of file MediaMultiCurl.cc.
|
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 729 of file MediaMultiCurl.cc.
|
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 333 of file MediaMultiCurl.cc.
|
overrideprivatevirtual |
Called for all received header data, after it was processed by the CurlMultiPartHandler.
Implements zyppng::CurlMultiPartDataReceiver.
Definition at line 420 of file MediaMultiCurl.cc.
|
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.
range | The index of the range that is to be started |
cancelReason | Set to indicate why the request was cancelled. |
Reimplemented from zyppng::CurlMultiPartDataReceiver.
Definition at line 372 of file MediaMultiCurl.cc.
|
overrideprivatevirtual |
Called everytime a range was finished, returning false from the function will cancel the request.
range | The index of the range that was finished |
validated | Indicates of the range data could be validated against its given checksum |
cancelReason | Set to indicate why the request was cancelled. |
Reimplemented from zyppng::CurlMultiPartDataReceiver.
Definition at line 388 of file MediaMultiCurl.cc.
|
friend |
Definition at line 143 of file MediaMultiCurl.cc.
const int zypp::media::multifetchworker::_workerno |
Definition at line 190 of file MediaMultiCurl.cc.
MultiFetchWorkerState zypp::media::multifetchworker::_state = WORKER_STARTING |
Definition at line 192 of file MediaMultiCurl.cc.
Definition at line 193 of file MediaMultiCurl.cc.
std::vector<MultiByteHandler::Range> zypp::media::multifetchworker::_blocks |
Definition at line 195 of file MediaMultiCurl.cc.
std::vector<off_t> zypp::media::multifetchworker::_rangeToStripeBlock |
Definition at line 196 of file MediaMultiCurl.cc.
MultiByteHandler::ProtocolMode zypp::media::multifetchworker::_protocolMode = MultiByteHandler::ProtocolMode::Basic |
Definition at line 198 of file MediaMultiCurl.cc.
std::unique_ptr<MultiByteHandler> zypp::media::multifetchworker::_multiByteHandler |
Definition at line 199 of file MediaMultiCurl.cc.
off_t zypp::media::multifetchworker::_stripe = 0 |
Definition at line 201 of file MediaMultiCurl.cc.
size_t zypp::media::multifetchworker::_datasize = 0 |
Definition at line 202 of file MediaMultiCurl.cc.
double zypp::media::multifetchworker::_starttime = 0 |
Definition at line 204 of file MediaMultiCurl.cc.
size_t zypp::media::multifetchworker::_datareceived = 0 |
Definition at line 205 of file MediaMultiCurl.cc.
off_t zypp::media::multifetchworker::_received = 0 |
Definition at line 206 of file MediaMultiCurl.cc.
double zypp::media::multifetchworker::_avgspeed = 0 |
Definition at line 208 of file MediaMultiCurl.cc.
double zypp::media::multifetchworker::_maxspeed = 0 |
Definition at line 209 of file MediaMultiCurl.cc.
double zypp::media::multifetchworker::_sleepuntil = 0 |
Definition at line 211 of file MediaMultiCurl.cc.
|
private |
Definition at line 224 of file MediaMultiCurl.cc.
|
private |
Definition at line 225 of file MediaMultiCurl.cc.
|
private |
Definition at line 226 of file MediaMultiCurl.cc.
|
private |
Definition at line 228 of file MediaMultiCurl.cc.
|
private |
Definition at line 229 of file MediaMultiCurl.cc.