libzypp
10.5.0
|
00001 #include <iostream> 00002 #include <sstream> 00003 00004 #include "zypp/base/String.h" 00005 #include "zypp/base/Logger.h" 00006 #include "zypp/base/WatchFile.h" 00007 #include "zypp/base/ReferenceCounted.h" 00008 #include "zypp/base/NonCopyable.h" 00009 #include "zypp/ExternalProgram.h" 00010 #include "zypp/media/TransferSettings.h" 00011 #include "zypp/ZConfig.h" 00012 00013 using namespace std; 00014 00015 #define ARIA2C_BINARY "/usr/bin/aria2c" 00016 #define CURL_BINARY "/usr/bin/curl" 00017 00018 namespace zypp 00019 { 00020 namespace media 00021 { 00022 00023 class TransferSettings::Impl 00024 { 00025 public: 00026 Impl() 00027 : _useproxy(false) 00028 , _timeout(0) 00029 , _connect_timeout(0) 00030 , _maxConcurrentConnections(ZConfig::instance().download_max_concurrent_connections()) 00031 , _minDownloadSpeed(ZConfig::instance().download_min_download_speed()) 00032 , _maxDownloadSpeed(ZConfig::instance().download_max_download_speed()) 00033 , _maxSilentTries(ZConfig::instance().download_max_silent_tries()) 00034 , _verify_host(false) 00035 , _verify_peer(false) 00036 , _ca_path("/etc/ssl/certs") 00037 , _head_requests_allowed(true) 00038 {} 00039 00040 virtual ~Impl() 00041 {} 00042 00044 static shared_ptr<Impl> nullimpl() 00045 { 00046 static shared_ptr<Impl> _nullimpl( new Impl ); 00047 return _nullimpl; 00048 } 00049 00050 private: 00051 friend Impl * rwcowClone<Impl>( const Impl * rhs ); 00053 Impl * clone() const 00054 { return new Impl( *this ); } 00055 00056 public: 00057 vector<string> _headers; 00058 string _useragent; 00059 string _username; 00060 string _password; 00061 bool _useproxy; 00062 string _proxy; 00063 string _proxy_username; 00064 string _proxy_password; 00065 string _authtype; 00066 long _timeout; 00067 long _connect_timeout; 00068 Url _url; 00069 Pathname _targetdir; 00070 00071 long _maxConcurrentConnections; 00072 long _minDownloadSpeed; 00073 long _maxDownloadSpeed; 00074 long _maxSilentTries; 00075 00076 bool _verify_host; 00077 bool _verify_peer; 00078 Pathname _ca_path; 00079 00080 // workarounds 00081 bool _head_requests_allowed; 00082 }; 00083 00084 TransferSettings::TransferSettings() 00085 : _impl(new TransferSettings::Impl()) 00086 { 00087 00088 } 00089 00090 void TransferSettings::reset() 00091 { 00092 _impl.reset(new TransferSettings::Impl()); 00093 } 00094 00095 void TransferSettings::addHeader( const std::string &header ) 00096 { 00097 _impl->_headers.push_back(header); 00098 } 00099 00100 TransferSettings::Headers::const_iterator TransferSettings::headersBegin() const 00101 { 00102 return _impl->_headers.begin(); 00103 } 00104 00105 TransferSettings::Headers::const_iterator TransferSettings::headersEnd() const 00106 { 00107 return _impl->_headers.end(); 00108 } 00109 00110 void TransferSettings::setUserAgentString( const std::string &agent ) 00111 { 00112 _impl->_useragent = agent; 00113 } 00114 00115 std::string TransferSettings::userAgentString() const 00116 { 00117 return _impl->_useragent; 00118 } 00119 00120 void TransferSettings::setUsername( const std::string &username ) 00121 { 00122 _impl->_username = username; 00123 } 00124 00125 std::string TransferSettings::username() const 00126 { 00127 return _impl->_username; 00128 } 00129 00130 void TransferSettings::setPassword( const std::string &password ) 00131 { 00132 _impl->_password = password; 00133 } 00134 00135 void TransferSettings::setAnonymousAuth() 00136 { 00137 setUsername("anonymous"); 00138 string id = "yast@"; 00139 setPassword(id + VERSION); 00140 } 00141 00142 std::string TransferSettings::password() const 00143 { 00144 return _impl->_password; 00145 } 00146 00147 std::string TransferSettings::userPassword() const 00148 { 00149 string userpwd = username(); 00150 if ( password().size() ) { 00151 userpwd += ":" + password(); 00152 } 00153 return userpwd; 00154 } 00155 00156 void TransferSettings::setProxyEnabled( bool enabled ) 00157 { 00158 _impl->_useproxy = enabled; 00159 } 00160 00161 bool TransferSettings::proxyEnabled() const 00162 { 00163 return _impl->_useproxy; 00164 } 00165 00166 void TransferSettings::setProxy( const std::string &proxy ) 00167 { 00168 _impl->_proxy = proxy; 00169 } 00170 00171 std::string TransferSettings::proxy() const 00172 { 00173 return _impl->_proxy; 00174 } 00175 00176 void TransferSettings::setProxyUsername( const std::string &proxyuser ) 00177 { 00178 _impl->_proxy_username = proxyuser; 00179 } 00180 00181 std::string TransferSettings::proxyUsername() const 00182 { 00183 return _impl->_proxy_username; 00184 } 00185 00186 void TransferSettings::setProxyPassword( const std::string &proxypass ) 00187 { 00188 _impl->_proxy_password = proxypass; 00189 } 00190 00191 std::string TransferSettings::proxyPassword() const 00192 { 00193 return _impl->_proxy_password; 00194 } 00195 00196 std::string TransferSettings::proxyUserPassword() const 00197 { 00198 string userpwd = proxyUsername(); 00199 if ( proxyPassword().size() ) { 00200 userpwd += ":" + proxyPassword(); 00201 } 00202 return userpwd; 00203 } 00204 00205 void TransferSettings::setTimeout( long t ) 00206 { 00207 _impl->_timeout = t; 00208 } 00209 00210 long TransferSettings::timeout() const 00211 { 00212 return _impl->_timeout; 00213 } 00214 00215 void TransferSettings::setConnectTimeout( long t ) 00216 { 00217 _impl->_connect_timeout = t; 00218 } 00219 00220 long TransferSettings::connectTimeout() const 00221 { 00222 return _impl->_connect_timeout; 00223 } 00224 00225 long TransferSettings::maxConcurrentConnections() const 00226 { 00227 return _impl->_maxConcurrentConnections; 00228 } 00229 00230 void TransferSettings::setMaxConcurrentConnections(long v) 00231 { 00232 _impl->_maxConcurrentConnections = v; 00233 } 00234 00235 long TransferSettings::minDownloadSpeed() const 00236 { 00237 return _impl->_minDownloadSpeed; 00238 } 00239 00240 void TransferSettings::setMinDownloadSpeed(long v) 00241 { 00242 _impl->_minDownloadSpeed = v; 00243 } 00244 00245 long TransferSettings::maxDownloadSpeed() const 00246 { 00247 return _impl->_maxDownloadSpeed; 00248 } 00249 00250 void TransferSettings::setMaxDownloadSpeed(long v) 00251 { 00252 _impl->_maxDownloadSpeed = v; 00253 } 00254 00255 long TransferSettings::maxSilentTries() const 00256 { 00257 return _impl->_maxSilentTries; 00258 } 00259 00260 void TransferSettings::setMaxSilentTries(long v) 00261 { 00262 _impl->_maxSilentTries = v; 00263 } 00264 00265 bool TransferSettings::verifyHostEnabled() const 00266 { 00267 return _impl->_verify_host; 00268 } 00269 00270 void TransferSettings::setVerifyHostEnabled( bool enabled ) 00271 { 00272 _impl->_verify_host = enabled; 00273 } 00274 00275 bool TransferSettings::verifyPeerEnabled() const 00276 { 00277 return _impl->_verify_peer; 00278 } 00279 00280 00281 void TransferSettings::setVerifyPeerEnabled( bool enabled ) 00282 { 00283 _impl->_verify_peer = enabled; 00284 } 00285 00286 Pathname TransferSettings::certificateAuthoritiesPath() const 00287 { 00288 return _impl->_ca_path; 00289 } 00290 00291 void TransferSettings::setCertificateAuthoritiesPath( const zypp::Pathname &path ) 00292 { 00293 _impl->_ca_path = path; 00294 } 00295 00296 void TransferSettings::setAuthType( const std::string &authtype) 00297 { 00298 _impl->_authtype = authtype; 00299 } 00300 00301 std::string TransferSettings::authType() const 00302 { 00303 return _impl->_authtype; 00304 } 00305 00306 void TransferSettings::setHeadRequestsAllowed(bool allowed) 00307 { 00308 _impl->_head_requests_allowed = allowed; 00309 } 00310 00311 bool TransferSettings::headRequestsAllowed() const 00312 { 00313 return _impl->_head_requests_allowed; 00314 } 00315 00316 } // ns media 00317 } // ns zypp 00318