diff options
author | Juha Vuolle <juha.vuolle@qt.io> | 2023-08-08 11:51:36 +0300 |
---|---|---|
committer | Juha Vuolle <juha.vuolle@qt.io> | 2023-12-08 15:53:35 +0200 |
commit | 669a48e5ae6bcc051b71a0de09dd489275fb74aa (patch) | |
tree | 6344eb654d82aff1379de6386f0e28ee108790cc /src/network/access | |
parent | 090991123dd82796fe956e4153bc26ace22280ca (diff) |
Functions for setting request transfer timeouts
Added to both QNetworkRequestFactory and QRestAccessManager
Task-number: QTBUG-114717
Change-Id: Ibca55bba548a034a0da7ea60550642c150b63dc2
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Reviewed-by: Marc Mutz <marc.mutz@qt.io>
Reviewed-by: MÃ¥rten Nordheim <marten.nordheim@qt.io>
Diffstat (limited to 'src/network/access')
-rw-r--r-- | src/network/access/qnetworkrequestfactory.cpp | 28 | ||||
-rw-r--r-- | src/network/access/qnetworkrequestfactory.h | 5 | ||||
-rw-r--r-- | src/network/access/qnetworkrequestfactory_p.h | 1 | ||||
-rw-r--r-- | src/network/access/qrestaccessmanager.cpp | 24 | ||||
-rw-r--r-- | src/network/access/qrestaccessmanager.h | 5 |
5 files changed, 63 insertions, 0 deletions
diff --git a/src/network/access/qnetworkrequestfactory.cpp b/src/network/access/qnetworkrequestfactory.cpp index 3f039515cb..e97fe1c68b 100644 --- a/src/network/access/qnetworkrequestfactory.cpp +++ b/src/network/access/qnetworkrequestfactory.cpp @@ -350,6 +350,32 @@ void QNetworkRequestFactory::clearBearerToken() } /*! + Sets \a timeout used for transfers. + + \sa transferTimeout(), QNetworkRequest::setTransferTimeout(), + QRestAccessManager::setTransferTimeout() +*/ +void QNetworkRequestFactory::setTransferTimeout(std::chrono::milliseconds timeout) +{ + if (d->transferTimeout == timeout) + return; + + d.detach(); + d->transferTimeout = timeout; +} + +/*! + Returns the timeout used for transfers. + + \sa setTransferTimeout(), QNetworkRequest::transferTimeout(), + QRestAccessManager::transferTimeout() +*/ +std::chrono::milliseconds QNetworkRequestFactory::transferTimeout() const +{ + return d->transferTimeout; +} + +/*! Returns query parameters that are added to individual requests' query parameters. The query parameters are added to any potential query parameters provided with the individual \l request() calls. @@ -426,6 +452,7 @@ QNetworkRequest QNetworkRequestFactoryPrivate::newRequest(const QUrl &url) const if (!bearerToken.isEmpty()) request.setRawHeader("Authorization"_ba, Bearer + bearerToken); + request.setTransferTimeout(transferTimeout); return request; } @@ -485,6 +512,7 @@ bool QNetworkRequestFactoryPrivate::equals( const QNetworkRequestFactoryPrivate &other) const noexcept { return + transferTimeout == other.transferTimeout && #if QT_CONFIG(ssl) sslConfig == other.sslConfig && #endif diff --git a/src/network/access/qnetworkrequestfactory.h b/src/network/access/qnetworkrequestfactory.h index 901a61decc..b84fa0a39b 100644 --- a/src/network/access/qnetworkrequestfactory.h +++ b/src/network/access/qnetworkrequestfactory.h @@ -12,6 +12,8 @@ #include <QtCore/qurlquery.h> #include <QtCore/qurl.h> +#include <chrono> + QT_BEGIN_NAMESPACE #if QT_CONFIG(ssl) @@ -56,6 +58,9 @@ public: Q_NETWORK_EXPORT void setBearerToken(const QByteArray &token); Q_NETWORK_EXPORT void clearBearerToken(); + Q_NETWORK_EXPORT void setTransferTimeout(std::chrono::milliseconds timeout); + Q_NETWORK_EXPORT std::chrono::milliseconds transferTimeout() const; + Q_NETWORK_EXPORT QUrlQuery queryParameters() const; Q_NETWORK_EXPORT void setQueryParameters(const QUrlQuery &query); Q_NETWORK_EXPORT void clearQueryParameters(); diff --git a/src/network/access/qnetworkrequestfactory_p.h b/src/network/access/qnetworkrequestfactory_p.h index d90d83361b..8378669ce9 100644 --- a/src/network/access/qnetworkrequestfactory_p.h +++ b/src/network/access/qnetworkrequestfactory_p.h @@ -43,6 +43,7 @@ public: QHttpHeaders headers; QByteArray bearerToken; QUrlQuery queryParameters; + std::chrono::milliseconds transferTimeout{0}; }; QT_END_NAMESPACE diff --git a/src/network/access/qrestaccessmanager.cpp b/src/network/access/qrestaccessmanager.cpp index c4efa846a2..be5c64a2dc 100644 --- a/src/network/access/qrestaccessmanager.cpp +++ b/src/network/access/qrestaccessmanager.cpp @@ -543,6 +543,30 @@ void QRestAccessManager::abortRequests() } /*! + Sets \a timeout used for transfers. + + \sa QNetworkAccessManager::setTransferTimeout(), transferTimeout(), + QNetworkRequestFactory::setTransferTimeout() +*/ +void QRestAccessManager::setTransferTimeout(std::chrono::milliseconds timeout) +{ + Q_D(QRestAccessManager); + d->qnam->setTransferTimeout(timeout); +} + +/*! + Returns the timeout used for transfers. + + \sa setTransferTimeout(), QNetworkAccessManager::transferTimeoutAsDuration(), + QNetworkRequestFactory::transferTimeout() +*/ +std::chrono::milliseconds QRestAccessManager::transferTimeout() const +{ + Q_D(const QRestAccessManager); + return d->qnam->transferTimeoutAsDuration(); +} + +/*! Returns the underlying QNetworkAccessManager instance. The instance can be used for accessing less-frequently used features and configurations. diff --git a/src/network/access/qrestaccessmanager.h b/src/network/access/qrestaccessmanager.h index 7b67486a2e..6cfca383b4 100644 --- a/src/network/access/qrestaccessmanager.h +++ b/src/network/access/qrestaccessmanager.h @@ -6,6 +6,8 @@ #include <QtNetwork/qnetworkaccessmanager.h> +#include <chrono> + QT_BEGIN_NAMESPACE class QRestReply; @@ -69,6 +71,9 @@ public: bool deletesRepliesOnFinished() const; void setDeletesRepliesOnFinished(bool autoDelete); + void setTransferTimeout(std::chrono::milliseconds timeout); + std::chrono::milliseconds transferTimeout() const; + void abortRequests(); QREST_METHOD_NO_DATA(deleteResource) |