391 return QtPrivate::qstrnicmp_impl(lhs.data(), lhs.size(), rhs.data(), rhs.size()) < 0;
1006 if (it != d->headers.end()) {
1009 it->value =
std::move(value);
1015 d->headers.append(
Header{name,
std::move(value)});
1136 const QDebugStateSaver saver(debug);
1137 debug.resetFormat().nospace();
1139 debug <<
"QHttpHeaders(";
1141 debug <<
"headers = ";
1142 const char *separator =
"";
1143 for (
const auto &h : headers.d->headers) {
1144 debug << separator << h.name.asView() <<
':' << h.value;
1335 if (!isValidHttpHeaderNameField(name) || !isValidHttpHeaderValueField(value))
1339 d->headers.insert(i, {HeaderName{name}, normalizedValue(value)});
1369 if (!isValidHttpHeaderNameField(name) || !isValidHttpHeaderValueField(newValue))
1373 d->headers.replace(i, {HeaderName{name}, normalizedValue(newValue)});
1383 if (!isValidHttpHeaderValueField(newValue))
1387 d->headers.replace(i, {HeaderName{name}, normalizedValue(newValue)});
1650std::optional<QList<qint64>>
QHttpHeaders::intValues(QAnyStringView name)
const
1652 QList<qint64> results;
1653 d->forEachHeader(name, [&](QByteArrayView value) {
1655 qint64 result = value.toLongLong(&ok);
1657 results.append(result);
1659 return results.isEmpty() ? std::nullopt :
1660 std::make_optional(std::move(results));
1758std::optional<QList<QDateTime>>
QHttpHeaders::dateTimeValues(QAnyStringView name)
const
1760 QList<QDateTime> results;
1761 d->forEachHeader(name, [&](QByteArrayView value) {
1762 QDateTime dt = QNetworkHeadersPrivate::fromHttpDate(value);
1764 results.append(std::move(dt));
1766 return results.isEmpty() ? std::nullopt :
1767 std::make_optional(std::move(results));
1829 QList<QHttpHeaderRange> results;
1831 const QList<QByteArray> rangesVals = values(WellKnownHeader::Range);
1832 bool invalidHeaderEncountered =
false;
1834 for (QByteArrayView rangesVal : rangesVals) {
1835 if (!rangesVal.startsWith(
"bytes="_ba))
1838 rangesVal = rangesVal.slice(6);
1840 for (QLatin1StringView part : qTokenize(QLatin1StringView(rangesVal), u',')) {
1841 int dashPos = part.indexOf(u'-');
1842 if (dashPos == -1) {
1843 invalidHeaderEncountered =
true;
1847 const QLatin1StringView startStr = part.sliced(0, dashPos).trimmed();
1848 const QLatin1StringView endStr = part.sliced(dashPos + 1).trimmed();
1850 bool okStart =
false;
1853 std::optional<qint64> start;
1854 std::optional<qint64> end;
1856 if (!startStr.isEmpty()) {
1857 const qint64 startVal = startStr.toLongLong(&okStart);
1862 if (!endStr.isEmpty()) {
1863 const qint64 endVal = endStr.toLongLong(&okEnd);
1868 if ((!startStr.isEmpty() && !okStart) || (!endStr.isEmpty() && !okEnd)) {
1869 invalidHeaderEncountered =
true;
1873 QHttpHeaderRange range(start, end);
1874 if (!range.isValid()) {
1875 invalidHeaderEncountered =
true;
1879 results.append(range);
1884 *ok = !invalidHeaderEncountered;
1886 return invalidHeaderEncountered ? QList<QHttpHeaderRange>{} : results;
1913 if (ranges.isEmpty()) {
1914 removeAll(WellKnownHeader::Range);
1918 QByteArray result(
"bytes=");
1919 for (qsizetype i = 0; i < ranges.size(); ++i) {
1926 result += QByteArray::number(*range.start());
1929 result += QByteArray::number(*range.end());
1932 replaceOrAppend(WellKnownHeader::Range, result);
1978QList<std::pair<QByteArray, QByteArray>>
QHttpHeaders::toListOfPairs()
const
1980 QList<std::pair<QByteArray, QByteArray>> list;
1983 list.reserve(size());
1984 for (
const auto & h : std::as_const(d->headers))
1985 list.append({h.name.asByteArray().toLower(), h.value});
1995 QMultiMap<QByteArray, QByteArray> map;
1998 for (
const auto &h : std::as_const(d->headers))
1999 map.insert(h.name.asByteArray().toLower(), h.value);
2009 QMultiHash<QByteArray, QByteArray> hash;
2012 hash.reserve(size());
2013 for (
const auto &h : std::as_const(d->headers))
2014 hash.insert(h.name.asByteArray().toLower(), h.value);