10 #include <QStringList> 19 : m_data(other.m_data)
25 return m_data.
value(QStringLiteral(
"CONTENT_DISPOSITION"));
30 m_data.
replace(QStringLiteral(
"CACHE_CONTROL"), value);
50 return m_data.
value(QStringLiteral(
"CONTENT_ENCODING"));
55 m_data.
replace(QStringLiteral(
"CONTENT_ENCODING"), encoding);
61 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
77 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
92 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
93 if (it == m_data.
constEnd() || (it.value().isEmpty() && !charset.
isEmpty())) {
106 m_data.
remove(QStringLiteral(
"CONTENT_TYPE"));
117 }
else if (!charset.
isEmpty()) {
125 return m_data.
value(QStringLiteral(
"CONTENT_TYPE")).startsWith(u
"text/");
131 return ct.
compare(u
"text/html") == 0 || ct.
compare(u
"application/xhtml+xml") == 0 ||
132 ct.
compare(u
"application/vnd.wap.xhtml+xml") == 0;
138 return ct.
compare(u
"application/xhtml+xml") == 0 ||
139 ct.
compare(u
"application/vnd.wap.xhtml+xml") == 0;
145 return ct.
compare(u
"text/xml") == 0 || ct.
compare(u
"application/xml") == 0 ||
151 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
153 return it.
value().compare(u
"application/json") == 0;
160 auto it = m_data.
constFind(QStringLiteral(
"CONTENT_LENGTH"));
162 return it.
value().toLongLong();
177 m_data.
replace(QStringLiteral(
"DATE"), dt);
184 auto it = m_data.
constFind(QStringLiteral(
"DATE"));
188 if (
date.endsWith(u
" GMT")) {
190 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
202 return m_data.
value(QStringLiteral(
"IF_MODIFIED_SINCE"));
208 auto it = m_data.
constFind(QStringLiteral(
"IF_MODIFIED_SINCE"));
210 const QString &ifModifiedStr = it.value();
212 if (ifModifiedStr.
endsWith(u
" GMT")) {
214 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
227 auto it = m_data.
constFind(QStringLiteral(
"IF_MODIFIED_SINCE"));
237 auto it = m_data.
constFind(QStringLiteral(
"IF_MATCH"));
240 return clientETag.
mid(1, clientETag.size() - 2) == etag ||
241 clientETag.
mid(3, clientETag.size() - 4) == etag;
248 auto it = m_data.
constFind(QStringLiteral(
"IF_NONE_MATCH"));
251 return clientETag.
mid(1, clientETag.size() - 2) == etag ||
252 clientETag.
mid(3, clientETag.size() - 4) == etag;
264 return m_data.
value(QStringLiteral(
"LAST_MODIFIED"));
269 m_data.
replace(QStringLiteral(
"LAST_MODIFIED"), value);
283 return m_data.
value(QStringLiteral(
"SERVER"));
288 m_data.
replace(QStringLiteral(
"SERVER"), value);
293 return m_data.
value(QStringLiteral(
"CONNECTION"));
298 return m_data.
value(QStringLiteral(
"HOST"));
303 return m_data.
value(QStringLiteral(
"USER_AGENT"));
308 return m_data.
value(QStringLiteral(
"REFERER"));
314 if (fragmentPos != -1) {
316 m_data.
replace(QStringLiteral(
"REFERER"), uri.
mid(0, fragmentPos));
318 m_data.
replace(QStringLiteral(
"REFERER"), uri);
324 m_data.
replace(QStringLiteral(
"WWW_AUTHENTICATE"), value);
329 m_data.
replace(QStringLiteral(
"PROXY_AUTHENTICATE"), value);
334 return m_data.
value(QStringLiteral(
"AUTHORIZATION"));
340 auto it = m_data.
constFind(QStringLiteral(
"AUTHORIZATION"));
341 if (it != m_data.
constEnd() && it.
value().startsWith(u
"Bearer ")) {
342 ret = it.value().
mid(7);
361 qCWarning(CUTELYST_CORE) <<
"Headers::Basic authorization user name can't contain ':'";
367 m_data.
replace(QStringLiteral(
"AUTHORIZATION"), ret);
373 return m_data.
value(QStringLiteral(
"PROXY_AUTHORIZATION"));
388 return m_data.
value(normalizeHeaderKey(field));
393 return m_data.
value(normalizeHeaderKey(field), defaultValue);
398 m_data.
replace(normalizeHeaderKey(field), value);
408 m_data.
insert(normalizeHeaderKey(field), value);
418 m_data.
remove(normalizeHeaderKey(field));
423 return m_data.
contains(normalizeHeaderKey(field));
428 return m_data.
value(normalizeHeaderKey(key));
435 while (i < key.
size()) {
441 }
else if (c == u
'-') {
464 const QByteArray authorization = decodeBasicAuth(auth);
465 if (!authorization.
isEmpty()) {
466 int pos = authorization.
indexOf(
':');
QMultiHash::const_iterator constFind(const Key &key, const T &value) const const
qsizetype indexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const const
QMultiHash::const_iterator constBegin() const const
QString & append(QChar ch)
QString toUpper() const const
void setAutoInsertSpaces(bool b)
QDateTime toUTC() const const
QString toString(qlonglong i) const const
QMultiHash::const_iterator constEnd() const const
static QString camelCaseHeader(const QString &headerKey)
qsizetype size() const const
QStringView mid(qsizetype start, qsizetype length) const const
bool isEmpty() const const
T value(const Key &key, const T &defaultValue) const const
QString join(QStringView separator) const const
QDateTime toDateTime(const QString &string, QLocale::FormatType format) const const
QString & remove(qsizetype position, qsizetype n)
QMultiHash::iterator replace(const Key &key, const T &value)
qsizetype lastIndexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const const
bool isLetter() const const
bool contains(const Key &key, const T &value) const const
void setTimeSpec(Qt::TimeSpec spec)
qsizetype indexOf(char ch, qsizetype from) const const
QString number(int n, int base)
qsizetype remove(const Key &key)
bool isEmpty() const const
QString trimmed() const const
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const const
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const const
The Cutelyst namespace holds all public Cutelyst API.
QMultiHash::iterator insert(const Key &key, const T &value)
QByteArray mid(qsizetype pos, qsizetype len) const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
QString & replace(qsizetype position, qsizetype n, QChar after)
QString fromLatin1(QByteArrayView str)
QByteArray left(qsizetype len) const const
QByteArray toLatin1() const const
QString mid(qsizetype position, qsizetype n) const const
QChar toUpper() const const
QByteArray fromBase64(const QByteArray &base64, QByteArray::Base64Options options)
bool autoInsertSpaces() const const
qsizetype length() const const
QString left(qsizetype n) const const
QByteArray toBase64(QByteArray::Base64Options options) const const
int compare(const QString &other, Qt::CaseSensitivity cs) const const
bool isLower() const const