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();
|
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
|
Returns query parameters that are added to individual requests' query
|
||||||
parameters. The query parameters are added to any potential 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())
|
if (!bearerToken.isEmpty())
|
||||||
request.setRawHeader("Authorization"_ba, Bearer + bearerToken);
|
request.setRawHeader("Authorization"_ba, Bearer + bearerToken);
|
||||||
|
|
||||||
|
request.setTransferTimeout(transferTimeout);
|
||||||
return request;
|
return request;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -485,6 +512,7 @@ bool QNetworkRequestFactoryPrivate::equals(
|
|||||||
const QNetworkRequestFactoryPrivate &other) const noexcept
|
const QNetworkRequestFactoryPrivate &other) const noexcept
|
||||||
{
|
{
|
||||||
return
|
return
|
||||||
|
transferTimeout == other.transferTimeout &&
|
||||||
#if QT_CONFIG(ssl)
|
#if QT_CONFIG(ssl)
|
||||||
sslConfig == other.sslConfig &&
|
sslConfig == other.sslConfig &&
|
||||||
#endif
|
#endif
|
||||||
|
@ -12,6 +12,8 @@
|
|||||||
#include <QtCore/qurlquery.h>
|
#include <QtCore/qurlquery.h>
|
||||||
#include <QtCore/qurl.h>
|
#include <QtCore/qurl.h>
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
#if QT_CONFIG(ssl)
|
#if QT_CONFIG(ssl)
|
||||||
@ -56,6 +58,9 @@ public:
|
|||||||
Q_NETWORK_EXPORT void setBearerToken(const QByteArray &token);
|
Q_NETWORK_EXPORT void setBearerToken(const QByteArray &token);
|
||||||
Q_NETWORK_EXPORT void clearBearerToken();
|
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 QUrlQuery queryParameters() const;
|
||||||
Q_NETWORK_EXPORT void setQueryParameters(const QUrlQuery &query);
|
Q_NETWORK_EXPORT void setQueryParameters(const QUrlQuery &query);
|
||||||
Q_NETWORK_EXPORT void clearQueryParameters();
|
Q_NETWORK_EXPORT void clearQueryParameters();
|
||||||
|
@ -43,6 +43,7 @@ public:
|
|||||||
QHttpHeaders headers;
|
QHttpHeaders headers;
|
||||||
QByteArray bearerToken;
|
QByteArray bearerToken;
|
||||||
QUrlQuery queryParameters;
|
QUrlQuery queryParameters;
|
||||||
|
std::chrono::milliseconds transferTimeout{0};
|
||||||
};
|
};
|
||||||
|
|
||||||
QT_END_NAMESPACE
|
QT_END_NAMESPACE
|
||||||
|
@ -542,6 +542,30 @@ void QRestAccessManager::abortRequests()
|
|||||||
req->abort();
|
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
|
Returns the underlying QNetworkAccessManager instance. The instance
|
||||||
can be used for accessing less-frequently used features and configurations.
|
can be used for accessing less-frequently used features and configurations.
|
||||||
|
@ -6,6 +6,8 @@
|
|||||||
|
|
||||||
#include <QtNetwork/qnetworkaccessmanager.h>
|
#include <QtNetwork/qnetworkaccessmanager.h>
|
||||||
|
|
||||||
|
#include <chrono>
|
||||||
|
|
||||||
QT_BEGIN_NAMESPACE
|
QT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
class QRestReply;
|
class QRestReply;
|
||||||
@ -69,6 +71,9 @@ public:
|
|||||||
bool deletesRepliesOnFinished() const;
|
bool deletesRepliesOnFinished() const;
|
||||||
void setDeletesRepliesOnFinished(bool autoDelete);
|
void setDeletesRepliesOnFinished(bool autoDelete);
|
||||||
|
|
||||||
|
void setTransferTimeout(std::chrono::milliseconds timeout);
|
||||||
|
std::chrono::milliseconds transferTimeout() const;
|
||||||
|
|
||||||
void abortRequests();
|
void abortRequests();
|
||||||
|
|
||||||
QREST_METHOD_NO_DATA(deleteResource)
|
QREST_METHOD_NO_DATA(deleteResource)
|
||||||
|
@ -10,6 +10,7 @@
|
|||||||
#include <QtCore/qurl.h>
|
#include <QtCore/qurl.h>
|
||||||
|
|
||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
class tst_QNetworkRequestFactory : public QObject
|
class tst_QNetworkRequestFactory : public QObject
|
||||||
{
|
{
|
||||||
@ -23,6 +24,7 @@ private Q_SLOTS:
|
|||||||
void headers();
|
void headers();
|
||||||
void bearerToken();
|
void bearerToken();
|
||||||
void operators();
|
void operators();
|
||||||
|
void timeout();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
const QUrl url1{u"http://foo.io"_s};
|
const QUrl url1{u"http://foo.io"_s};
|
||||||
@ -310,5 +312,21 @@ void tst_QNetworkRequestFactory::operators()
|
|||||||
QCOMPARE(factory5.baseUrl(), url1);
|
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)
|
QTEST_MAIN(tst_QNetworkRequestFactory)
|
||||||
#include "tst_qnetworkrequestfactory.moc"
|
#include "tst_qnetworkrequestfactory.moc"
|
||||||
|
@ -6,6 +6,7 @@
|
|||||||
#include <QtNetwork/qtcpsocket.h>
|
#include <QtNetwork/qtcpsocket.h>
|
||||||
|
|
||||||
#include <QtCore/qcoreapplication.h>
|
#include <QtCore/qcoreapplication.h>
|
||||||
|
|
||||||
#include <private/qlocale_p.h>
|
#include <private/qlocale_p.h>
|
||||||
|
|
||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
|
@ -19,6 +19,7 @@
|
|||||||
#include <QtCore/qstringconverter.h>
|
#include <QtCore/qstringconverter.h>
|
||||||
|
|
||||||
using namespace Qt::StringLiterals;
|
using namespace Qt::StringLiterals;
|
||||||
|
using namespace std::chrono_literals;
|
||||||
|
|
||||||
class tst_QRestAccessManager : public QObject
|
class tst_QRestAccessManager : public QObject
|
||||||
{
|
{
|
||||||
@ -40,6 +41,7 @@ private slots:
|
|||||||
void text();
|
void text();
|
||||||
void download();
|
void download();
|
||||||
void upload();
|
void upload();
|
||||||
|
void timeout();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
void memberHandler(QRestReply *reply);
|
void memberHandler(QRestReply *reply);
|
||||||
@ -893,5 +895,19 @@ void tst_QRestAccessManager::upload()
|
|||||||
QCOMPARE(last.at(0).toLongLong(), expectedData.size());
|
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)
|
QTEST_MAIN(tst_QRestAccessManager)
|
||||||
#include "tst_qrestaccessmanager.moc"
|
#include "tst_qrestaccessmanager.moc"
|
||||||
|
Loading…
x
Reference in New Issue
Block a user