@@ -69,20 +69,32 @@ class QgsNetworkProxyFactory : public QNetworkProxyFactory
69
69
}
70
70
}
71
71
72
- QgsDebugMsg ( QString ( " using user proxy for %1" ).arg ( url ) );
72
+ if ( nam->useSystemProxy () )
73
+ {
74
+ QgsDebugMsg ( QString ( " requesting system proxy for query %1" ).arg ( url ) );
75
+ QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery ( query );
76
+ if ( !proxies.isEmpty () )
77
+ {
78
+ QgsDebugMsg ( QString ( " using system proxy %1:%2 for query" )
79
+ .arg ( proxies.first ().hostName () ).arg ( proxies.first ().port () ) );
80
+ return proxies;
81
+ }
82
+ }
83
+
84
+ QgsDebugMsg ( QString ( " using fallback proxy for %1" ).arg ( url ) );
73
85
return QList<QNetworkProxy>() << nam->fallbackProxy ();
74
86
}
75
87
};
76
88
77
89
QgsNetworkAccessManager *QgsNetworkAccessManager::instance ()
78
90
{
79
91
static QgsNetworkAccessManager sInstance ;
80
-
81
92
return &sInstance ;
82
93
}
83
94
84
95
QgsNetworkAccessManager::QgsNetworkAccessManager ( QObject *parent )
85
96
: QNetworkAccessManager( parent )
97
+ , mUseSystemProxy( false )
86
98
{
87
99
setProxyFactory ( new QgsNetworkProxyFactory () );
88
100
}
@@ -230,7 +242,30 @@ void QgsNetworkAccessManager::setupDefaultProxyAndCache()
230
242
231
243
QSettings settings;
232
244
233
- // check if proxy is enabled
245
+ mUseSystemProxy = false ;
246
+
247
+ if ( this != instance () )
248
+ {
249
+ connect ( this , SIGNAL ( authenticationRequired ( QNetworkReply *, QAuthenticator * ) ),
250
+ instance (), SIGNAL ( authenticationRequired ( QNetworkReply *, QAuthenticator * ) ),
251
+ Qt::BlockingQueuedConnection );
252
+
253
+ connect ( this , SIGNAL ( proxyAuthenticationRequired ( const QNetworkProxy &, QAuthenticator * ) ),
254
+ instance (), SIGNAL ( proxyAuthenticationRequired ( const QNetworkProxy &, QAuthenticator * ) ),
255
+ Qt::BlockingQueuedConnection );
256
+
257
+ connect ( this , SIGNAL ( requestTimedOut ( QNetworkReply* ) ),
258
+ instance (), SIGNAL ( requestTimedOut ( QNetworkReply* ) ),
259
+ Qt::BlockingQueuedConnection );
260
+
261
+ #ifndef QT_NO_OPENSSL
262
+ connect ( this , SIGNAL ( sslErrors ( QNetworkReply *, const QList<QSslError> & ) ),
263
+ instance (), SIGNAL ( sslErrors ( QNetworkReply *, const QList<QSslError> & ) ),
264
+ Qt::BlockingQueuedConnection );
265
+ #endif
266
+ }
267
+
268
+ // check if proxy is enabled
234
269
bool proxyEnabled = settings.value ( " proxy/proxyEnabled" , false ).toBool ();
235
270
if ( proxyEnabled )
236
271
{
@@ -243,24 +278,21 @@ void QgsNetworkAccessManager::setupDefaultProxyAndCache()
243
278
QString proxyPassword = settings.value ( " proxy/proxyPassword" , " " ).toString ();
244
279
245
280
QString proxyTypeString = settings.value ( " proxy/proxyType" , " " ).toString ();
246
- QNetworkProxy::ProxyType proxyType = QNetworkProxy::NoProxy;
281
+
247
282
if ( proxyTypeString == " DefaultProxy" )
248
283
{
249
- proxyType = QNetworkProxy::DefaultProxy;
250
-
251
- #if defined(Q_OS_WIN)
284
+ mUseSystemProxy = true ;
252
285
QNetworkProxyFactory::setUseSystemConfiguration ( true );
253
286
QList<QNetworkProxy> proxies = QNetworkProxyFactory::systemProxyForQuery ();
254
287
if ( !proxies.isEmpty () )
255
288
{
256
289
proxy = proxies.first ();
257
290
}
258
- #endif
259
-
260
291
QgsDebugMsg ( " setting default proxy" );
261
292
}
262
293
else
263
294
{
295
+ QNetworkProxy::ProxyType proxyType = QNetworkProxy::DefaultProxy;
264
296
if ( proxyTypeString == " Socks5Proxy" )
265
297
{
266
298
proxyType = QNetworkProxy::Socks5Proxy;
0 commit comments