356 return QtPrivate::qstrnicmp_impl(lhs.data(), lhs.size(), rhs.data(), rhs.size()) < 0;
1101 const QDebugStateSaver saver(debug);
1102 debug.resetFormat().nospace();
1104 debug <<
"QHttpHeaders(";
1106 debug <<
"headers = ";
1107 const char *separator =
"";
1108 for (
const auto &h : headers.d->headers) {
1109 debug << separator << h.name.asView() <<
':' << h.value;
1300 if (!isValidHttpHeaderNameField(name) || !isValidHttpHeaderValueField(value))
1304 d->headers.insert(i, {HeaderName{name}, normalizedValue(value)});
1334 if (!isValidHttpHeaderNameField(name) || !isValidHttpHeaderValueField(newValue))
1338 d->headers.replace(i, {HeaderName{name}, normalizedValue(newValue)});
1348 if (!isValidHttpHeaderValueField(newValue))
1352 d->headers.replace(i, {HeaderName{name}, normalizedValue(newValue)});
1723std::optional<QList<QDateTime>>
QHttpHeaders::dateTimeValues(QAnyStringView name)
const
1725 QList<QDateTime> results;
1726 d->forEachHeader(name, [&](QByteArrayView value) {
1727 QDateTime dt = QNetworkHeadersPrivate::fromHttpDate(value);
1729 results.append(std::move(dt));
1731 return results.isEmpty() ?
std::nullopt :
1732 std::make_optional(
std::move(results));
1792 QList<QHttpHeaderRange> results;
1794 const QList<QByteArray> rangesVals = values(WellKnownHeader::Range);
1796 for (QByteArrayView rangesVal : rangesVals) {
1797 if (!rangesVal.startsWith(
"bytes="_ba))
1800 rangesVal = rangesVal.slice(6);
1802 for (QLatin1StringView part : qTokenize(QLatin1StringView(rangesVal), u',')) {
1803 const qsizetype dashPos = part.indexOf(u'-');
1805 return std::nullopt;
1807 const QLatin1StringView startStr = part.sliced(0, dashPos).trimmed();
1808 const QLatin1StringView endStr = part.sliced(dashPos + 1).trimmed();
1810 bool okStart =
false;
1813 std::optional<qint64> start;
1814 std::optional<qint64> end;
1816 if (!startStr.isEmpty()) {
1817 const qint64 startVal = startStr.toLongLong(&okStart);
1822 if (!endStr.isEmpty()) {
1823 const qint64 endVal = endStr.toLongLong(&okEnd);
1828 if ((!startStr.isEmpty() && !okStart) || (!endStr.isEmpty() && !okEnd))
1829 return std::nullopt;
1831 QHttpHeaderRange range{start, end};
1832 if (!range.isValid())
1833 return std::nullopt;
1835 results.append(range);
1866 if (ranges.isEmpty()) {
1867 removeAll(WellKnownHeader::Range);
1871 QByteArray result(
"bytes=");
1872 for (qsizetype i = 0; i < ranges.size(); ++i) {
1879 result += QByteArray::number(*range.start);
1882 result += QByteArray::number(*range.end);
1885 replaceOrAppend(WellKnownHeader::Range, result);
1931QList<std::pair<QByteArray, QByteArray>>
QHttpHeaders::toListOfPairs()
const
1933 QList<std::pair<QByteArray, QByteArray>> list;
1936 list.reserve(size());
1937 for (
const auto & h : std::as_const(d->headers))
1938 list.append({h.name.asByteArray().toLower(), h.value});
1948 QMultiMap<QByteArray, QByteArray> map;
1951 for (
const auto &h : std::as_const(d->headers))
1952 map.insert(h.name.asByteArray().toLower(), h.value);
1962 QMultiHash<QByteArray, QByteArray> hash;
1965 hash.reserve(size());
1966 for (
const auto &h : std::as_const(d->headers))
1967 hash.insert(h.name.asByteArray().toLower(), h.value);