summaryrefslogtreecommitdiffstats
path: root/src/network/access
diff options
context:
space:
mode:
authorJuha Vuolle <juha.vuolle@qt.io>2023-08-08 11:51:36 +0300
committerJuha Vuolle <juha.vuolle@qt.io>2023-12-08 15:53:35 +0200
commit669a48e5ae6bcc051b71a0de09dd489275fb74aa (patch)
tree6344eb654d82aff1379de6386f0e28ee108790cc /src/network/access
parent090991123dd82796fe956e4153bc26ace22280ca (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.cpp28
-rw-r--r--src/network/access/qnetworkrequestfactory.h5
-rw-r--r--src/network/access/qnetworkrequestfactory_p.h1
-rw-r--r--src/network/access/qrestaccessmanager.cpp24
-rw-r--r--src/network/access/qrestaccessmanager.h5
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)