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(
':');
const_iterator constFind(const Key &key, const T &value) const const
void setTimeSpec(Qt::TimeSpec spec)
qsizetype indexOf(QChar ch, qsizetype from, Qt::CaseSensitivity cs) const const
const_iterator constBegin() const const
QString & append(QChar ch)
QString toUpper() const const
void setAutoInsertSpaces(bool b)
QDateTime toUTC() const const
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 const
char32_t toUpper(char32_t ucs4)
QString join(QChar separator) const const
QDateTime toDateTime(const QString &string, FormatType format) const const
iterator replace(const Key &key, const T &value)
qsizetype lastIndexOf(QChar ch, Qt::CaseSensitivity cs) const const
QString toString(QDate date, FormatType format) const const
bool isLetter(char32_t ucs4)
bool contains(const Key &key, const T &value) const const
qsizetype indexOf(QByteArrayView bv, qsizetype from) const const
QString number(double n, char format, int precision)
bool startsWith(QChar c, Qt::CaseSensitivity cs) const const
qsizetype remove(const Key &key)
bool isEmpty() const const
QString trimmed() const const
The Cutelyst namespace holds all public Cutelyst API.
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 & remove(QChar ch, Qt::CaseSensitivity cs)
QString & replace(QChar before, QChar after, Qt::CaseSensitivity cs)
QString fromLatin1(QByteArrayView str)
QByteArray left(qsizetype len) const const
QByteArray toLatin1() const const
QString mid(qsizetype position, qsizetype n) const const
QByteArray fromBase64(const QByteArray &base64, Base64Options options)
bool autoInsertSpaces() const const
bool endsWith(QChar c, Qt::CaseSensitivity cs) const const
qsizetype length() const const
QString left(qsizetype n) const const
QByteArray toBase64(Base64Options options) const const
int compare(QLatin1StringView s1, const QString &s2, Qt::CaseSensitivity cs)
bool isLower(char32_t ucs4)