diff options
author | Mårten Nordheim <marten.nordheim@qt.io> | 2024-01-18 12:27:08 +0100 |
---|---|---|
committer | Mårten Nordheim <marten.nordheim@qt.io> | 2024-01-18 21:56:46 +0100 |
commit | a3a48815cc9430d6f5c736a312ea4ea5c0895205 (patch) | |
tree | 46406bedd5f461dfd097a509f3032d7bd8d44b1b /src/network/access/qhttp2protocolhandler.cpp | |
parent | 84b792fa98b3a21119f16b0cd9443f90b1ad504d (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.cpp | 44 |
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; |