15#include <zypp-curl/parser/ZsyncParser>
20#if ENABLE_ZCHUNK_COMPRESSION
31 MIL <<
"About to enter PrepareMultiState for URL: " <<
parent._spec.url() << std::endl;
37 const auto &spec =
sm._spec;
38 const auto &url = spec.url();
39 const auto &targetPath = spec.targetPath();
40#if ENABLE_ZCHUNK_COMPRESSION
42 MIL <<
" Upgrading request for URL: "<< url <<
" to multipart download , which zckunk=" <<
_haveZckData << std::endl;
44 MIL <<
" Upgrading request for URL: "<< url <<
" to multipart download , which zckunk=false" << std::endl;
51 std::vector<zypp::media::MetalinkMirror>
mirrs;
57 constexpr auto metalinkMode = std::is_same< T, zypp::media::MetaLinkParser>();
59 parser.parse( targetPath );
62 #if ENABLE_ZCHUNK_COMPRESSION
67 auto bl = parser.getBlockList();
68 if ( !bl.haveBlocks() )
69 MIL <<
"Got no blocks for URL " << spec.url() <<
" but got filesize? " << bl.getFilesize() << std::endl;
70 if ( bl.haveBlocks() || bl.haveFilesize() )
76 const auto &
urlList = parser.getUrls();
77 std::for_each(
urlList.begin(),
urlList.end(), [&](
const auto &url ) {
78 mirrs.push_back( { 0, -1, url } );
81 mirrs = parser.getMirrors();
86 const std::string scheme =
urliter->url.getScheme();
87 if (scheme ==
"http" || scheme ==
"https" || scheme ==
"ftp" || scheme ==
"tftp") {
88 if ( !
sm._requestDispatcher->supportsProtocol(
urliter->url )) {
99 if (
mirrs.empty() ) {
100 mirrs.push_back( { 0, -1, url } );
116 std::string err =
zypp::str::Format(
"Failed to parse metalink information.(%1%)" ) %
ex.asUserString();
117 WAR << err << std::endl;
123 if (
mirrs.size() == 0 ) {
124 std::string err =
zypp::str::Format(
"Invalid metalink information.( No mirrors in metalink file)" );
125 WAR << err << std::endl;
136 sm._mirrorControl->registerMirrors(
mirrs );
149 const auto &spec =
sm._spec;
150 const auto &url = spec.url();
153#if ENABLE_ZCHUNK_COMPRESSION
172 MIL <<
"Generate blocklist, since there was none in the metalink file." << url << std::endl;
180 auto blksize = filesize -
currOff ;
188 MIL_MEDIA <<
"Generated blocklist: " << std::endl <<
_blockList << std::endl <<
" End blocklist " << std::endl;
197 MIL <<
"No blocklist and no filesize, falling back to normal download for URL " <<
stateMachine()._spec.url() << std::endl;
198 std::shared_ptr<DlNormalFileState>
ptr;
224#if ENABLE_ZCHUNK_COMPRESSION
225 std::shared_ptr<DLZckHeadState> PrepareMultiState::transitionToZckHeadDl()
232 bool PrepareMultiState::toZckHeadDownloadGuard()
const
240#if ENABLE_ZCHUNK_COMPRESSION
Reference counted access to a Tp object calling a custom Dispose function when the last AutoDispose h...
void reset()
Reset to default Ctor values.
Store and operate with byte count.
static const Unit K
1024 Byte
Base class for Exception.
StatemachineType & stateMachine()
SignalProxy< void()> sigNewMirrorsReady()
static zyppng::NetworkRequestError customError(NetworkRequestError::Type t, std::string &&errorMsg="", std::map< std::string, boost::any > &&extraInfo={})
zypp::Url propagateQueryParams(zypp::Url url_r, const zypp::Url &template_r)
typename decay< T >::type decay_t
int unlink(const Pathname &path)
Like 'unlink'.
PrepareMultiState(std::shared_ptr< Request > oldReq, Mode m, DownloadPrivate &parent)
NetworkRequestError _error
Signal< void() > _sigFailed
std::vector< Url > _mirrors
std::shared_ptr< DlNormalFileState > fallbackToNormalTransition()
std::shared_ptr< FinishedState > transitionToFinished()
sigc::connection _mirrorControlReadyConn
std::shared_ptr< DlMetalinkState > transitionToMetalinkDl()
Signal< void() > _sigFinished
bool toMetalinkDownloadGuard() const
zypp::media::MediaBlockList _blockList
Signal< void() > _sigFallback
std::shared_ptr< Request > _oldRequest