18 #ifndef QGSNETWORKACCESSMANAGER_H
19 #define QGSNETWORKACCESSMANAGER_H
24 #include <QStringList>
25 #include <QNetworkAccessManager>
26 #include <QNetworkProxy>
27 #include <QNetworkRequest>
29 #include <QWaitCondition>
32 #include "qgis_core.h"
38 #include "qgsconfig.h"
39 constexpr
int sFilePrefixLength = CMAKE_SOURCE_DIR[
sizeof( CMAKE_SOURCE_DIR ) - 1] ==
'/' ?
sizeof( CMAKE_SOURCE_DIR ) + 1 :
sizeof( CMAKE_SOURCE_DIR );
41 #define QgsSetRequestInitiatorClass(request, _class) request.setAttribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorClass ), _class ); request.setAttribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorRequestId ), QString(QString( __FILE__ ).mid( sFilePrefixLength ) + ':' + QString::number( __LINE__ ) + " (" + __FUNCTION__ + ")") );
42 #define QgsSetRequestInitiatorId(request, str) request.setAttribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorRequestId ), QString(QString( __FILE__ ).mid( sFilePrefixLength ) + ':' + QString::number( __LINE__ ) + " (" + __FUNCTION__ + "): " + str) );
58 AttributeInitiatorClass = QNetworkRequest::User + 3000,
72 const QNetworkRequest &request,
74 const QByteArray &content = QByteArray() );
79 QNetworkAccessManager::Operation
operation()
const {
return mOperation; }
87 QNetworkRequest
request()
const {
return mRequest; }
103 QByteArray
content()
const {
return mContent; }
128 QNetworkAccessManager::Operation mOperation;
129 QNetworkRequest mRequest;
130 QString mOriginatingThreadId;
133 QString mInitiatorClass;
134 QVariant mInitiatorRequestId;
186 virtual void handleSslErrors( QNetworkReply *reply,
const QList<QSslError> &errors );
228 virtual void handleAuthRequest( QNetworkReply *reply, QAuthenticator *auth );
297 void setSslErrorHandler( std::unique_ptr< QgsSslErrorHandler > handler );
315 void setAuthHandler( std::unique_ptr< QgsNetworkAuthenticationHandler > handler );
326 void insertProxyFactory( QNetworkProxyFactory *factory
SIP_TRANSFER );
342 const QList<QNetworkProxyFactory *> proxyFactories()
const;
352 const QNetworkProxy &fallbackProxy()
const;
363 QStringList excludeList()
const;
374 QStringList noProxyList()
const;
387 void setFallbackProxyAndExcludes(
const QNetworkProxy &proxy,
const QStringList &excludes,
const QStringList &noProxyURLs );
394 static QString cacheLoadControlName( QNetworkRequest::CacheLoadControl control );
401 static QNetworkRequest::CacheLoadControl cacheLoadControlFromName(
const QString &name );
410 void setupDefaultProxyAndCache( Qt::ConnectionType connectionType = Qt::BlockingQueuedConnection );
423 static int timeout();
431 static void setTimeout(
int time );
453 static QgsNetworkReplyContent blockingGet( QNetworkRequest &request,
const QString &authCfg = QString(),
bool forceRefresh =
false,
QgsFeedback *feedback =
nullptr );
475 static QgsNetworkReplyContent blockingPost( QNetworkRequest &request,
const QByteArray &data,
const QString &authCfg = QString(),
bool forceRefresh =
false,
QgsFeedback *feedback =
nullptr );
597 void sslErrorsOccurred( QNetworkReply *,
const QList<QSslError> &errors );
598 void sslErrorsHandled( QNetworkReply *reply );
614 void authRequestOccurred( QNetworkReply *, QAuthenticator *auth );
615 void authRequestHandled( QNetworkReply *reply );
623 void onReplyFinished( QNetworkReply *reply );
625 void onReplyDownloadProgress( qint64 bytesReceived, qint64 bytesTotal );
627 void onReplySslErrors(
const QList<QSslError> &errors );
629 void handleSslErrors( QNetworkReply *reply,
const QList<QSslError> &errors );
632 void onAuthRequired( QNetworkReply *reply, QAuthenticator *auth );
633 void handleAuthRequest( QNetworkReply *reply, QAuthenticator *auth );
636 QNetworkReply *createRequest( QNetworkAccessManager::Operation op,
const QNetworkRequest &req, QIODevice *outgoingData =
nullptr )
override;
640 void unlockAfterSslErrorHandled();
641 void afterSslErrorHandled( QNetworkReply *reply );
644 void unlockAfterAuthRequestHandled();
645 void afterAuthRequestHandled( QNetworkReply *reply );
647 void pauseTimeout( QNetworkReply *reply );
648 void restartTimeout( QNetworkReply *reply );
649 static int getRequestId( QNetworkReply *reply );
651 QList<QNetworkProxyFactory *> mProxyFactories;
652 QNetworkProxy mFallbackProxy;
653 QStringList mExcludedURLs;
654 QStringList mNoProxyURLs;
655 bool mUseSystemProxy =
false;
656 bool mInitialized =
false;
659 std::unique_ptr< QgsSslErrorHandler > mSslErrorHandler;
661 QMutex mSslErrorHandlerMutex;
663 QWaitCondition mSslErrorWaitCondition;
666 std::unique_ptr< QgsNetworkAuthenticationHandler > mAuthHandler;
668 QMutex mAuthRequestHandlerMutex;
670 QWaitCondition mAuthRequestWaitCondition;
674 #endif // QGSNETWORKACCESSMANAGER_H