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 );
447 static int timeout();
456 static void setTimeout(
int time );
478 static QgsNetworkReplyContent blockingGet( QNetworkRequest &request,
const QString &authCfg = QString(),
bool forceRefresh =
false,
QgsFeedback *feedback =
nullptr );
500 static QgsNetworkReplyContent blockingPost( QNetworkRequest &request,
const QByteArray &data,
const QString &authCfg = QString(),
bool forceRefresh =
false,
QgsFeedback *feedback =
nullptr );
622 void sslErrorsOccurred( QNetworkReply *,
const QList<QSslError> &errors );
623 void sslErrorsHandled( QNetworkReply *reply );
639 void authRequestOccurred( QNetworkReply *, QAuthenticator *auth );
640 void authRequestHandled( QNetworkReply *reply );
648 void onReplyFinished( QNetworkReply *reply );
650 void onReplyDownloadProgress( qint64 bytesReceived, qint64 bytesTotal );
652 void onReplySslErrors(
const QList<QSslError> &errors );
654 void handleSslErrors( QNetworkReply *reply,
const QList<QSslError> &errors );
657 void onAuthRequired( QNetworkReply *reply, QAuthenticator *auth );
658 void handleAuthRequest( QNetworkReply *reply, QAuthenticator *auth );
661 QNetworkReply *createRequest( QNetworkAccessManager::Operation op,
const QNetworkRequest &req, QIODevice *outgoingData =
nullptr )
override;
665 void unlockAfterSslErrorHandled();
666 void afterSslErrorHandled( QNetworkReply *reply );
669 void unlockAfterAuthRequestHandled();
670 void afterAuthRequestHandled( QNetworkReply *reply );
672 void pauseTimeout( QNetworkReply *reply );
673 void restartTimeout( QNetworkReply *reply );
674 static int getRequestId( QNetworkReply *reply );
676 QList<QNetworkProxyFactory *> mProxyFactories;
677 QNetworkProxy mFallbackProxy;
678 QStringList mExcludedURLs;
679 QStringList mNoProxyURLs;
680 bool mUseSystemProxy =
false;
681 bool mInitialized =
false;
682 bool mCacheDisabled =
false;
685 std::unique_ptr< QgsSslErrorHandler > mSslErrorHandler;
687 QMutex mSslErrorHandlerMutex;
689 QWaitCondition mSslErrorWaitCondition;
692 std::unique_ptr< QgsNetworkAuthenticationHandler > mAuthHandler;
694 QMutex mAuthRequestHandlerMutex;
696 QWaitCondition mAuthRequestWaitCondition;
Base class for feedback objects to be used for cancellation of something running in a worker thread.
network access manager for QGIS
void finished(QgsNetworkReplyContent reply)
Emitted whenever a pending network reply is finished.
void setCacheDisabled(bool disabled)
Sets whether all network caching should be disabled.
void downloadProgress(int requestId, qint64 bytesReceived, qint64 bytesTotal)
Emitted when a network reply receives a progress report.
void requestEncounteredSslErrors(int requestId, const QList< QSslError > &errors)
Emitted when a network request encounters SSL errors.
void requestTimedOut(QNetworkReply *)
void requestAboutToBeCreated(QgsNetworkRequestParameters request)
Emitted when a network request is about to be created.
void requestAuthDetailsAdded(int requestId, const QString &realm, const QString &user, const QString &password)
Emitted when network authentication details have been added to a request.
bool cacheDisabled() const
Returns true if all network caching is disabled.
void requestRequiresAuth(int requestId, const QString &realm)
Emitted when a network request prompts an authentication request.
Q_DECL_DEPRECATED void requestCreated(QNetworkReply *)
Q_DECL_DEPRECATED void requestAboutToBeCreated(QNetworkAccessManager::Operation, const QNetworkRequest &, QIODevice *)
void requestTimedOut(QgsNetworkRequestParameters request)
Emitted when a network request has timed out.
bool useSystemProxy() const
Returns whether the system proxy should be used.
Network authentication handler, used for responding to network authentication requests during network...
virtual ~QgsNetworkAuthenticationHandler()=default
Encapsulates a network reply within a container which is inexpensive to copy and safe to pass between...
Encapsulates parameters and properties of a network request.
int requestId() const
Returns a unique ID identifying the request.
RequestAttributes
Custom request attributes.
@ AttributeInitiatorRequestId
Internal ID used by originator object to identify requests.
QgsNetworkRequestParameters()=default
Default constructor.
QNetworkAccessManager::Operation operation() const
Returns the request operation, e.g.
QNetworkRequest request() const
Returns the network request.
QString originatingThreadId() const
Returns a string identifying the thread which the request originated from.
QString initiatorClassName() const
Returns the class name of the object which initiated this request.
QByteArray content() const
Returns the request's content.
QVariant initiatorRequestId() const
Returns the internal ID used by the object which initiated this request to identify individual reques...
SSL error handler, used for responding to SSL errors encountered during network requests.
virtual ~QgsSslErrorHandler()=default
constexpr int sFilePrefixLength