qnetworkrequest, qnetworkreply: port some methods to QBAV

[ChangeLog][QtNetwork] Ported hasRawHeader and rawHeader of
QNetworkReply and QNetworkRequest to QByteArrayView.

Change-Id: Ife71ba11b1ee8907c104dba3210d7a033568edf4
Reviewed-by: Mårten Nordheim <marten.nordheim@qt.io>
Reviewed-by: Edward Welbourne <edward.welbourne@qt.io>
This commit is contained in:
Anton Kudryavtsev 2023-08-25 16:10:24 +03:00
parent be7e5f94a1
commit 56bb4ac484
7 changed files with 68 additions and 13 deletions

View File

@ -26,6 +26,7 @@ qt_internal_add_module(Network
access/qnetworkreplyfileimpl.cpp access/qnetworkreplyfileimpl_p.h
access/qnetworkreplyimpl.cpp access/qnetworkreplyimpl_p.h
access/qnetworkrequest.cpp access/qnetworkrequest.h access/qnetworkrequest_p.h
compat/removed_api.cpp
kernel/qauthenticator.cpp kernel/qauthenticator.h kernel/qauthenticator_p.h
kernel/qhostaddress.cpp kernel/qhostaddress.h kernel/qhostaddress_p.h
kernel/qhostinfo.cpp kernel/qhostinfo.h kernel/qhostinfo_p.h
@ -64,6 +65,8 @@ qt_internal_add_module(Network
Qt::Core
PRIVATE_MODULE_INTERFACE
Qt::CorePrivate
NO_PCH_SOURCES
compat/removed_api.cpp
PRECOMPILED_HEADER
"../corelib/global/qt_pch.h"
GENERATE_CPP_EXPORTS

View File

@ -612,8 +612,9 @@ QVariant QNetworkReply::header(QNetworkRequest::KnownHeaders header) const
the remote server
\sa rawHeader()
\note In Qt versions prior to 6.7, this function took QByteArray only.
*/
bool QNetworkReply::hasRawHeader(const QByteArray &headerName) const
bool QNetworkReply::hasRawHeader(QByteArrayView headerName) const
{
Q_D(const QNetworkReply);
return d->findRawHeader(headerName) != d->rawHeaders.constEnd();
@ -627,13 +628,12 @@ bool QNetworkReply::hasRawHeader(const QByteArray &headerName) const
header field.
\sa setRawHeader(), hasRawHeader(), header()
\note In Qt versions prior to 6.7, this function took QByteArray only.
*/
QByteArray QNetworkReply::rawHeader(const QByteArray &headerName) const
QByteArray QNetworkReply::rawHeader(QByteArrayView headerName) const
{
Q_D(const QNetworkReply);
QNetworkHeadersPrivate::RawHeadersList::ConstIterator it =
d->findRawHeader(headerName);
if (it != d->rawHeaders.constEnd())
if (const auto it = d->findRawHeader(headerName); it != d->rawHeaders.constEnd())
return it->second;
return QByteArray();
}

View File

@ -97,9 +97,15 @@ public:
QVariant header(QNetworkRequest::KnownHeaders header) const;
// raw headers:
#if QT_NETWORK_REMOVED_SINCE(6, 7)
bool hasRawHeader(const QByteArray &headerName) const;
#endif
bool hasRawHeader(QByteArrayView headerName) const;
QList<QByteArray> rawHeaderList() const;
#if QT_NETWORK_REMOVED_SINCE(6, 7)
QByteArray rawHeader(const QByteArray &headerName) const;
#endif
QByteArray rawHeader(QByteArrayView headerName) const;
typedef QPair<QByteArray, QByteArray> RawHeaderPair;
const QList<RawHeaderPair>& rawHeaderPairs() const;

View File

@ -1314,7 +1314,7 @@ void QNetworkReplyHttpImplPrivate::checkForRedirect(const int statusCode)
// What do we do about the caching of the HTML note?
// The response to a 303 MUST NOT be cached, while the response to
// all of the others is cacheable if the headers indicate it to be
QByteArray header = q->rawHeader("location"_ba);
QByteArray header = q->rawHeader("location");
QUrl url = QUrl(QString::fromUtf8(header));
if (!url.isValid())
url = QUrl(QLatin1StringView(header));
@ -1358,7 +1358,7 @@ void QNetworkReplyHttpImplPrivate::replyDownloadMetaData(const QList<QPair<QByte
// A user having manually defined which encodings they accept is, for
// somwehat unknown (presumed legacy compatibility) reasons treated as
// disabling our decompression:
const bool autoDecompress = request.rawHeader("accept-encoding"_ba).isEmpty();
const bool autoDecompress = request.rawHeader("accept-encoding").isEmpty();
const bool shouldDecompress = isCompressed && autoDecompress;
// reconstruct the HTTP header
for (const auto &[key, originValue] : hm) {
@ -1859,7 +1859,7 @@ bool QNetworkReplyHttpImplPrivate::canResume() const
return false;
// Can only resume if server/resource supports Range header.
const auto acceptRangesheaderName = "Accept-Ranges"_ba;
constexpr auto acceptRangesheaderName = QByteArrayView("Accept-Ranges");
if (!q->hasRawHeader(acceptRangesheaderName) || q->rawHeader(acceptRangesheaderName) == "none")
return false;

View File

@ -617,8 +617,9 @@ void QNetworkRequest::setHeader(KnownHeaders header, const QVariant &value)
network request.
\sa rawHeader(), setRawHeader()
\note In Qt versions prior to 6.7, this function took QByteArray only.
*/
bool QNetworkRequest::hasRawHeader(const QByteArray &headerName) const
bool QNetworkRequest::hasRawHeader(QByteArrayView headerName) const
{
return d->findRawHeader(headerName) != d->rawHeaders.constEnd();
}
@ -632,12 +633,11 @@ bool QNetworkRequest::hasRawHeader(const QByteArray &headerName) const
Raw headers can be set with setRawHeader() or with setHeader().
\sa header(), setRawHeader()
\note In Qt versions prior to 6.7, this function took QByteArray only.
*/
QByteArray QNetworkRequest::rawHeader(const QByteArray &headerName) const
QByteArray QNetworkRequest::rawHeader(QByteArrayView headerName) const
{
QNetworkHeadersPrivate::RawHeadersList::ConstIterator it =
d->findRawHeader(headerName);
if (it != d->rawHeaders.constEnd())
if (const auto it = d->findRawHeader(headerName); it != d->rawHeaders.constEnd())
return it->second;
return QByteArray();
}

View File

@ -118,9 +118,15 @@ public:
void setHeader(KnownHeaders header, const QVariant &value);
// raw headers:
#if QT_NETWORK_REMOVED_SINCE(6, 7)
bool hasRawHeader(const QByteArray &headerName) const;
#endif
bool hasRawHeader(QByteArrayView headerName) const;
QList<QByteArray> rawHeaderList() const;
#if QT_NETWORK_REMOVED_SINCE(6, 7)
QByteArray rawHeader(const QByteArray &headerName) const;
#endif
QByteArray rawHeader(QByteArrayView headerName) const;
void setRawHeader(const QByteArray &headerName, const QByteArray &value);
// attributes

View File

@ -0,0 +1,40 @@
// Copyright (c) 2023 LLC «V Kontakte»
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
#define QT_NETWORK_BUILD_REMOVED_API
#include "qtnetworkglobal.h"
QT_USE_NAMESPACE
#if QT_NETWORK_REMOVED_SINCE(6, 7)
#include "qnetworkreply.h"
QByteArray QNetworkReply::rawHeader(const QByteArray &headerName) const
{
return rawHeader(qToByteArrayViewIgnoringNull(headerName));
}
bool QNetworkReply::hasRawHeader(const QByteArray &headerName) const
{
return hasRawHeader(qToByteArrayViewIgnoringNull(headerName));
}
#include "qnetworkrequest.h"
QByteArray QNetworkRequest::rawHeader(const QByteArray &headerName) const
{
return rawHeader(qToByteArrayViewIgnoringNull(headerName));
}
bool QNetworkRequest::hasRawHeader(const QByteArray &headerName) const
{
return hasRawHeader(qToByteArrayViewIgnoringNull(headerName));
}
// #include "qotherheader.h"
// // implement removed functions from qotherheader.h
// order sections alphabetically
#endif // QT_NETWORK_REMOVED_SINCE(6, 7)