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();
432 static void setTimeout(
int time );
454 static QgsNetworkReplyContent blockingGet( QNetworkRequest &request,
const QString &authCfg = QString(),
bool forceRefresh =
false,
QgsFeedback *feedback =
nullptr );
476 static QgsNetworkReplyContent blockingPost( QNetworkRequest &request,
const QByteArray &data,
const QString &authCfg = QString(),
bool forceRefresh =
false,
QgsFeedback *feedback =
nullptr );
483 Q_DECL_DEPRECATED
void requestAboutToBeCreated( QNetworkAccessManager::Operation,
const QNetworkRequest &, QIODevice * )
SIP_DEPRECATED;
541 void downloadProgress(
int requestId, qint64 bytesReceived, qint64 bytesTotal );
558 void requestRequiresAuth(
int requestId,
const QString &realm );
575 void requestAuthDetailsAdded(
int requestId,
const QString &realm,
const QString &user,
const QString &password );
593 void requestEncounteredSslErrors(
int requestId,
const QList<QSslError> &errors );
598 void sslErrorsOccurred( QNetworkReply *,
const QList<QSslError> &errors );
599 void sslErrorsHandled( QNetworkReply *reply );
608 Q_DECL_DEPRECATED
void requestCreated( QNetworkReply * )
SIP_DEPRECATED;
610 void requestTimedOut( QNetworkReply * );
615 void authRequestOccurred( QNetworkReply *, QAuthenticator *auth );
616 void authRequestHandled( QNetworkReply *reply );
624 void onReplyFinished( QNetworkReply *reply );
626 void onReplyDownloadProgress( qint64 bytesReceived, qint64 bytesTotal );
628 void onReplySslErrors(
const QList<QSslError> &errors );
630 void handleSslErrors( QNetworkReply *reply,
const QList<QSslError> &errors );
633 void onAuthRequired( QNetworkReply *reply, QAuthenticator *auth );
634 void handleAuthRequest( QNetworkReply *reply, QAuthenticator *auth );
637 QNetworkReply *createRequest( QNetworkAccessManager::Operation op,
const QNetworkRequest &req, QIODevice *outgoingData =
nullptr )
override;
641 void unlockAfterSslErrorHandled();
642 void afterSslErrorHandled( QNetworkReply *reply );
645 void unlockAfterAuthRequestHandled();
646 void afterAuthRequestHandled( QNetworkReply *reply );
648 void pauseTimeout( QNetworkReply *reply );
649 void restartTimeout( QNetworkReply *reply );
650 static int getRequestId( QNetworkReply *reply );
652 QList<QNetworkProxyFactory *> mProxyFactories;
653 QNetworkProxy mFallbackProxy;
654 QStringList mExcludedURLs;
655 QStringList mNoProxyURLs;
656 bool mUseSystemProxy =
false;
657 bool mInitialized =
false;
660 std::unique_ptr< QgsSslErrorHandler > mSslErrorHandler;
662 QMutex mSslErrorHandlerMutex;
664 QWaitCondition mSslErrorWaitCondition;
667 std::unique_ptr< QgsNetworkAuthenticationHandler > mAuthHandler;
669 QMutex mAuthRequestHandlerMutex;
671 QWaitCondition mAuthRequestWaitCondition;
675 #endif // QGSNETWORKACCESSMANAGER_H QVariant initiatorRequestId() const
Returns the internal ID used by the object which initiated this request to identify individual reques...
QByteArray content() const
Returns the request's content.
constexpr int sFilePrefixLength
Encapsulates parameters and properties of a network request.
int requestId() const
Returns a unique ID identifying the request.
Base class for feedback objects to be used for cancellation of something running in a worker thread...
Internal ID used by originator object to identify requests.
SSL error handler, used for responding to SSL errors encountered during network requests.
QString initiatorClassName() const
Returns the class name of the object which initiated this request.
QNetworkRequest request() const
Returns the network request.
QNetworkAccessManager::Operation operation() const
Returns the request operation, e.g.
Network authentication handler, used for responding to network authentication requests during network...
Encapsulates a network reply within a container which is inexpensive to copy and safe to pass between...
QString originatingThreadId() const
Returns a string identifying the thread which the request originated from.
bool useSystemProxy() const
Returns whether the system proxy should be used.
RequestAttributes
Custom request attributes.
network access manager for QGISThis class implements the QGIS network access manager.