14#include <zypp-curl/TransferSettings>
16#include <zypp-media/MediaException>
39 MIL <<
"Authentication failed for " << req->url() <<
" trying to recover." << std::endl;
42 const auto &applyCredToSettings = [&ts](
const AuthData_Ptr& auth,
const std::string &authHint ) {
48 if ( nwCred->authType() == CURLAUTH_NONE )
49 nwCred->setAuthType( authHint );
52 if ( nwCred->authType() != CURLAUTH_NONE ) {
62 - zypp::url::ViewOption::WITH_USERNAME
63 - zypp::url::ViewOption::WITH_PASSWORD
64 - zypp::url::ViewOption::WITH_QUERY_STR;
69 if ( cachedCred && cachedCred->lastDatabaseUpdate() > req->_authTimestamp ) {
70 MIL <<
"Found a credential match in the cache!" << std::endl;
71 applyCredToSettings( cachedCred,
"" );
77 credFromUser->setUrl( req->url() );
78 credFromUser->setLastDatabaseUpdate ( req->_authTimestamp );
81 std::string authHint = err.
extraInfoValue(
"authHint", std::string());
84 if ( credFromUser->valid() ) {
87 applyCredToSettings( credFromUser, authHint );
96#if ENABLE_ZCHUNK_COMPRESSION
97 bool DownloadPrivateBase::hasZckInfo()
const
156 auto buildExtraInfo = [
this, &
url](){
157 std::map<std::string, boost::any> extraInfo;
158 extraInfo.insert( {
"requestUrl",
url } );
159 extraInfo.insert( {
"filepath",
_spec.targetPath() } );
166 if (
_spec.settings().proxy().empty() )
182 if ( cred && cred->valid() ) {
214 const auto &s = d_func()->currentState();
236 if (! lReq.isError() ) {
240 return (
zypp::str::Format(
"%1%(%2%)") % lReq.toString() % lReq.nativeErrorString() );
252 if ( !d->_requestDispatcher )
258 d->visitState( [](
auto &s ){
260 if constexpr ( std::is_same_v<T, DlMetalinkState>
261#if ENABLE_ZCHUNK_COMPRESSION
262 || std::is_same_v<T, DLZckState>
278 d_func()->_stopOnMetalink = set;
283 return d_func()->_stoppedOnMetalink;
288 return d_func()->_spec;
293 return d_func()->_spec;
298 return d_func()->_lastTriedAuthTime;
303 return *d_func()->_requestDispatcher;
308 return d_func()->_sigStarted;
313 return d_func()->DownloadPrivateBase::_sigStateChanged;
318 return d_func()->_sigAlive;
323 return d_func()->_sigProgress;
328 return d_func()->DownloadPrivateBase::_sigFinished;
333 return d_func()->_sigAuthRequired;
356 return dl.get() == &download;
383 while ( d->_runningDownloads.size() ) {
384 d->_runningDownloads.back()->cancel();
385 d->_runningDownloads.pop_back();
392 std::shared_ptr<Download> dl (
new Download ( *
this, d->_requestDispatcher, d->_mirrors,
DownloadSpec(spec) ) );
394 d->_runningDownloads.push_back( dl );
396 d->_requestDispatcher->run();
403 return d_func()->_requestDispatcher;
408 return d_func()->_sigStarted;
413 return d_func()->_sigFinished;
418 return d_func()->_queueEmpty;
Base class for Exception.
std::string asString() const
Error message provided by dumpOn as string.
static auto connectFunc(typename internal::MemberFunction< SenderFunc >::ClassType &s, SenderFunc &&sFun, ReceiverFunc &&rFunc, const Tracker &...trackers)
time_t _lastTriedAuthTime
std::shared_ptr< MirrorControl > _mirrorControl
NetworkRequestError safeFillSettingsFromURL(const Url &url, TransferSettings &set)
Signal< void(Download &req, Download::State state)> _sigStateChanged
~DownloadPrivateBase() override
zypp::media::CredentialManager::CredentialSet _credCache
bool handleRequestAuthError(const std::shared_ptr< Request > &req, const zyppng::NetworkRequestError &err)
Signal< void(zyppng::Download &req, zyppng::NetworkAuthData &auth, const std::string &availAuth)> _sigAuthRequired
zypp::TriBool _specHasZckInfo
std::shared_ptr< NetworkRequestDispatcher > _requestDispatcher
DownloadPrivateBase(Downloader &parent, std::shared_ptr< NetworkRequestDispatcher > requestDispatcher, std::shared_ptr< MirrorControl > mirrors, DownloadSpec &&spec, Download &p)
Signal< void(Download &req)> _sigFinished
DownloadPrivate(Downloader &parent, std::shared_ptr< NetworkRequestDispatcher > requestDispatcher, std::shared_ptr< MirrorControl > mirrors, DownloadSpec &&spec, Download &p)
zypp::ByteCount headerSize() const
zypp::filesystem::Pathname deltaFile() const
std::string errorString() const
void setStopOnMetalink(const bool set=true)
NetworkRequestDispatcher & dispatcher() const
SignalProxy< void(Download &req)> sigFinished()
SignalProxy< void(Download &req)> sigStarted()
SignalProxy< void(Download &req, State state)> sigStateChanged()
NetworkRequestError lastRequestError() const
SignalProxy< void(Download &req, off_t dlnow)> sigAlive()
uint64_t lastAuthTimestamp() const
SignalProxy< void(Download &req, NetworkAuthData &auth, const std::string &availAuth)> sigAuthRequired()
Download(Downloader &parent, std::shared_ptr< NetworkRequestDispatcher > requestDispatcher, std::shared_ptr< MirrorControl > mirrors, DownloadSpec &&spec)
SignalProxy< void(Download &req, off_t dltotal, off_t dlnow)> sigProgress()
bool stoppedOnMetalink() const
std::shared_ptr< MirrorControl > _mirrors
Signal< void(Downloader &parent, Download &download)> _sigStarted
std::vector< std::shared_ptr< Download > > _runningDownloads
void onDownloadFinished(Download &download)
Signal< void(Downloader &parent)> _queueEmpty
std::shared_ptr< NetworkRequestDispatcher > _requestDispatcher
Signal< void(Downloader &parent, Download &download)> _sigFinished
void onDownloadStarted(Download &download)
DownloaderPrivate(std::shared_ptr< MirrorControl > mc, Downloader &p)
SignalProxy< void(Downloader &parent)> queueEmpty()
std::shared_ptr< Download > downloadFile(const DownloadSpec &spec)
SignalProxy< void(Downloader &parent, Download &download)> sigStarted()
std::shared_ptr< NetworkRequestDispatcher > requestDispatcher() const
SignalProxy< void(Downloader &parent, Download &download)> sigFinished()
static zyppng::NetworkRequestError customError(NetworkRequestError::Type t, std::string &&errorMsg="", std::map< std::string, boost::any > &&extraInfo={})
The NetworkRequestError class Represents a error that occured in.
T extraInfoValue(const std::string &key, T &&defaultVal=T()) const
Type type() const
type Returns the type of the error
bool isError() const
isError Will return true if this is a actual error
zyppng::Statemachine< Derived, Download::State, Transition< InitialState, &InitialState::sigTransitionToDetectMetalinkState, DetectMetalinkState >, Transition< InitialState, &InitialState::sigTransitionToDlMetaLinkInfoState, DlMetaLinkInfoState >, Transition< InitialState, &InitialState::sigTransitionToDlNormalFileState, DlNormalFileState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlMetaLinkInfoState, &DetectMetalinkState::toMetalinkGuard, &DetectMetalinkState::toDlMetaLinkInfoState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlNormalFileState, &DetectMetalinkState::toSimpleDownloadGuard >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFinished, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigGotMetadata, PrepareMultiState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToPrepareMulti >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFailed, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< PrepareMultiState, &PrepareMultiState::sigFinished, DlMetalinkState, &PrepareMultiState::toMetalinkDownloadGuard, &PrepareMultiState::transitionToMetalinkDl >, Transition< PrepareMultiState, &PrepareMultiState::sigFallback, DlNormalFileState, DefaultStateCondition, &PrepareMultiState::fallbackToNormalTransition >, Transition< PrepareMultiState, &PrepareMultiState::sigFailed, DlNormalFileState >, Transition< DlMetalinkState, &DlMetalinkState::sigFinished, FinishedState, DefaultStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, FinishedState, &DlMetalinkState::toFinalStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, DlNormalFileState, &DlMetalinkState::toSimpleDownloadCondition >, Transition< DlNormalFileState, &DlNormalFileState::sigFinished, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished >, Transition< DlNormalFileState, &DlNormalFileState::sigFailed, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished > >::sigFinished SignalProxy< void()> sigFinished()
zyppng::Statemachine< Derived, Download::State, Transition< InitialState, &InitialState::sigTransitionToDetectMetalinkState, DetectMetalinkState >, Transition< InitialState, &InitialState::sigTransitionToDlMetaLinkInfoState, DlMetaLinkInfoState >, Transition< InitialState, &InitialState::sigTransitionToDlNormalFileState, DlNormalFileState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlMetaLinkInfoState, &DetectMetalinkState::toMetalinkGuard, &DetectMetalinkState::toDlMetaLinkInfoState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlNormalFileState, &DetectMetalinkState::toSimpleDownloadGuard >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFinished, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigGotMetadata, PrepareMultiState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToPrepareMulti >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFailed, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< PrepareMultiState, &PrepareMultiState::sigFinished, DlMetalinkState, &PrepareMultiState::toMetalinkDownloadGuard, &PrepareMultiState::transitionToMetalinkDl >, Transition< PrepareMultiState, &PrepareMultiState::sigFallback, DlNormalFileState, DefaultStateCondition, &PrepareMultiState::fallbackToNormalTransition >, Transition< PrepareMultiState, &PrepareMultiState::sigFailed, DlNormalFileState >, Transition< DlMetalinkState, &DlMetalinkState::sigFinished, FinishedState, DefaultStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, FinishedState, &DlMetalinkState::toFinalStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, DlNormalFileState, &DlMetalinkState::toSimpleDownloadCondition >, Transition< DlNormalFileState, &DlNormalFileState::sigFinished, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished >, Transition< DlNormalFileState, &DlNormalFileState::sigFailed, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished > >::currentState std::optional< Download::State > currentState() const
zyppng::Statemachine< Derived, Download::State, Transition< InitialState, &InitialState::sigTransitionToDetectMetalinkState, DetectMetalinkState >, Transition< InitialState, &InitialState::sigTransitionToDlMetaLinkInfoState, DlMetaLinkInfoState >, Transition< InitialState, &InitialState::sigTransitionToDlNormalFileState, DlNormalFileState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlMetaLinkInfoState, &DetectMetalinkState::toMetalinkGuard, &DetectMetalinkState::toDlMetaLinkInfoState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlNormalFileState, &DetectMetalinkState::toSimpleDownloadGuard >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFinished, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigGotMetadata, PrepareMultiState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToPrepareMulti >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFailed, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< PrepareMultiState, &PrepareMultiState::sigFinished, DlMetalinkState, &PrepareMultiState::toMetalinkDownloadGuard, &PrepareMultiState::transitionToMetalinkDl >, Transition< PrepareMultiState, &PrepareMultiState::sigFallback, DlNormalFileState, DefaultStateCondition, &PrepareMultiState::fallbackToNormalTransition >, Transition< PrepareMultiState, &PrepareMultiState::sigFailed, DlNormalFileState >, Transition< DlMetalinkState, &DlMetalinkState::sigFinished, FinishedState, DefaultStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, FinishedState, &DlMetalinkState::toFinalStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, DlNormalFileState, &DlMetalinkState::toSimpleDownloadCondition >, Transition< DlNormalFileState, &DlNormalFileState::sigFinished, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished >, Transition< DlNormalFileState, &DlNormalFileState::sigFailed, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished > >::start void start()
zyppng::Statemachine< Derived, Download::State, Transition< InitialState, &InitialState::sigTransitionToDetectMetalinkState, DetectMetalinkState >, Transition< InitialState, &InitialState::sigTransitionToDlMetaLinkInfoState, DlMetaLinkInfoState >, Transition< InitialState, &InitialState::sigTransitionToDlNormalFileState, DlNormalFileState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlMetaLinkInfoState, &DetectMetalinkState::toMetalinkGuard, &DetectMetalinkState::toDlMetaLinkInfoState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlNormalFileState, &DetectMetalinkState::toSimpleDownloadGuard >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFinished, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigGotMetadata, PrepareMultiState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToPrepareMulti >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFailed, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< PrepareMultiState, &PrepareMultiState::sigFinished, DlMetalinkState, &PrepareMultiState::toMetalinkDownloadGuard, &PrepareMultiState::transitionToMetalinkDl >, Transition< PrepareMultiState, &PrepareMultiState::sigFallback, DlNormalFileState, DefaultStateCondition, &PrepareMultiState::fallbackToNormalTransition >, Transition< PrepareMultiState, &PrepareMultiState::sigFailed, DlNormalFileState >, Transition< DlMetalinkState, &DlMetalinkState::sigFinished, FinishedState, DefaultStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, FinishedState, &DlMetalinkState::toFinalStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, DlNormalFileState, &DlMetalinkState::toSimpleDownloadCondition >, Transition< DlNormalFileState, &DlNormalFileState::sigFinished, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished >, Transition< DlNormalFileState, &DlNormalFileState::sigFailed, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished > >::sigStateChanged SignalProxy< void(Download::State)> sigStateChanged()
zyppng::Statemachine< Derived, Download::State, Transition< InitialState, &InitialState::sigTransitionToDetectMetalinkState, DetectMetalinkState >, Transition< InitialState, &InitialState::sigTransitionToDlMetaLinkInfoState, DlMetaLinkInfoState >, Transition< InitialState, &InitialState::sigTransitionToDlNormalFileState, DlNormalFileState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlMetaLinkInfoState, &DetectMetalinkState::toMetalinkGuard, &DetectMetalinkState::toDlMetaLinkInfoState >, Transition< DetectMetalinkState, &DetectMetalinkState::sigFinished, DlNormalFileState, &DetectMetalinkState::toSimpleDownloadGuard >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFinished, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigGotMetadata, PrepareMultiState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToPrepareMulti >, Transition< DlMetaLinkInfoState, &DlMetaLinkInfoState::sigFailed, FinishedState, DefaultStateCondition, &DlMetaLinkInfoState::transitionToFinished >, Transition< PrepareMultiState, &PrepareMultiState::sigFinished, DlMetalinkState, &PrepareMultiState::toMetalinkDownloadGuard, &PrepareMultiState::transitionToMetalinkDl >, Transition< PrepareMultiState, &PrepareMultiState::sigFallback, DlNormalFileState, DefaultStateCondition, &PrepareMultiState::fallbackToNormalTransition >, Transition< PrepareMultiState, &PrepareMultiState::sigFailed, DlNormalFileState >, Transition< DlMetalinkState, &DlMetalinkState::sigFinished, FinishedState, DefaultStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, FinishedState, &DlMetalinkState::toFinalStateCondition, &DlMetalinkState::transitionToFinished >, Transition< DlMetalinkState, &DlMetalinkState::sigFailed, DlNormalFileState, &DlMetalinkState::toSimpleDownloadCondition >, Transition< DlNormalFileState, &DlNormalFileState::sigFinished, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished >, Transition< DlNormalFileState, &DlNormalFileState::sigFailed, FinishedState, DefaultStateCondition, &DlNormalFileState::transitionToFinished > >::state std::shared_ptr< T > state()
void fillSettingsFromUrl(const Url &url, media::TransferSettings &s)
Fills the settings structure using options passed on the url for example ?timeout=x&proxy=foo.
void fillSettingsSystemProxy(const Url &url, media::TransferSettings &s)
Reads the system proxy configuration and fills the settings structure proxy information.
typename decay< T >::type decay_t
zypp::media::CurlAuthData NetworkAuthData
zypp::media::TransferSettings TransferSettings
zypp::media::AuthData_Ptr AuthData_Ptr
zypp::media::CurlAuthData_Ptr NetworkAuthData_Ptr
Url::asString() view options.
connection _sigStartedConn
connection _sigFinishedConn
connection _sigProgressConn
#define ZYPP_IMPL_PRIVATE(Class)