MythTV master
mythhttpresponse.h
Go to the documentation of this file.
1#ifndef MYTHHTTPRESPONSE_H
2#define MYTHHTTPRESPONSE_H
3
4// Std
5#include <vector>
6
7// MythTV
13
14class QTcpSocket;
15
17{
18 public:
19 MythHTTPResponse() = default;
20 explicit MythHTTPResponse(const HTTPRequest2& Request);
21
22 static HTTPResponse HandleOptions (const HTTPRequest2& Request);
23 static HTTPResponse ErrorResponse (MythHTTPStatus Status, const QString& ServerName);
24 static HTTPResponse RedirectionResponse (const HTTPRequest2& Request, const QString& Redirect);
25 static HTTPResponse ErrorResponse (const HTTPRequest2& Request, const QString& Message = {});
26 static HTTPResponse OptionsResponse (const HTTPRequest2& Request);
27 static HTTPResponse DataResponse (const HTTPRequest2& Request, const HTTPData& Data);
28 static HTTPResponse FileResponse (const HTTPRequest2& Request, const HTTPFile& File);
29 static HTTPResponse EmptyResponse (const HTTPRequest2& Request);
30 static HTTPResponse UpgradeResponse (const HTTPRequest2& Request, MythSocketProtocol& Protocol, bool& Testing);
31
32 void Finalise (const MythHTTPConfig& Config);
33 template <class T>
34 std::enable_if_t<std::is_convertible_v<T, QString>, void>
35 AddHeader (const QString& key, const T& val)
36 {
37 QByteArray bytes = QString("%1: %2\r\n").arg(key, val).toUtf8();
38 m_responseHeaders.emplace_back(MythHTTPData::Create(bytes));
39 }
40 template <class T>
41 std::enable_if_t<!std::is_convertible_v<T, QString>, void>
42 AddHeader (const QString& key, T val)
43 {
44 QByteArray bytes = QString("%1: %2\r\n").arg(key).arg(val).toUtf8();
45 m_responseHeaders.emplace_back(MythHTTPData::Create(bytes));
46 }
47
48 QString m_serverName;
51 std::chrono::milliseconds m_timeout { HTTP_SOCKET_TIMEOUT_MS };
53 MythHTTPRequestType m_requestType { HTTPGet };
54 int m_allowed { HTTP_DEFAULT_ALLOWED };
55 HTTPHeaders m_requestHeaders { nullptr };
57 HTTPVariant m_response { std::monostate() };
58
59 protected:
60 void AddDefaultHeaders();
61 void AddContentHeaders();
62
63 private:
64 Q_DISABLE_COPY(MythHTTPResponse)
65};
66
67#endif
static HTTPData Create()
Definition: mythhttpdata.cpp:4
MythHTTPResponse()=default
std::enable_if_t<!std::is_convertible_v< T, QString >, void > AddHeader(const QString &key, T val)
HTTPContents m_responseHeaders
std::enable_if_t< std::is_convertible_v< T, QString >, void > AddHeader(const QString &key, const T &val)
#define MBASE_PUBLIC
Definition: mythbaseexp.h:15
MythSocketProtocol
MythHTTPStatus
@ HTTPBadRequest
MythHTTPConnection
@ HTTPConnectionClose
std::shared_ptr< MythHTTPFile > HTTPFile
Definition: mythhttptypes.h:41
std::shared_ptr< MythHTTPRequest > HTTPRequest2
Definition: mythhttptypes.h:39
std::shared_ptr< HTTPMap > HTTPHeaders
Definition: mythhttptypes.h:36
MythHTTPRequestType
Definition: mythhttptypes.h:91
@ HTTPGet
Definition: mythhttptypes.h:94
std::shared_ptr< MythHTTPResponse > HTTPResponse
Definition: mythhttptypes.h:40
MythHTTPVersion
Definition: mythhttptypes.h:83
@ HTTPOneDotOne
Definition: mythhttptypes.h:87
std::shared_ptr< MythHTTPData > HTTPData
Definition: mythhttptypes.h:37
std::variant< std::monostate, HTTPData, HTTPFile > HTTPVariant
Definition: mythhttptypes.h:42
#define HTTP_DEFAULT_ALLOWED
std::vector< HTTPData > HTTPContents
Definition: mythhttptypes.h:38
#define HTTP_SOCKET_TIMEOUT_MS
Definition: mythhttptypes.h:25