32 #include <QNetworkReply>
33 #include <QNetworkDiskCache>
36 #include <QSslConfiguration>
56 if ( systemproxies.
size() > 0 )
60 if ( proxies.
size() > 0 )
65 if ( query.queryType() != QNetworkProxyQuery::UrlRequest )
68 QString url = query.url().toString();
74 QgsDebugMsg(
QString(
"using default proxy for %1 [exclude %2]" ).arg( url, exclude ) );
86 .arg( proxies.
first().hostName() ).arg( proxies.
first().port() ) );
107 , mUseSystemProxy( false )
118 mProxyFactories.
insert( 0, factory );
128 return mProxyFactories;
133 return mExcludedURLs;
138 return mFallbackProxy;
144 .arg( proxy.
type() == QNetworkProxy::DefaultProxy ?
"DefaultProxy" :
145 proxy.
type() == QNetworkProxy::Socks5Proxy ?
"Socks5Proxy" :
146 proxy.
type() == QNetworkProxy::NoProxy ?
"NoProxy" :
147 proxy.
type() == QNetworkProxy::HttpProxy ?
"HttpProxy" :
148 proxy.
type() == QNetworkProxy::HttpCachingProxy ?
"HttpCachingProxy" :
149 proxy.
type() == QNetworkProxy::FtpCachingProxy ?
"FtpCachingProxy" :
156 mFallbackProxy =
proxy;
157 mExcludedURLs = excludes;
172 #ifndef QT_NO_OPENSSL
176 QgsDebugMsg(
"Adding trusted CA certs to request" );
185 if ( !servconfig.
isNull() )
187 QgsDebugMsg(
QString(
"Adding SSL custom config to request for %1" ).arg( hostport ) );
205 connect( timer, SIGNAL( timeout() ),
this, SLOT( abortRequest() ) );
207 timer->
start( s.
value(
"/qgis/networkAndProxy/networkTimeout",
"20000" ).
toInt() );
209 connect( reply, SIGNAL( downloadProgress( qint64, qint64 ) ), timer, SLOT( start() ) );
210 connect( reply, SIGNAL( uploadProgress( qint64, qint64 ) ), timer, SLOT( start() ) );
215 void QgsNetworkAccessManager::abortRequest()
233 switch ( theControl )
235 case QNetworkRequest::AlwaysNetwork:
236 return "AlwaysNetwork";
238 case QNetworkRequest::PreferNetwork:
239 return "PreferNetwork";
241 case QNetworkRequest::PreferCache:
242 return "PreferCache";
244 case QNetworkRequest::AlwaysCache:
245 return "AlwaysCache";
250 return "PreferNetwork";
255 if ( theName ==
"AlwaysNetwork" )
257 return QNetworkRequest::AlwaysNetwork;
259 else if ( theName ==
"PreferNetwork" )
261 return QNetworkRequest::PreferNetwork;
263 else if ( theName ==
"PreferCache" )
265 return QNetworkRequest::PreferCache;
267 else if ( theName ==
"AlwaysCache" )
269 return QNetworkRequest::AlwaysCache;
271 return QNetworkRequest::PreferNetwork;
281 mUseSystemProxy =
false;
285 Qt::ConnectionType connectionType =
thread() ==
instance()->
thread() ? Qt::AutoConnection : Qt::BlockingQueuedConnection;
298 #ifndef QT_NO_OPENSSL
306 bool proxyEnabled = settings.
value(
"proxy/proxyEnabled",
false ).
toBool();
309 excludes = settings.
value(
"proxy/proxyExcludedUrls",
"" ).
toString().
split(
"|", QString::SkipEmptyParts );
319 if ( proxyTypeString ==
"DefaultProxy" )
321 mUseSystemProxy =
true;
326 proxy = proxies.
first();
332 QNetworkProxy::ProxyType proxyType = QNetworkProxy::DefaultProxy;
333 if ( proxyTypeString ==
"Socks5Proxy" )
335 proxyType = QNetworkProxy::Socks5Proxy;
337 else if ( proxyTypeString ==
"HttpProxy" )
339 proxyType = QNetworkProxy::HttpProxy;
341 else if ( proxyTypeString ==
"HttpCachingProxy" )
343 proxyType = QNetworkProxy::HttpCachingProxy;
345 else if ( proxyTypeString ==
"FtpCachingProxy" )
347 proxyType = QNetworkProxy::FtpCachingProxy;
351 .arg( proxyHost ).arg( proxyPort )
352 .arg( proxyUser, proxyPassword )
354 proxy =
QNetworkProxy( proxyType, proxyHost, proxyPort, proxyUser, proxyPassword );
365 qint64 cacheSize = settings.
value(
"cache/size", 50 * 1024 * 1024 ).
toULongLong();
373 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)
virtual ~QgsNetworkProxyFactory()
static QString cacheLoadControlName(QNetworkRequest::CacheLoadControl theControl)
Get name for QNetworkRequest::CacheLoadControl.
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.
QgsNetworkAccessManager(QObject *parent=0)
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.
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.
virtual QNetworkReply * createRequest(QNetworkAccessManager::Operation op, const QNetworkRequest &req, QIODevice *outgoingData=0) override
QString toString(QFlags< QUrl::FormattingOption > options) const
qulonglong toULongLong(bool *ok) const
QString tr(const char *sourceText, const char *disambiguation, int n)
const QList< QNetworkProxyFactory * > proxyFactories() const
retrieve proxy factory list
QAbstractNetworkCache * cache() const
void setCacheDirectory(const QString &cacheDir)
void setProxyFactory(QNetworkProxyFactory *factory)
QNetworkProxy proxy() const
~QgsNetworkAccessManager()
destructor
void setCaCertificates(const QList< QSslCertificate > &certificates)
virtual QList< QNetworkProxy > queryProxy(const QNetworkProxyQuery &query)=0
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.
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
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 setMaximumCacheSize(qint64 size)
void removeProxyFactory(QNetworkProxyFactory *factory)
remove a factory from the proxy factories list
QCoreApplication * instance()
void insertProxyFactory(QNetworkProxyFactory *factory)
insert a factory into the proxy factories list
QString cacheDirectory() const
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 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 *)
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 setSslConfiguration(const QSslConfiguration &config)
virtual QList< QNetworkProxy > queryProxy(const QNetworkProxyQuery &query=QNetworkProxyQuery()) override
qint64 maximumCacheSize() const
void setSingleShot(bool singleShot)
QByteArray toUtf8() const