12 #define LOC QString("HTTPParse: ")
26 : m_serverName(Config.m_serverName),
27 m_method(
std::move(Method)),
28 m_headers(
std::move(Headers)),
30 m_root(Config.m_rootDir),
31 m_timeout(Config.m_timeout)
34 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
35 QStringList tokens =
m_method.simplified().split(
' ', QString::SkipEmptyParts);
37 QStringList tokens =
m_method.simplified().split(
' ', Qt::SkipEmptyParts);
42 if (tokens.size() < 2 || tokens.size() > 3)
44 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"Failed to parse HTTP method");
58 if (tokens.size() > 2)
64 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"Unknown HTTP version");
72 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"Unknown HTTP request");
77 bool havehost =
m_headers->contains(
"host");
80 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"No host header for HTTP/1.1");
85 if (havehost &&
m_headers->count(
"host") > 1)
87 LOG(VB_GENERAL, LOG_WARNING,
LOC +
"Multiple 'Host' headers forbidden");
116 QHostAddress host = Socket->localAddress();
121 if (!
m_url.isValid())
123 LOG(VB_GENERAL, LOG_WARNING,
LOC + QString(
"Invalid URL: '%1'").arg(
m_url.toString()));
128 m_path =
m_url.toString(QUrl::RemoveFilename | QUrl::RemoveFragment | QUrl::RemoveQuery);
136 if (connection.contains(QStringLiteral(
"keep-alive")))
138 else if (connection.contains(QStringLiteral(
"close")))
155 #if QT_VERSION < QT_VERSION_CHECK(5,14,0)
156 QStringList params = Query.split(
'&', QString::SkipEmptyParts);
158 QStringList params = Query.split(
'&', Qt::SkipEmptyParts);
160 for (
const auto & param : qAsConst(params))
162 QString key = param.section(
'=', 0, 0);
163 QString value = param.section(
'=', 1);
164 QByteArray rawvalue = value.toUtf8();
165 value = QUrl::fromPercentEncoding(rawvalue);
166 value.replace(
"+",
" ");
168 result.insert(key.trimmed().toLower(), value);