24 #include <QStringList>
30 inline std::pair<QString, QString> decodeBasicAuthPair(
const QString &auth);
38 return m_data.
value(QStringLiteral(
"CONTENT_DISPOSITION"));
43 m_data.
insert(QStringLiteral(
"CACHE_CONTROL"), value);
62 return m_data.
value(QStringLiteral(
"CONTENT_ENCODING"));
67 m_data.
insert(QStringLiteral(
"CONTENT_ENCODING"), encoding);
73 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
89 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
104 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
105 if (it == m_data.
constEnd() || (it.value().isEmpty() && !charset.
isEmpty())) {
118 m_data.
remove(QStringLiteral(
"CONTENT_TYPE"));
129 }
else if (!charset.
isEmpty()) {
137 return m_data.
value(QStringLiteral(
"CONTENT_TYPE")).startsWith(
QLatin1String(
"text/"));
165 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
174 auto it = m_data.
constFind(QStringLiteral(
"CONTENT_LENGTH"));
176 return it.
value().toLongLong();
191 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss 'GMT"));
192 m_data.
insert(QStringLiteral(
"DATE"), dt);
199 auto it = m_data.
constFind(QStringLiteral(
"DATE"));
205 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
208 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
218 return m_data.
value(QStringLiteral(
"IF_MODIFIED_SINCE"));
224 auto it = m_data.
constFind(QStringLiteral(
"IF_MODIFIED_SINCE"));
226 const QString &ifModifiedStr = it.value();
230 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
233 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
243 auto it = m_data.
constFind(QStringLiteral(
"IF_MODIFIED_SINCE"));
246 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss 'GMT"));
253 auto it = m_data.
constFind(QStringLiteral(
"IF_MATCH"));
255 const QString &clientETag = it.value();
256 return clientETag.
midRef(1, clientETag.
size() - 2) == etag ||
257 clientETag.
midRef(3, clientETag.
size() - 4) == etag;
264 auto it = m_data.
constFind(QStringLiteral(
"IF_NONE_MATCH"));
266 const QString &clientETag = it.value();
267 return clientETag.
midRef(1, clientETag.
size() - 2) == etag ||
268 clientETag.
midRef(3, clientETag.
size() - 4) == etag;
280 return m_data.
value(QStringLiteral(
"LAST_MODIFIED"));
285 m_data.
insert(QStringLiteral(
"LAST_MODIFIED"), value);
293 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss 'GMT"));
300 return m_data.
value(QStringLiteral(
"SERVER"));
305 m_data.
insert(QStringLiteral(
"SERVER"), value);
310 return m_data.
value(QStringLiteral(
"CONNECTION"));
315 return m_data.
value(QStringLiteral(
"HOST"));
320 return m_data.
value(QStringLiteral(
"USER_AGENT"));
325 return m_data.
value(QStringLiteral(
"REFERER"));
331 if (fragmentPos != -1) {
333 m_data.
insert(QStringLiteral(
"REFERER"), uri.
mid(0, fragmentPos));
335 m_data.
insert(QStringLiteral(
"REFERER"), uri);
341 m_data.
insert(QStringLiteral(
"WWW_AUTHENTICATE"), value);
346 m_data.
insert(QStringLiteral(
"PROXY_AUTHENTICATE"), value);
351 return m_data.
value(QStringLiteral(
"AUTHORIZATION"));
368 qCWarning(CUTELYST_CORE) <<
"Headers::Basic authorization user name can't contain ':'";
374 m_data.
insert(QStringLiteral(
"AUTHORIZATION"), ret);
380 return m_data.
value(QStringLiteral(
"PROXY_AUTHORIZATION"));
395 return m_data.
value(normalizeHeaderKey(field));
400 return m_data.
value(normalizeHeaderKey(field), defaultValue);
405 m_data.
insert(normalizeHeaderKey(field), value);
415 m_data.
insertMulti(normalizeHeaderKey(field), value);
420 m_data.
insertMulti(normalizeHeaderKey(field), values.
join(QStringLiteral(
", ")));
425 m_data.
remove(normalizeHeaderKey(field));
430 return m_data.
contains(normalizeHeaderKey(field));
447 while (i < key.
size()) {
473 std::pair<QString, QString> decodeBasicAuthPair(
const QString &auth)
475 std::pair<QString, QString> ret;
476 const QByteArray authorization = decodeBasicAuth(auth);
477 if (!authorization.
isEmpty()) {
478 int pos = authorization.
indexOf(
':');
bool endsWith(const QString &s, Qt::CaseSensitivity cs) const const
const T value(const Key &key) const const
QString toUpper() const const
QString number(int n, int base)
void setAutoInsertSpaces(bool b)
int indexOf(char ch, int from) const const
QStringRef midRef(int position, int n) const const
QString trimmed() const const
bool autoInsertSpaces() const const
QByteArray toLatin1() const const
QByteArray toBase64(QByteArray::Base64Options options) const const
int lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
QHash::iterator insert(const Key &key, const T &value)
const T & value() const const
QHash::const_iterator constBegin() const const
QHash::const_iterator constEnd() const const
QDateTime toDateTime(const QString &string, QLocale::FormatType format) const const
QByteArray mid(int pos, int len) const const
bool isEmpty() const const
QString toString(qlonglong i) const const
void setTimeSpec(Qt::TimeSpec spec)
QByteArray fromBase64(const QByteArray &base64, QByteArray::Base64Options options)
QHash::iterator insertMulti(const Key &key, const T &value)
QString join(const QString &separator) const const
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
QHash::const_iterator constFind(const Key &key) const const
QString & replace(int position, int n, QChar after)
QString & remove(int position, int n)
QDateTime toUTC() const const
bool startsWith(const QString &s, Qt::CaseSensitivity cs) const const
QString toLower() const const
The Cutelyst namespace holds all public Cutelyst API.
QByteArray left(int len) const const
bool isEmpty() const const
int remove(const Key &key)
QString left(int n) const const
QString fromLatin1(const char *str, int size)
static QString camelCaseHeader(const QString &headerKey)
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
bool contains(const Key &key) const const
QString mid(int position, int n) const const
QString & append(QChar ch)