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"));
62 if (it != m_data.constEnd()) {
77 const auto it = m_data.constFind(QStringLiteral(
"CONTENT_TYPE"));
78 if (it != m_data.constEnd()) {
83 ret =
contentType.mid(pos + 8, endPos).trimmed().toUpper();
92 const auto it = m_data.constFind(QStringLiteral(
"CONTENT_TYPE"));
93 if (it == m_data.constEnd() || (it.value().isEmpty() && !charset.
isEmpty())) {
94 m_data.replace(QStringLiteral(
"CONTENT_TYPE"),
QLatin1String(
"charset=") + charset);
106 m_data.remove(QStringLiteral(
"CONTENT_TYPE"));
117 }
else if (!charset.
isEmpty()) {
120 m_data.replace(QStringLiteral(
"CONTENT_TYPE"),
contentType);
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"));
152 if (it != m_data.constEnd()) {
153 return it.value().compare(u
"application/json") == 0;
160 auto it = m_data.constFind(QStringLiteral(
"CONTENT_LENGTH"));
161 if (it != m_data.constEnd()) {
162 return it.value().toLongLong();
169 m_data.replace(QStringLiteral(
"CONTENT_LENGTH"),
QString::number(value));
177 m_data.
replace(QStringLiteral(
"DATE"), dt);
184 auto it = m_data.constFind(QStringLiteral(
"DATE"));
185 if (it != m_data.constEnd()) {
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"));
209 if (it != m_data.constEnd()) {
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"));
228 if (it != m_data.constEnd()) {
237 auto it = m_data.constFind(QStringLiteral(
"IF_MATCH"));
238 if (it != m_data.constEnd()) {
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"));
249 if (it != m_data.constEnd()) {
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
'-') {
449QByteArray decodeBasicAuth(
const QString &auth)
464 const QByteArray authorization = decodeBasicAuth(auth);
465 if (!authorization.
isEmpty()) {
466 int pos = authorization.
indexOf(
':');
477QDebug operator<<(QDebug debug,
const Headers &headers)
479 const QMultiHash<QString, QString> data = headers.
data();
static QString camelCaseHeader(const QString &headerKey)
The Cutelyst namespace holds all public Cutelyst API.
QByteArray fromBase64(const QByteArray &base64, Base64Options options)
int indexOf(char ch, int from) const const
bool isEmpty() const const
QByteArray left(int len) const const
QByteArray mid(int pos, int len) const const
QByteArray toBase64(Base64Options options) const const
bool isLetter() const const
bool isLower() const const
QChar toUpper() const const
void setTimeSpec(Qt::TimeSpec spec)
bool autoInsertSpaces() const const
void setAutoInsertSpaces(bool b)
const_iterator constBegin() const const
const_iterator constEnd() const const
QDateTime toDateTime(const QString &string, FormatType format) const const
QString toString(qlonglong i) const const
int compare(const QString &other, Qt::CaseSensitivity cs) const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const const
QString fromLatin1(const char *str, int size)
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
bool isEmpty() const const
int lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
QString left(int n) const const
QString mid(int position, int n) const const
QString number(int n, int base)
QString & replace(int position, int n, QChar after)
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const const
QByteArray toLatin1() const const
QString toLower() const const
QString join(const QString &separator) const const