summaryrefslogtreecommitdiffstats
path: root/src/network/access/qhttp2protocolhandler.cpp
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2024-01-18 12:27:08 +0100
committerMårten Nordheim <marten.nordheim@qt.io>2024-01-18 21:56:46 +0100
commita3a48815cc9430d6f5c736a312ea4ea5c0895205 (patch)
tree46406bedd5f461dfd097a509f3032d7bd8d44b1b /src/network/access/qhttp2protocolhandler.cpp
parent84b792fa98b3a21119f16b0cd9443f90b1ad504d (diff)
QH2Connection: Fix issue with unity-build/odr
The static function appeared in two places, and in a unity-build this fails quite visibly. Pick-to: 6.7 Change-Id: I60000d01194a2c79ca9c101f2a6d3f77f469f1a7 Reviewed-by: Alexey Edelev <alexey.edelev@qt.io> Reviewed-by: Nodir Temirkhodjaev <nodir.temir@gmail.com>
Diffstat (limited to 'src/network/access/qhttp2protocolhandler.cpp')
-rw-r--r--src/network/access/qhttp2protocolhandler.cpp44
1 files changed, 1 insertions, 43 deletions
diff --git a/src/network/access/qhttp2protocolhandler.cpp b/src/network/access/qhttp2protocolhandler.cpp
index 4e7c1e1d61..60f7ea12a6 100644
--- a/src/network/access/qhttp2protocolhandler.cpp
+++ b/src/network/access/qhttp2protocolhandler.cpp
@@ -1468,54 +1468,12 @@ quint32 QHttp2ProtocolHandler::allocateStreamID()
return streamID;
}
-static std::optional<QUrl> makeUrl(const HPack::HttpHeader &requestHeader)
-{
- constexpr QByteArrayView names[] = { ":authority", ":method", ":path", ":scheme" };
- enum PseudoHeaderEnum
- {
- Authority,
- Method,
- Path,
- Scheme
- };
- std::array<std::optional<QByteArrayView>, std::size(names)> pseudoHeaders{};
- for (const auto &field : requestHeader) {
- const auto it = std::find(std::begin(names), std::end(names), QByteArrayView(field.name));
- if (it != std::end(names)) {
- const auto index = std::distance(std::begin(names), it);
- if (field.value.isEmpty() || pseudoHeaders.at(index).has_value())
- return {};
- pseudoHeaders[index] = field.value;
- }
- }
-
- if (!std::all_of(pseudoHeaders.begin(), pseudoHeaders.end(), [](const auto &x) { return x.has_value();})) {
- // All four required, HTTP/2 8.1.2.3.
- return {};
- }
-
- const QByteArrayView method = pseudoHeaders[Method].value();
- if (method.compare("get", Qt::CaseInsensitive) != 0 &&
- method.compare("head", Qt::CaseInsensitive) != 0) {
- return {};
- }
-
- QUrl url;
- url.setScheme(QLatin1StringView(pseudoHeaders[Scheme].value()));
- url.setAuthority(QLatin1StringView(pseudoHeaders[Authority].value()));
- url.setPath(QLatin1StringView(pseudoHeaders[Path].value()));
-
- if (!url.isValid())
- return {};
- return url;
-}
-
bool QHttp2ProtocolHandler::tryReserveStream(const Http2::Frame &pushPromiseFrame,
const HPack::HttpHeader &requestHeader)
{
Q_ASSERT(pushPromiseFrame.type() == FrameType::PUSH_PROMISE);
- const auto url = makeUrl(requestHeader);
+ const auto url = HPack::makePromiseKeyUrl(requestHeader);
if (!url.has_value())
return false;