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>
This commit is contained in:
parent
090991123d
commit
669a48e5ae
@ -349,6 +349,32 @@ void QNetworkRequestFactory::clearBearerToken()
|
||||
d->bearerToken.clear();
|
||||
}
|
||||
|
||||
/*!
|
||||
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
|
||||
@ -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
|
||||
|
@ -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();
|
||||
|
@ -43,6 +43,7 @@ public:
|
||||
QHttpHeaders headers;
|
||||
QByteArray bearerToken;
|
||||
QUrlQuery queryParameters;
|
||||
std::chrono::milliseconds transferTimeout{0};
|
||||
};
|
||||
|
||||
QT_END_NAMESPACE
|
||||
|
@ -542,6 +542,30 @@ void QRestAccessManager::abortRequests()
|
||||
req->abort();
|
||||
}
|
||||
|
||||
/*!
|
||||
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.
|
||||
|
@ -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)
|
||||
|
@ -10,6 +10,7 @@
|
||||
#include <QtCore/qurl.h>
|
||||
|
||||
using namespace Qt::StringLiterals;
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
class tst_QNetworkRequestFactory : public QObject
|
||||
{
|
||||
@ -23,6 +24,7 @@ private Q_SLOTS:
|
||||
void headers();
|
||||
void bearerToken();
|
||||
void operators();
|
||||
void timeout();
|
||||
|
||||
private:
|
||||
const QUrl url1{u"http://foo.io"_s};
|
||||
@ -310,5 +312,21 @@ void tst_QNetworkRequestFactory::operators()
|
||||
QCOMPARE(factory5.baseUrl(), url1);
|
||||
}
|
||||
|
||||
void tst_QNetworkRequestFactory::timeout()
|
||||
{
|
||||
constexpr auto defaultTimeout = 0ms;
|
||||
constexpr auto timeout = 150ms;
|
||||
|
||||
QNetworkRequestFactory factory;
|
||||
QNetworkRequest request = factory.request();
|
||||
QCOMPARE(factory.transferTimeout(), defaultTimeout);
|
||||
QCOMPARE(request.transferTimeoutAsDuration(), defaultTimeout);
|
||||
|
||||
factory.setTransferTimeout(timeout);
|
||||
request = factory.request();
|
||||
QCOMPARE(factory.transferTimeout(), timeout);
|
||||
QCOMPARE(request.transferTimeoutAsDuration(), timeout);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QNetworkRequestFactory)
|
||||
#include "tst_qnetworkrequestfactory.moc"
|
||||
|
@ -6,6 +6,7 @@
|
||||
#include <QtNetwork/qtcpsocket.h>
|
||||
|
||||
#include <QtCore/qcoreapplication.h>
|
||||
|
||||
#include <private/qlocale_p.h>
|
||||
|
||||
using namespace Qt::StringLiterals;
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <QtCore/qstringconverter.h>
|
||||
|
||||
using namespace Qt::StringLiterals;
|
||||
using namespace std::chrono_literals;
|
||||
|
||||
class tst_QRestAccessManager : public QObject
|
||||
{
|
||||
@ -40,6 +41,7 @@ private slots:
|
||||
void text();
|
||||
void download();
|
||||
void upload();
|
||||
void timeout();
|
||||
|
||||
private:
|
||||
void memberHandler(QRestReply *reply);
|
||||
@ -893,5 +895,19 @@ void tst_QRestAccessManager::upload()
|
||||
QCOMPARE(last.at(0).toLongLong(), expectedData.size());
|
||||
}
|
||||
|
||||
void tst_QRestAccessManager::timeout()
|
||||
{
|
||||
constexpr auto defaultTimeout = 0ms;
|
||||
constexpr auto timeout = 150ms;
|
||||
|
||||
QRestAccessManager manager;
|
||||
QCOMPARE(manager.transferTimeout(), defaultTimeout);
|
||||
QCOMPARE(manager.networkAccessManager()->transferTimeoutAsDuration(), defaultTimeout);
|
||||
|
||||
manager.setTransferTimeout(timeout);
|
||||
QCOMPARE(manager.transferTimeout(), timeout);
|
||||
QCOMPARE(manager.networkAccessManager()->transferTimeoutAsDuration(), timeout);
|
||||
}
|
||||
|
||||
QTEST_MAIN(tst_QRestAccessManager)
|
||||
#include "tst_qrestaccessmanager.moc"
|
||||
|
Loading…
x
Reference in New Issue
Block a user