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(
':');
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
QString & append(QChar ch)
QHash::iterator insert(const Key &key, const T &value)
QString toUpper() const const
void setAutoInsertSpaces(bool b)
QDateTime toUTC() const const
QString toString(qlonglong i) const const
static QString camelCaseHeader(const QString &headerKey)
bool isEmpty() const const
QByteArray fromBase64(const QByteArray &base64, QByteArray::Base64Options options)
QHash::const_iterator constFind(const Key &key) const const
QDateTime toDateTime(const QString &string, QLocale::FormatType format) const const
QString join(const QString &separator) const const
QString & remove(int position, int n)
int lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
void setTimeSpec(Qt::TimeSpec spec)
int indexOf(char ch, int from) const const
QString number(int n, int base)
QHash::const_iterator constEnd() const const
const T & value() const const
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.
int remove(const Key &key)
QByteArray mid(int pos, int len) const const
const T value(const Key &key) const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
QStringRef midRef(int position, int n) const const
QString & replace(int position, int n, QChar after)
QHash::const_iterator constBegin() const const
QByteArray left(int len) const const
QByteArray toLatin1() const const
QString mid(int position, int n) const const
bool autoInsertSpaces() const const
QString left(int n) const const
QString fromLatin1(const char *str, int size)
bool contains(const Key &key) const const
QHash::iterator insertMulti(const Key &key, const T &value)
QByteArray toBase64(QByteArray::Base64Options options) const const