11 #include <QStringList> 25 return m_data.value(QStringLiteral(
"CONTENT_DISPOSITION"));
30 m_data.
replace(QStringLiteral(
"CACHE_CONTROL"), value);
49 return m_data.value(QStringLiteral(
"CONTENT_ENCODING"));
54 m_data.
replace(QStringLiteral(
"CONTENT_ENCODING"), encoding);
60 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
61 if (it != m_data.constEnd()) {
76 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
77 if (it != m_data.constEnd()) {
91 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
92 if (it == m_data.constEnd() || (it.value().isEmpty() && !charset.
isEmpty())) {
105 m_data.
remove(QStringLiteral(
"CONTENT_TYPE"));
116 }
else if (!charset.
isEmpty()) {
124 return m_data.value(QStringLiteral(
"CONTENT_TYPE")).startsWith(u
"text/");
130 return ct.
compare(u
"text/html") == 0 ||
131 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 ||
146 ct.
compare(u
"application/xml") == 0||
152 const auto it = m_data.
constFind(QStringLiteral(
"CONTENT_TYPE"));
153 if (it != m_data.constEnd()) {
154 return it.value().compare(u
"application/json") == 0;
161 auto it = m_data.
constFind(QStringLiteral(
"CONTENT_LENGTH"));
162 if (it != m_data.constEnd()) {
163 return it.value().toLongLong();
178 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss 'GMT"));
179 m_data.
replace(QStringLiteral(
"DATE"), dt);
186 auto it = m_data.
constFind(QStringLiteral(
"DATE"));
187 if (it != m_data.constEnd()) {
190 if (
date.endsWith(u
" GMT")) {
192 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
195 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
205 return m_data.value(QStringLiteral(
"IF_MODIFIED_SINCE"));
211 auto it = m_data.
constFind(QStringLiteral(
"IF_MODIFIED_SINCE"));
212 if (it != m_data.constEnd()) {
213 const QString &ifModifiedStr = it.value();
215 if (ifModifiedStr.
endsWith(u
" GMT")) {
217 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
220 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss"));
230 auto it = m_data.
constFind(QStringLiteral(
"IF_MODIFIED_SINCE"));
231 if (it != m_data.constEnd()) {
233 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss 'GMT"));
240 auto it = m_data.
constFind(QStringLiteral(
"IF_MATCH"));
241 if (it != m_data.constEnd()) {
242 const QString &clientETag = it.value();
243 return clientETag.
mid(1, clientETag.
size() - 2) == etag ||
244 clientETag.
mid(3, clientETag.
size() - 4) == etag;
251 auto it = m_data.
constFind(QStringLiteral(
"IF_NONE_MATCH"));
252 if (it != m_data.constEnd()) {
253 const QString &clientETag = it.value();
254 return clientETag.
mid(1, clientETag.
size() - 2) == etag ||
255 clientETag.
mid(3, clientETag.
size() - 4) == etag;
267 return m_data.value(QStringLiteral(
"LAST_MODIFIED"));
272 m_data.
replace(QStringLiteral(
"LAST_MODIFIED"), value);
280 QStringLiteral(
"ddd, dd MMM yyyy hh:mm:ss 'GMT"));
287 return m_data.value(QStringLiteral(
"SERVER"));
292 m_data.
replace(QStringLiteral(
"SERVER"), value);
297 return m_data.value(QStringLiteral(
"CONNECTION"));
302 return m_data.value(QStringLiteral(
"HOST"));
307 return m_data.value(QStringLiteral(
"USER_AGENT"));
312 return m_data.value(QStringLiteral(
"REFERER"));
318 if (fragmentPos != -1) {
320 m_data.
replace(QStringLiteral(
"REFERER"), uri.
mid(0, fragmentPos));
322 m_data.
replace(QStringLiteral(
"REFERER"), uri);
328 m_data.
replace(QStringLiteral(
"WWW_AUTHENTICATE"), value);
333 m_data.
replace(QStringLiteral(
"PROXY_AUTHENTICATE"), value);
338 return m_data.value(QStringLiteral(
"AUTHORIZATION"));
344 auto it = m_data.
constFind(QStringLiteral(
"AUTHORIZATION"));
345 if (it != m_data.constEnd() && it.value().startsWith(u
"Bearer ")) {
346 ret = it.value().
mid(7);
365 qCWarning(CUTELYST_CORE) <<
"Headers::Basic authorization user name can't contain ':'";
371 m_data.
replace(QStringLiteral(
"AUTHORIZATION"), ret);
377 return m_data.value(QStringLiteral(
"PROXY_AUTHORIZATION"));
392 return m_data.value(normalizeHeaderKey(field));
397 return m_data.value(normalizeHeaderKey(field), defaultValue);
402 m_data.
replace(normalizeHeaderKey(field), value);
412 m_data.
insert(normalizeHeaderKey(field), value);
422 m_data.
remove(normalizeHeaderKey(field));
427 return m_data.
contains(normalizeHeaderKey(field));
432 return m_data.value(normalizeHeaderKey(key));
439 while (i < key.
size()) {
468 const QByteArray authorization = decodeBasicAuth(auth);
469 if (!authorization.
isEmpty()) {
470 int pos = authorization.
indexOf(
':');
486 for (
auto it = data.constBegin();
487 it != data.constEnd(); ++it) {
int indexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
QString & append(QChar ch)
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)
QDateTime toDateTime(const QString &string, QLocale::FormatType format) const const
QString join(const QString &separator) const const
QString & remove(int position, int n)
typename QHash< Key, T >::iterator replace(const Key &key, const T &value)
int lastIndexOf(QChar ch, int from, Qt::CaseSensitivity cs) const const
bool isLetter() const const
void setTimeSpec(Qt::TimeSpec spec)
int indexOf(char ch, int from) const const
QString number(int n, int base)
int remove(const Key &key, const T &value)
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.
typename QHash< Key, T >::iterator insert(const Key &key, const T &value)
QByteArray mid(int pos, int len) const const
bool contains(QChar ch, Qt::CaseSensitivity cs) const const
QString & replace(int position, int n, QChar after)
QByteArray left(int len) const const
QByteArray toLatin1() const const
typename QHash< Key, T >::const_iterator constFind(const Key &key, const T &value) const const
QString mid(int position, int n) const const
QChar toUpper() const const
bool contains(const Key &key, const T &value) const const
bool autoInsertSpaces() const const
QString left(int n) const const
QString fromLatin1(const char *str, int size)
int compare(const QString &other, Qt::CaseSensitivity cs) const const
bool isLower() const const
QByteArray toBase64(QByteArray::Base64Options options) const const