32 #include <QNetworkReply>
33 #include <QThreadStorage>
36 #include <QSslConfiguration>
48 QgsNetworkProxyFactory() {}
49 virtual ~QgsNetworkProxyFactory() {}
68 if ( query.queryType() != QNetworkProxyQuery::UrlRequest )
71 QString url = query.url().toString();
77 QgsDebugMsg(
QString(
"using default proxy for %1 [exclude %2]" ).arg( url, exclude ) );
89 .arg( proxies.
first().hostName() ).arg( proxies.
first().port() ) );
111 if ( !nam->mInitialized )
119 , mUseSystemProxy( false )
120 , mInitialized( false )
131 mProxyFactories.
insert( 0, factory );
141 return mProxyFactories;
146 return mExcludedURLs;
151 return mFallbackProxy;
157 .arg( proxy.
type() == QNetworkProxy::DefaultProxy ?
"DefaultProxy" :
158 proxy.
type() == QNetworkProxy::Socks5Proxy ?
"Socks5Proxy" :
159 proxy.
type() == QNetworkProxy::NoProxy ?
"NoProxy" :
160 proxy.
type() == QNetworkProxy::HttpProxy ?
"HttpProxy" :
161 proxy.
type() == QNetworkProxy::HttpCachingProxy ?
"HttpCachingProxy" :
162 proxy.
type() == QNetworkProxy::FtpCachingProxy ?
"FtpCachingProxy" :
169 mFallbackProxy =
proxy;
170 mExcludedURLs = excludes;
185 #ifndef QT_NO_OPENSSL
189 QgsDebugMsg(
"Adding trusted CA certs to request" );
198 if ( !servconfig.
isNull() )
200 QgsDebugMsg(
QString(
"Adding SSL custom config to request for %1" ).arg( hostport ) );
220 connect( timer, SIGNAL( timeout() ),
this, SLOT( abortRequest() ) );
222 timer->
start( s.
value(
"/qgis/networkAndProxy/networkTimeout",
"60000" ).
toInt() );
224 connect( reply, SIGNAL( downloadProgress( qint64, qint64 ) ), timer, SLOT( start() ) );
225 connect( reply, SIGNAL( uploadProgress( qint64, qint64 ) ), timer, SLOT( start() ) );
232 void QgsNetworkAccessManager::abortRequest()
241 QgsDebugMsgLevel(
QString(
"Abort [reply:%1] %2" ).arg(( qint64 ) reply, 0, 16 ).arg( reply->url().toString() ), 3 );
251 switch ( theControl )
253 case QNetworkRequest::AlwaysNetwork:
254 return "AlwaysNetwork";
255 case QNetworkRequest::PreferNetwork:
256 return "PreferNetwork";
257 case QNetworkRequest::PreferCache:
258 return "PreferCache";
259 case QNetworkRequest::AlwaysCache:
260 return "AlwaysCache";
264 return "PreferNetwork";
269 if ( theName ==
"AlwaysNetwork" )
271 return QNetworkRequest::AlwaysNetwork;
273 else if ( theName ==
"PreferNetwork" )
275 return QNetworkRequest::PreferNetwork;
277 else if ( theName ==
"PreferCache" )
279 return QNetworkRequest::PreferCache;
281 else if ( theName ==
"AlwaysCache" )
283 return QNetworkRequest::AlwaysCache;
285 return QNetworkRequest::PreferNetwork;
291 mUseSystemProxy =
false;
293 Q_ASSERT( smMainNAM );
295 if ( smMainNAM !=
this )
299 Qt::BlockingQueuedConnection );
303 Qt::BlockingQueuedConnection );
308 #ifndef QT_NO_OPENSSL
311 Qt::BlockingQueuedConnection );
320 bool proxyEnabled = settings.
value(
"proxy/proxyEnabled",
false ).
toBool();
323 excludes = settings.
value(
"proxy/proxyExcludedUrls",
"" ).
toString().
split(
'|', QString::SkipEmptyParts );
333 if ( proxyTypeString ==
"DefaultProxy" )
335 mUseSystemProxy =
true;
340 proxy = proxies.
first();
346 QNetworkProxy::ProxyType proxyType = QNetworkProxy::DefaultProxy;
347 if ( proxyTypeString ==
"Socks5Proxy" )
349 proxyType = QNetworkProxy::Socks5Proxy;
351 else if ( proxyTypeString ==
"HttpProxy" )
353 proxyType = QNetworkProxy::HttpProxy;
355 else if ( proxyTypeString ==
"HttpCachingProxy" )
357 proxyType = QNetworkProxy::HttpCachingProxy;
359 else if ( proxyTypeString ==
"FtpCachingProxy" )
361 proxyType = QNetworkProxy::FtpCachingProxy;
365 .arg( proxyHost ).arg( proxyPort )
366 .arg( proxyUser, proxyPassword )
368 proxy =
QNetworkProxy( proxyType, proxyHost, proxyPort, proxyUser, proxyPassword );
379 if ( cacheDirectory.
isEmpty() )
381 qint64 cacheSize = settings.
value(
"cache/size", 50 * 1024 * 1024 ).
toULongLong();
387 if (
cache() != newcache )
static const char * QGIS_VERSION
const QStringList & excludeList() const
retrieve exclude list (urls shouldn't use the fallback proxy)
void requestCreated(QNetworkReply *)
virtual QNetworkReply * createRequest(Operation op, const QNetworkRequest &req, QIODevice *outgoingData)
static QString cacheLoadControlName(QNetworkRequest::CacheLoadControl theControl)
Get name for QNetworkRequest::CacheLoadControl.
Q_DECL_DEPRECATED void sendGet(const QNetworkRequest &request)
Send GET request, calls get().
void sslErrors(QNetworkReply *reply, const QList< QSslError > &errors)
static QgsAuthManager * instance()
Enforce singleton pattern.
static QString qgisSettingsDirPath()
Returns the path to the settings directory in user's home dir.
QStringList split(const QString &sep, SplitBehavior behavior, Qt::CaseSensitivity cs) const
QSslConfiguration sslConfiguration() const
static QNetworkRequest::CacheLoadControl cacheLoadControlFromName(const QString &theName)
Get QNetworkRequest::CacheLoadControl from name.
void setCacheDirectory(const QString &cacheDir)
bool isNull() const
Whether configuration is null (missing components)
const QNetworkProxy & fallbackProxy() const
retrieve fall back proxy (for urls that no factory returned proxies for)
Configuration container for SSL server connection exceptions or overrides.
void authenticationRequired(QNetworkReply *reply, QAuthenticator *authenticator)
void setupDefaultProxyAndCache()
Setup the NAM according to the user's settings.
QString cacheDirectory() const
qulonglong toULongLong(bool *ok) const
QString tr(const char *sourceText, const char *disambiguation, int n)
virtual QNetworkReply * createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *outgoingData=nullptr) override
const QList< QNetworkProxyFactory * > proxyFactories() const
retrieve proxy factory list
QgsNetworkAccessManager(QObject *parent=nullptr)
QAbstractNetworkCache * cache() const
void setProxyFactory(QNetworkProxyFactory *factory)
QNetworkProxy proxy() const
~QgsNetworkAccessManager()
destructor
void setCaCertificates(const QList< QSslCertificate > &certificates)
virtual QList< QNetworkProxy > queryProxy(const QNetworkProxyQuery &query)=0
Q_DECL_DEPRECATED void deleteReply(QNetworkReply *reply)
Abort and delete reply.
int toInt(bool *ok) const
QSslSocket::PeerVerifyMode sslPeerVerifyMode() const
SSL client's peer verify mode to use in connections.
#define QgsDebugMsgLevel(str, level)
QNetworkProxy::ProxyType type() const
void requestTimedOut(QNetworkReply *)
QSsl::SslProtocol sslProtocol() const
SSL server protocol to use in connections.
int toInt(bool *ok, int base) const
bool useSystemProxy() const
return whether the system proxy should be used
void setObjectName(const QString &name)
int removeAll(const T &value)
void requestSent(QNetworkReply *reply, QObject *sender)
Emitted when request was sent by request()
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const
static void logMessage(const QString &message, const QString &tag=QString::null, MessageLevel level=WARNING)
add a message to the instance (and create it if necessary)
void removeProxyFactory(QNetworkProxyFactory *factory)
remove a factory from the proxy factories list
void insertProxyFactory(QNetworkProxyFactory *factory)
insert a factory into the proxy factories list
QVariant value(const QString &key, const QVariant &defaultValue) const
int sslPeerVerifyDepth() const
Number or SSL client's peer to verify in connections.
static QgsNetworkAccessManager * instance()
returns a pointer to the single instance
void insert(int i, const T &value)
QList< QNetworkProxy > systemProxyForQuery(const QNetworkProxyQuery &query)
const QgsAuthConfigSslServer getSslCertCustomConfigByHost(const QString &hostport)
Get an SSL certificate custom config by host:port.
void finished(QNetworkReply *reply)
void proxyAuthenticationRequired(const QNetworkProxy &proxy, QAuthenticator *authenticator)
void setUseSystemConfiguration(bool enable)
bool connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type)
void requestAboutToBeCreated(QNetworkAccessManager::Operation, const QNetworkRequest &, QIODevice *)
qint64 maximumCacheSize() const
void setCache(QAbstractNetworkCache *cache)
QString arg(qlonglong a, int fieldWidth, int base, const QChar &fillChar) const
void setFallbackProxyAndExcludes(const QNetworkProxy &proxy, const QStringList &excludes)
set fallback proxy and URL that shouldn't use it.
void setMaximumCacheSize(qint64 size)
void setSslConfiguration(const QSslConfiguration &config)
Wrapper implementation of QNetworkDiskCache with all methods guarded by a mutex soly for internal use...
void setSingleShot(bool singleShot)
QByteArray toUtf8() const