535 constexpr QByteArrayView names[] = {
":authority",
":method",
":path",
":scheme" };
536 enum PseudoHeaderEnum
543 std::array<
std::optional<QByteArrayView>,
std::size(names)> pseudoHeaders{};
544 for (
const auto &field : requestHeader) {
545 const auto *it = std::find(std::begin(names), std::end(names), QByteArrayView(field.name));
546 if (it != std::end(names)) {
547 const auto index = std::distance(std::begin(names), it);
548 if (field.value.isEmpty() || pseudoHeaders.at(index).has_value())
550 pseudoHeaders[index] = field.value;
554 auto optionalIsSet = [](
const auto &x) {
return x.has_value(); };
555 if (!
std::all_of(pseudoHeaders.begin(), pseudoHeaders.end(), optionalIsSet)) {
560 const QByteArrayView method = pseudoHeaders[Method].value();
561 if (method.compare(
"get", Qt::CaseInsensitive) != 0 &&
562 method.compare(
"head", Qt::CaseInsensitive) != 0) {
567 url.setScheme(QLatin1StringView(pseudoHeaders[Scheme].value()));
568 url.setAuthority(QLatin1StringView(pseudoHeaders[Authority].value()));
569 url.setPath(QLatin1StringView(pseudoHeaders[Path].value()));