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( __FILE__ ).mid( sFilePrefixLength ) + ':' + QString::number( __LINE__ ) + " (" + __FUNCTION__ + ")" ); 42 #define QgsSetRequestInitiatorId(request, str) request.setAttribute( static_cast< QNetworkRequest::Attribute >( QgsNetworkRequestParameters::AttributeInitiatorRequestId ), 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 );
482 Q_DECL_DEPRECATED
void requestAboutToBeCreated( QNetworkAccessManager::Operation,
const QNetworkRequest &, QIODevice * )
SIP_DEPRECATED;
540 void downloadProgress(
int requestId, qint64 bytesReceived, qint64 bytesTotal );
557 void requestRequiresAuth(
int requestId,
const QString &realm );
574 void requestAuthDetailsAdded(
int requestId,
const QString &realm,
const QString &user,
const QString &password );
592 void requestEncounteredSslErrors(
int requestId,
const QList<QSslError> &errors );
597 void sslErrorsOccurred( QNetworkReply *,
const QList<QSslError> &errors );
598 void sslErrorsHandled( QNetworkReply *reply );
607 Q_DECL_DEPRECATED
void requestCreated( QNetworkReply * )
SIP_DEPRECATED;
609 void requestTimedOut( QNetworkReply * );
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 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.