1 #ifndef MYTHHTTPTYPES_H
2 #define MYTHHTTPTYPES_H
14 #include <QStringList>
15 #include <QHostAddress>
17 #include <QSslConfiguration>
24 #define HTTP_SOCKET_TIMEOUT_MS 10000 // 10 seconds
25 #define HTTP_SERVICES_DIR QString("/services/")
33 using HTTPMap = QMultiMap<QString,QString>;
36 using HTTPData = std::shared_ptr<MythHTTPData>;
40 using HTTPFile = std::shared_ptr<MythHTTPFile>;
41 using HTTPVariant = std::variant<std::monostate, HTTPData, HTTPFile>;
64 quint16 m_port_2 { 0 };
65 quint16 m_sslPort { 0 };
102 #define HTTP_DEFAULT_ALLOWED (HTTPHead | HTTPGet | HTTPOptions | HTTPPost)
158 "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=ISO-8859-1\">"
160 "<BODY><H1>%1</H1></BODY>"
192 return QStringLiteral(
"Error");
197 if (Version.startsWith(QStringLiteral(
"HTTP")))
199 if (Version.endsWith(QStringLiteral(
"1.1")))
return HTTPOneDotOne;
200 if (Version.endsWith(QStringLiteral(
"1.0")))
return HTTPOneDotZero;
210 case HTTPHead:
return QStringLiteral(
"HEAD");
211 case HTTPGet:
return QStringLiteral(
"GET");
212 case HTTPPost:
return QStringLiteral(
"POST");
213 case HTTPPut:
return QStringLiteral(
"PUT");
214 case HTTPDelete:
return QStringLiteral(
"DELETE");
215 case HTTPOptions:
return QStringLiteral(
"OPTIONS");
218 return QStringLiteral(
"Error");
223 if (Type == QStringLiteral(
"GET"))
return HTTPGet;
224 if (Type == QStringLiteral(
"HEAD"))
return HTTPHead;
225 if (Type == QStringLiteral(
"POST"))
return HTTPPost;
226 if (Type == QStringLiteral(
"PUT"))
return HTTPPut;
227 if (Type == QStringLiteral(
"OPTIONS"))
return HTTPOptions;
228 if (Type == QStringLiteral(
"DELETE"))
return HTTPDelete;
235 if (Allowed &
HTTPHead) result << QStringLiteral(
"HEAD");
236 if (Allowed &
HTTPGet) result << QStringLiteral(
"GET");
237 if (Allowed &
HTTPPost) result << QStringLiteral(
"POST");
238 if (Allowed &
HTTPPut) result << QStringLiteral(
"PUT");
239 if (Allowed &
HTTPDelete) result << QStringLiteral(
"DELETE");
240 if (Allowed &
HTTPOptions) result << QStringLiteral(
"OPTIONS");
241 return result.join(QStringLiteral(
", "));
247 if (Requests.contains(
"HEAD", Qt::CaseInsensitive)) result |=
HTTPHead;
248 if (Requests.contains(
"GET", Qt::CaseInsensitive)) result |=
HTTPGet;
249 if (Requests.contains(
"POST", Qt::CaseInsensitive)) result |=
HTTPPost;
250 if (Requests.contains(
"PUT", Qt::CaseInsensitive)) result |=
HTTPPut;
251 if (Requests.contains(
"DELETE", Qt::CaseInsensitive)) result |=
HTTPDelete;
252 if (Requests.contains(
"OPTIONS", Qt::CaseInsensitive)) result |=
HTTPOptions;
261 case HTTPOK:
return QStringLiteral(
"200 OK");
262 case HTTPAccepted:
return QStringLiteral(
"202 Accepted");
269 case HTTPNotFound:
return QStringLiteral(
"404 Not Found");
280 return QStringLiteral(
"Error");
285 if (Status.startsWith(QStringLiteral(
"200")))
return HTTPOK;
292 if (Status.startsWith(QStringLiteral(
"403")))
return HTTPForbidden;
293 if (Status.startsWith(QStringLiteral(
"404")))
return HTTPNotFound;
299 if (Status.startsWith(QStringLiteral(
"501")))
return HTTPBadGateway;
313 return QStringLiteral(
"keep-alive");
319 if (Headers && Headers->contains(Value))
320 return Headers->value(Value);
328 type +=
"; charset=\"UTF-8\"";
334 if (Address.protocol() == QAbstractSocket::IPv6Protocol)
336 Address.setScopeId(
"");
337 return QString(
"[%1]").arg(Address.toString());
339 return Address.toString();