546 constexpr QByteArrayView names[] = {
":authority",
":method",
":path",
":scheme" };
547 enum PseudoHeaderEnum
554 std::array<
std::optional<QByteArrayView>,
std::size(names)> pseudoHeaders{};
555 for (
const auto &field : requestHeader) {
556 const auto *it = std::find(std::begin(names), std::end(names), QByteArrayView(field.name));
557 if (it != std::end(names)) {
558 const auto index = std::distance(std::begin(names), it);
559 if (field.value.isEmpty() || pseudoHeaders.at(index).has_value())
561 pseudoHeaders[index] = field.value;
565 auto optionalIsSet = [](
const auto &x) {
return x.has_value(); };
566 if (!
std::all_of(pseudoHeaders.begin(), pseudoHeaders.end(), optionalIsSet)) {
571 const QByteArrayView method = pseudoHeaders[Method].value();
572 if (method.compare(
"get", Qt::CaseInsensitive) != 0 &&
573 method.compare(
"head", Qt::CaseInsensitive) != 0) {
578 url.setScheme(QLatin1StringView(pseudoHeaders[Scheme].value()));
579 url.setAuthority(QLatin1StringView(pseudoHeaders[Authority].value()));
580 url.setPath(QLatin1StringView(pseudoHeaders[Path].value()));