4 #include <zypp/base/Logger.h> 6 #include <zypp-media/MediaException> 30 MIL <<
"Url is not valid" << std::endl;
34 std::unique_ptr<MediaHandler>
_handler;
40 MIL <<
"Trying scheme '" << scheme <<
"'" << std::endl;
46 if (scheme ==
"cd" || scheme ==
"dvd")
47 _handler = std::make_unique<MediaCD> (url,preferred_attach_point);
48 else if (scheme ==
"nfs" || scheme ==
"nfs4")
49 _handler = std::make_unique<MediaNFS> (url,preferred_attach_point);
50 else if (scheme ==
"iso")
51 _handler = std::make_unique<MediaISO> (url,preferred_attach_point);
52 else if (scheme ==
"file" || scheme ==
"dir")
53 _handler = std::make_unique<MediaDIR> (url,preferred_attach_point);
54 else if (scheme ==
"hd")
55 _handler = std::make_unique<MediaDISK> (url,preferred_attach_point);
56 else if (scheme ==
"cifs" || scheme ==
"smb")
57 _handler = std::make_unique<MediaCIFS> (url,preferred_attach_point);
58 else if (scheme ==
"ftp" || scheme ==
"tftp" || scheme ==
"http" || scheme ==
"https")
60 enum WhichHandler { choose, curl, multicurl };
61 WhichHandler which = choose;
63 if (
const std::string & queryparam = url.getQueryParam(
"mediahandler"); ! queryparam.empty() ) {
64 if ( queryparam ==
"network" )
66 else if ( queryparam ==
"multicurl" )
68 else if ( queryparam ==
"curl" )
71 WAR <<
"Unknown mediahandler='" << queryparam <<
"' in URL; Choosing the default" << std::endl;
74 if ( which == choose ) {
75 auto getenvIs = []( std::string_view var, std::string_view val )->
bool {
76 const char * v = ::getenv( var.data() );
80 if ( getenvIs(
"ZYPP_MEDIANETWORK",
"1" ) ) {
81 WAR <<
"network backend preview was removed, defaulting to multicurl." << std::endl;
84 else if ( getenvIs(
"ZYPP_MULTICURL",
"0" ) ) {
85 WAR <<
"multicurl manually disabled." << std::endl;
92 std::unique_ptr<MediaNetworkCommonHandler> handler;
96 handler = std::make_unique<MediaMultiCurl>( url, preferred_attach_point );
100 handler = std::make_unique<MediaCurl>( url, preferred_attach_point );
104 for (
const auto & el : custom_headers ) {
105 std::string header { el.first };
108 MIL <<
"Added custom header -> " << header << std::endl;
109 handler->settings().addHeader( std::move(header) );
114 else if (scheme ==
"plugin" )
115 _handler = std::make_unique<MediaPlugin> (url,preferred_attach_point);
118 ZYPP_THROW(MediaUnsupportedUrlSchemeException(url));
123 ERR <<
"Failed to create media handler" << std::endl;
124 ZYPP_THROW(MediaSystemException(url,
"Failed to create media handler"));
std::string getScheme() const
Returns the scheme name of the URL.
#define ZYPP_THROW(EXCPT)
Drops a logline and throws the Exception.
bool isValid() const
Verifies the Url.