diff options
author | Juha Vuolle <juha.vuolle@qt.io> | 2023-11-02 14:41:39 +0200 |
---|---|---|
committer | Juha Vuolle <juha.vuolle@qt.io> | 2023-12-08 15:53:34 +0200 |
commit | 090991123dd82796fe956e4153bc26ace22280ca (patch) | |
tree | 662642bf647c898e8f9f0975071da6decd0ffae7 /src/network/access/qnetworkrequest.cpp | |
parent | 298d5a4bbd3d5f68034c5419f1b80e4535a5c6f5 (diff) |
Support for std::chrono as transferTimeout type
Provide users with means to use more modern time/duration type.
Please note that since QTimer does not currently support
timeouts larger than 'int' milliseconds, the limit on how long
durations can be expressed, remains. This should not
be an issue in practice with network requests, as a typical
int32 system can express timeouts of ~24 days.
[ChangeLog][QtNetwork][QNetworkAccessManager] Add std::chrono
support for transfer timeout.
[ChangeLog][QtNetwork][QNetworkRequest] Add std::chrono support
for transfer timeout.
Fixes: QTBUG-118714
Change-Id: If85678a5994c59bac5926e47f98c9cfeb2a07c30
Reviewed-by: Ivan Solovev <ivan.solovev@qt.io>
Diffstat (limited to 'src/network/access/qnetworkrequest.cpp')
-rw-r--r-- | src/network/access/qnetworkrequest.cpp | 57 |
1 files changed, 46 insertions, 11 deletions
diff --git a/src/network/access/qnetworkrequest.cpp b/src/network/access/qnetworkrequest.cpp index 9c13d5474d..10ecf6dd7b 100644 --- a/src/network/access/qnetworkrequest.cpp +++ b/src/network/access/qnetworkrequest.cpp @@ -28,6 +28,7 @@ QT_BEGIN_NAMESPACE using namespace Qt::StringLiterals; +using namespace std::chrono_literals; QT_IMPL_METATYPE_EXTERN(QNetworkRequest) QT_IMPL_METATYPE_EXTERN_TAGGED(QNetworkRequest::RedirectPolicy, QNetworkRequest__RedirectPolicy) @@ -407,6 +408,16 @@ QT_IMPL_METATYPE_EXTERN_TAGGED(QNetworkRequest::RedirectPolicy, QNetworkRequest_ \value DefaultTransferTimeoutConstant The transfer timeout in milliseconds. Used if setTimeout() is called without an argument. + + \sa QNetworkRequest::DefaultTransferTimeout + */ + +/*! + \variable QNetworkRequest::DefaultTransferTimeout + + The transfer timeout with \l {QNetworkRequest::TransferTimeoutConstant} + milliseconds. Used if setTransferTimeout() is called without an + argument. */ class QNetworkRequestPrivate: public QSharedData, public QNetworkHeadersPrivate @@ -419,7 +430,6 @@ public: , sslConfiguration(nullptr) #endif , maxRedirectsAllowed(maxRedirectCount) - , transferTimeout(0) { qRegisterMetaType<QNetworkRequest>(); } ~QNetworkRequestPrivate() { @@ -479,7 +489,7 @@ public: QHttp2Configuration h2Configuration; qint64 decompressedSafetyCheckThreshold = 10ll * 1024ll * 1024ll; #endif - int transferTimeout; + std::chrono::milliseconds transferTimeout = 0ms; }; /*! @@ -977,14 +987,11 @@ void QNetworkRequest::setDecompressedSafetyCheckThreshold(qint64 threshold) Returns the timeout used for transfers, in milliseconds. - This timeout is zero if setTransferTimeout hasn't been - called, which means that the timeout is not used. - - \sa setTransferTimeout + \sa setTransferTimeout() */ int QNetworkRequest::transferTimeout() const { - return d->transferTimeout; + return int(d->transferTimeout.count()); } /*! @@ -992,18 +999,46 @@ int QNetworkRequest::transferTimeout() const Sets \a timeout as the transfer timeout in milliseconds. + \sa setTransferTimeout(std::chrono::milliseconds), + transferTimeout(), transferTimeoutAsDuration() +*/ +void QNetworkRequest::setTransferTimeout(int timeout) +{ + d->transferTimeout = std::chrono::milliseconds(timeout); +} + +/*! + \since 6.7 + + Returns the timeout duration after which the transfer is aborted if no + data is exchanged. + + The default duration is zero, which means that the timeout is not used. + + \sa setTransferTimeout(std::chrono::milliseconds) +*/ +std::chrono::milliseconds QNetworkRequest::transferTimeoutAsDuration() const +{ + return d->transferTimeout; +} + +/*! + \since 6.7 + + Sets the timeout \a duration to abort the transfer if no data is exchanged. + Transfers are aborted if no bytes are transferred before the timeout expires. Zero means no timer is set. If no argument is provided, the timeout is - QNetworkRequest::DefaultTransferTimeoutConstant. If this function + QNetworkRequest::DefaultTransferTimeout. If this function is not called, the timeout is disabled and has the value zero. - \sa transferTimeout + \sa transferTimeoutAsDuration() */ -void QNetworkRequest::setTransferTimeout(int timeout) +void QNetworkRequest::setTransferTimeout(std::chrono::milliseconds duration) { - d->transferTimeout = timeout; + d->transferTimeout = duration; } #endif // QT_CONFIG(http) || defined (Q_OS_WASM) |