MythTV  master
mythhttptypes.h
Go to the documentation of this file.
1 #ifndef MYTHHTTPTYPES_H
2 #define MYTHHTTPTYPES_H
3 
4 // Std
5 #include <array>
6 #include <deque>
7 #include <chrono>
8 
9 // Qt
10 #include <QMap>
11 #include <QFile>
12 #include <QString>
13 #include <QDateTime>
14 #include <QStringList>
15 #include <QHostAddress>
16 #ifndef QT_NO_OPENSSL
17 #include <QSslConfiguration>
18 #endif
19 
20 // MythTV
23 
24 #define HTTP_SOCKET_TIMEOUT_MS 10000 // 10 seconds
25 #define HTTP_SERVICES_DIR QString("/services/")
26 
27 class MythHTTPData;
28 class MythHTTPFile;
29 class MythHTTPRequest;
30 class MythHTTPResponse;
31 class MythHTTPService;
32 
33 using HTTPMap = QMultiMap<QString,QString>;
35 using HTTPHeaders = std::shared_ptr<HTTPMap>;
36 using HTTPData = std::shared_ptr<MythHTTPData>;
37 using HTTPContents = std::vector<HTTPData>;
38 using HTTPRequest2 = std::shared_ptr<MythHTTPRequest>; // HTTPRequest conflicts with existing class
39 using HTTPResponse = std::shared_ptr<MythHTTPResponse>;
40 using HTTPFile = std::shared_ptr<MythHTTPFile>;
41 using HTTPVariant = std::variant<std::monostate, HTTPData, HTTPFile>;
42 using HTTPQueue = std::deque<HTTPVariant>;
43 using HTTPRange = std::pair<uint64_t,uint64_t>;
44 using HTTPRanges = std::vector<HTTPRange>;
45 using HTTPFunction = std::function<HTTPResponse(HTTPRequest2)>;
46 using HTTPHandler = std::pair<QString,HTTPFunction>;
47 using HTTPHandlers = std::vector<HTTPHandler>;
48 using HTTPMulti = std::pair<HTTPData,HTTPData>;
49 using HTTPRegisterTypes = std::function<void()>;
50 using HTTPServicePtr = std::shared_ptr<MythHTTPService>;
51 using HTTPServicePtrs = std::vector<HTTPServicePtr>;
52 using HTTPServiceCtor = std::function<HTTPServicePtr()>;
53 using HTTPService = std::pair<QString,HTTPServiceCtor>;
54 using HTTPServices = std::vector<HTTPService>;
55 
59 
61 {
62  public:
63  quint16 m_port { 0 };
64  quint16 m_port_2 { 0 };
65  quint16 m_sslPort { 0 };
66  QString m_rootDir;
67  QString m_serverName;
68  std::chrono::milliseconds m_timeout { HTTP_SOCKET_TIMEOUT_MS };
69  QString m_language;
70  QStringList m_hosts;
71  QStringList m_allowedOrigins;
72  QStringList m_filePaths;
76 #ifndef QT_NO_OPENSSL
77  QSslConfiguration m_sslConfig;
78 #endif
79 };
80 
82 {
87 };
88 
90 {
91  HTTPUnknown = 0x0000,
92  HTTPHead = 0x0001,
93  HTTPGet = 0x0002,
94  HTTPPost = 0x0004,
95  HTTPPut = 0x0008,
96  HTTPDelete = 0x0010,
97  HTTPOptions = 0x0020
98 };
99 
100 // POST is needed here because all services are invoked with POST when using
101 // SOAP, regardless of whether they require POST or not
102 #define HTTP_DEFAULT_ALLOWED (HTTPHead | HTTPGet | HTTPOptions | HTTPPost)
103 
105 {
107  HTTPOK = 200,
125 };
126 
128 {
132 };
133 
135 {
139 };
140 
142 {
143  HTTPIgnoreCache = 0x0000,
144  HTTPNoCache = 0x0001,
145  HTTPETag = 0x0002,
147  HTTPShortLife = 0x0100,
148  HTTPMediumLife = 0x0200,
149  HTTPLongLife = 0x0400
150 };
151 
152 static QString s_multipartBoundary = "mYtHtVxXxXxX";
153 static QString s_defaultHTTPPage =
154 "<!DOCTYPE html>"
155 "<HTML>"
156  "<HEAD>"
157  "<TITLE>%1</TITLE>"
158  "<META HTTP-EQUIV=\"Content-Type\" CONTENT=\"text/html; charset=ISO-8859-1\">"
159  "</HEAD>"
160  "<BODY><H1>%1</H1></BODY>"
161 "</HTML>";
162 
164 {
165  public:
166  explicit MythHTTPContent(QString Name): m_fileName(std::move(Name)) {}
167  QString m_fileName;
169  int64_t m_partialSize { 0 };
171  int64_t m_multipartHeaderSize { 0 };
172  int64_t m_written { 0 };
175  QDateTime m_lastModified;
176  QByteArray m_etag;
178 };
179 
180 class MythHTTP
181 {
182  public:
183  static QString VersionToString(MythHTTPVersion Version)
184  {
185  switch (Version)
186  {
187  case HTTPOneDotOne: return QStringLiteral("HTTP/1.1");
188  case HTTPOneDotZero: return QStringLiteral("HTTP/1.0");
189  case HTTPZeroDotNine: return QStringLiteral("HTTP/0.9");
190  case HTTPUnknownVersion: break;
191  }
192  return QStringLiteral("Error");
193  }
194 
195  static MythHTTPVersion VersionFromString(const QString& Version)
196  {
197  if (Version.startsWith(QStringLiteral("HTTP")))
198  {
199  if (Version.endsWith(QStringLiteral("1.1"))) return HTTPOneDotOne;
200  if (Version.endsWith(QStringLiteral("1.0"))) return HTTPOneDotZero;
201  if (Version.endsWith(QStringLiteral("0.9"))) return HTTPZeroDotNine;
202  }
203  return HTTPUnknownVersion;
204  }
205 
207  {
208  switch (Type)
209  {
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");
216  case HTTPUnknown: break;
217  }
218  return QStringLiteral("Error");
219  }
220 
221  static MythHTTPRequestType RequestFromString(const QString& Type)
222  {
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;
229  return HTTPUnknown;
230  }
231 
232  static QString AllowedRequestsToString(int Allowed)
233  {
234  QStringList result;
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(", "));
242  }
243 
244  static int RequestsFromString(const QString& Requests)
245  {
246  int result = HTTPUnknown;
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;
253  return result;
254  }
255 
256  static QString StatusToString(MythHTTPStatus Status)
257  {
258  switch (Status)
259  {
260  case HTTPSwitchingProtocols: return QStringLiteral("101 Switching Protocols");
261  case HTTPOK: return QStringLiteral("200 OK");
262  case HTTPAccepted: return QStringLiteral("202 Accepted");
263  case HTTPPartialContent: return QStringLiteral("206 Partial Content");
264  case HTTPMovedPermanently: return QStringLiteral("301 Moved Permanently");
265  case HTTPNotModified: return QStringLiteral("304 Not Modified");
266  case HTTPBadRequest: return QStringLiteral("400 Bad Request");
267  case HTTPUnauthorized: return QStringLiteral("401 Unauthorized");
268  case HTTPForbidden: return QStringLiteral("403 Forbidden");
269  case HTTPNotFound: return QStringLiteral("404 Not Found");
270  case HTTPMethodNotAllowed: return QStringLiteral("405 Method Not Allowed");
271  case HTTPRequestTimeout: return QStringLiteral("408 Request Timeout");
272  case HTTPRequestedRangeNotSatisfiable: return QStringLiteral("416 Requested Range Not Satisfiable");
273  case HTTPTooManyRequests: return QStringLiteral("429 Too Many Requests");
274  case HTTPInternalServerError: return QStringLiteral("500 Internal Server Error");
275  case HTTPNotImplemented: return QStringLiteral("501 Not Implemented");
276  case HTTPBadGateway: return QStringLiteral("502 Bad Gateway");
277  case HTTPServiceUnavailable: return QStringLiteral("503 Service Unavailable");
278  case HTTPNetworkAuthenticationRequired: return QStringLiteral("511 Network Authentication Required");
279  }
280  return QStringLiteral("Error");
281  }
282 
283  static MythHTTPStatus StatusFromString(const QString& Status)
284  {
285  if (Status.startsWith(QStringLiteral("200"))) return HTTPOK;
286  if (Status.startsWith(QStringLiteral("101"))) return HTTPSwitchingProtocols;
287  if (Status.startsWith(QStringLiteral("206"))) return HTTPPartialContent;
288  if (Status.startsWith(QStringLiteral("301"))) return HTTPMovedPermanently;
289  if (Status.startsWith(QStringLiteral("304"))) return HTTPNotModified;
290  //if (Status.startsWith(QStringLiteral("400"))) return HTTPBadRequest;
291  if (Status.startsWith(QStringLiteral("401"))) return HTTPUnauthorized;
292  if (Status.startsWith(QStringLiteral("403"))) return HTTPForbidden;
293  if (Status.startsWith(QStringLiteral("404"))) return HTTPNotFound;
294  if (Status.startsWith(QStringLiteral("405"))) return HTTPMethodNotAllowed;
295  if (Status.startsWith(QStringLiteral("408"))) return HTTPRequestTimeout;
296  if (Status.startsWith(QStringLiteral("416"))) return HTTPRequestedRangeNotSatisfiable;
297  if (Status.startsWith(QStringLiteral("429"))) return HTTPTooManyRequests;
298  if (Status.startsWith(QStringLiteral("500"))) return HTTPNotImplemented;
299  if (Status.startsWith(QStringLiteral("501"))) return HTTPBadGateway;
300  if (Status.startsWith(QStringLiteral("502"))) return HTTPServiceUnavailable;
301  if (Status.startsWith(QStringLiteral("511"))) return HTTPNetworkAuthenticationRequired;
302  return HTTPBadRequest;
303  }
304 
305  static QString ConnectionToString(MythHTTPConnection Connection)
306  {
307  switch (Connection)
308  {
309  case HTTPConnectionClose: return QStringLiteral("close");
310  case HTTPConnectionKeepAlive: break;
311  case HTTPConnectionUpgrade: return QStringLiteral("Upgrade");
312  }
313  return QStringLiteral("keep-alive");
314  }
315 
316  // N.B. Value must be lower case
317  static QString GetHeader(const HTTPHeaders& Headers, const QString& Value, const QString& Default = "")
318  {
319  if (Headers && Headers->contains(Value))
320  return Headers->value(Value);
321  return Default;
322  }
323 
324  static inline QString GetContentType(const MythMimeType& Mime)
325  {
326  QString type = Mime.Name();
327  if (Mime.Inherits("text/plain"))
328  type += "; charset=\"UTF-8\"";
329  return type;
330  }
331 
332  static inline QString AddressToString(QHostAddress& Address)
333  {
334  if (Address.protocol() == QAbstractSocket::IPv6Protocol)
335  {
336  Address.setScopeId("");
337  return QString("[%1]").arg(Address.toString());
338  }
339  return Address.toString();
340  }
341 };
342 #endif
HTTPChunked
@ HTTPChunked
Definition: mythhttptypes.h:138
MythHTTPRequest
Limited parsing of HTTP method and some headers to determine validity of request.
Definition: mythhttprequest.h:12
HTTPPost
@ HTTPPost
Definition: mythhttptypes.h:94
MythHTTPContent::m_partialSize
int64_t m_partialSize
Definition: mythhttptypes.h:169
HTTPFunction
std::function< HTTPResponse(HTTPRequest2)> HTTPFunction
Definition: mythhttptypes.h:45
HTTPBadGateway
@ HTTPBadGateway
Definition: mythhttptypes.h:122
HTTPOK
@ HTTPOK
Definition: mythhttptypes.h:107
MythHTTP::StatusFromString
static MythHTTPStatus StatusFromString(const QString &Status)
Definition: mythhttptypes.h:283
MythHTTPContent::m_lastModified
QDateTime m_lastModified
Definition: mythhttptypes.h:175
MythHTTPConfig::m_allowedOrigins
QStringList m_allowedOrigins
Definition: mythhttptypes.h:71
HTTPConnectionKeepAlive
@ HTTPConnectionKeepAlive
Definition: mythhttptypes.h:130
HTTPPut
@ HTTPPut
Definition: mythhttptypes.h:95
s_multipartBoundary
static QString s_multipartBoundary
Definition: mythhttptypes.h:152
HTTPOptions
@ HTTPOptions
Definition: mythhttptypes.h:97
HTTPGet
@ HTTPGet
Definition: mythhttptypes.h:93
MythHTTPCacheType
MythHTTPCacheType
Definition: mythhttptypes.h:141
MythHTTPData
Definition: mythhttpdata.h:10
HTTPVariant
std::variant< std::monostate, HTTPData, HTTPFile > HTTPVariant
Definition: mythhttptypes.h:41
MythHTTP::RequestToString
static QString RequestToString(MythHTTPRequestType Type)
Definition: mythhttptypes.h:206
MythHTTPContent::m_ranges
HTTPRanges m_ranges
Definition: mythhttptypes.h:168
MythHTTP::GetHeader
static QString GetHeader(const HTTPHeaders &Headers, const QString &Value, const QString &Default="")
Definition: mythhttptypes.h:317
MythHTTPConfig::m_language
QString m_language
Definition: mythhttptypes.h:69
MythHTTPConfig::m_errorPageHandler
HTTPHandler m_errorPageHandler
Definition: mythhttptypes.h:75
MythHTTPResponse
Definition: mythhttpresponse.h:16
HTTPNotImplemented
@ HTTPNotImplemented
Definition: mythhttptypes.h:121
HTTPETag
@ HTTPETag
Definition: mythhttptypes.h:145
HTTPLongLife
@ HTTPLongLife
Definition: mythhttptypes.h:149
MythHTTP::RequestsFromString
static int RequestsFromString(const QString &Requests)
Definition: mythhttptypes.h:244
MythHTTPContent::m_multipartHeaders
HTTPContents m_multipartHeaders
Definition: mythhttptypes.h:170
MythHTTPConfig::m_sslConfig
QSslConfiguration m_sslConfig
Definition: mythhttptypes.h:77
HTTPNotFound
@ HTTPNotFound
Definition: mythhttptypes.h:115
HTTPData
std::shared_ptr< MythHTTPData > HTTPData
Definition: mythhttptypes.h:36
mythmimetype.h
HTTPHeaders
std::shared_ptr< HTTPMap > HTTPHeaders
Definition: mythhttptypes.h:35
Q_DECLARE_METATYPE
Q_DECLARE_METATYPE(StandardSetting *)
MythHTTPContent::m_encoding
MythHTTPEncode m_encoding
Definition: mythhttptypes.h:173
HTTPMethodNotAllowed
@ HTTPMethodNotAllowed
Definition: mythhttptypes.h:116
HTTPRequestTimeout
@ HTTPRequestTimeout
Definition: mythhttptypes.h:117
mythhttpcommon.h
MythHTTPEncode
MythHTTPEncode
Definition: mythhttptypes.h:134
MythHTTP::StatusToString
static QString StatusToString(MythHTTPStatus Status)
Definition: mythhttptypes.h:256
HTTPInternalServerError
@ HTTPInternalServerError
Definition: mythhttptypes.h:120
MythHTTPVersion
MythHTTPVersion
Definition: mythhttptypes.h:81
HTTPMulti
std::pair< HTTPData, HTTPData > HTTPMulti
Definition: mythhttptypes.h:48
HTTPMap
QMultiMap< QString, QString > HTTPMap
Definition: mythhttptypes.h:33
HTTPAccepted
@ HTTPAccepted
Definition: mythhttptypes.h:108
MythHTTPContent::m_cacheType
int m_cacheType
Definition: mythhttptypes.h:177
HTTPContents
std::vector< HTTPData > HTTPContents
Definition: mythhttptypes.h:37
MythHTTPConfig::m_filePaths
QStringList m_filePaths
Definition: mythhttptypes.h:72
MythHTTP::AllowedRequestsToString
static QString AllowedRequestsToString(int Allowed)
Definition: mythhttptypes.h:232
MythHTTPStatus
MythHTTPStatus
Definition: mythhttptypes.h:104
MythHTTPContent::m_written
int64_t m_written
Definition: mythhttptypes.h:172
MythHTTP::VersionFromString
static MythHTTPVersion VersionFromString(const QString &Version)
Definition: mythhttptypes.h:195
HTTPDelete
@ HTTPDelete
Definition: mythhttptypes.h:96
MythHTTPRequestType
MythHTTPRequestType
Definition: mythhttptypes.h:89
MythHTTPContent::m_mimeType
MythMimeType m_mimeType
Definition: mythhttptypes.h:174
MythHTTP::GetContentType
static QString GetContentType(const MythMimeType &Mime)
Definition: mythhttptypes.h:324
HTTPNoCache
@ HTTPNoCache
Definition: mythhttptypes.h:144
HTTPQueries
HTTPMap HTTPQueries
Definition: mythhttptypes.h:34
HTTPLastModified
@ HTTPLastModified
Definition: mythhttptypes.h:146
HTTPNotModified
@ HTTPNotModified
Definition: mythhttptypes.h:111
HTTPConnectionClose
@ HTTPConnectionClose
Definition: mythhttptypes.h:129
MythHTTPContent::m_etag
QByteArray m_etag
Definition: mythhttptypes.h:176
MythHTTPFile
Definition: mythhttpfile.h:11
HTTPIgnoreCache
@ HTTPIgnoreCache
Definition: mythhttptypes.h:143
s_defaultHTTPPage
static QString s_defaultHTTPPage
Definition: mythhttptypes.h:153
MythHTTPConfig::m_handlers
HTTPHandlers m_handlers
Definition: mythhttptypes.h:73
HTTPRequestedRangeNotSatisfiable
@ HTTPRequestedRangeNotSatisfiable
Definition: mythhttptypes.h:118
MythHTTP::AddressToString
static QString AddressToString(QHostAddress &Address)
Definition: mythhttptypes.h:332
HTTPServicePtr
std::shared_ptr< MythHTTPService > HTTPServicePtr
Definition: mythhttptypes.h:50
MythHTTPService
Definition: mythhttpservice.h:19
MythHTTPContent::MythHTTPContent
MythHTTPContent(QString Name)
Definition: mythhttptypes.h:166
HTTPOneDotOne
@ HTTPOneDotOne
Definition: mythhttptypes.h:86
MythMimeType::Inherits
bool Inherits(const QString &Name) const
Does this type inherit from the given type.
Definition: mythmimetype.cpp:69
HTTPResponse
std::shared_ptr< MythHTTPResponse > HTTPResponse
Definition: mythhttptypes.h:39
HTTP_SOCKET_TIMEOUT_MS
#define HTTP_SOCKET_TIMEOUT_MS
Definition: mythhttptypes.h:24
MythHTTP
Definition: mythhttptypes.h:180
HTTPZeroDotNine
@ HTTPZeroDotNine
Definition: mythhttptypes.h:84
MythHTTPConfig::m_rootDir
QString m_rootDir
Definition: mythhttptypes.h:66
HTTPForbidden
@ HTTPForbidden
Definition: mythhttptypes.h:114
HTTPBadRequest
@ HTTPBadRequest
Definition: mythhttptypes.h:112
HTTPHead
@ HTTPHead
Definition: mythhttptypes.h:92
HTTPMovedPermanently
@ HTTPMovedPermanently
Definition: mythhttptypes.h:110
HTTPUnknown
@ HTTPUnknown
Definition: mythhttptypes.h:91
MythHTTP::VersionToString
static QString VersionToString(MythHTTPVersion Version)
Definition: mythhttptypes.h:183
MythHTTPConfig::m_hosts
QStringList m_hosts
Definition: mythhttptypes.h:70
Name
Definition: channelsettings.cpp:71
std
Definition: mythchrono.h:23
HTTPRequest2
std::shared_ptr< MythHTTPRequest > HTTPRequest2
Definition: mythhttptypes.h:38
HTTPOneDotZero
@ HTTPOneDotZero
Definition: mythhttptypes.h:85
MythMimeType
Definition: mythmimetype.h:16
MythMimeType::Name
QString Name() const
Definition: mythmimetype.cpp:31
MythHTTP::RequestFromString
static MythHTTPRequestType RequestFromString(const QString &Type)
Definition: mythhttptypes.h:221
HTTPConnectionUpgrade
@ HTTPConnectionUpgrade
Definition: mythhttptypes.h:131
HTTPNoEncode
@ HTTPNoEncode
Definition: mythhttptypes.h:136
MythHTTPConfig::m_services
HTTPServices m_services
Definition: mythhttptypes.h:74
HTTPQueue
std::deque< HTTPVariant > HTTPQueue
Definition: mythhttptypes.h:42
HTTPGzip
@ HTTPGzip
Definition: mythhttptypes.h:137
HTTPRange
std::pair< uint64_t, uint64_t > HTTPRange
Definition: mythhttpranges.h:9
HTTPServices
std::vector< HTTPService > HTTPServices
Definition: mythhttptypes.h:54
MythHTTPConfig
Definition: mythhttptypes.h:60
HTTPRanges
std::vector< HTTPRange > HTTPRanges
Definition: mythhttpranges.h:10
HTTPFile
std::shared_ptr< MythHTTPFile > HTTPFile
Definition: mythhttptypes.h:40
HTTPSwitchingProtocols
@ HTTPSwitchingProtocols
Definition: mythhttptypes.h:106
HTTPServicePtrs
std::vector< HTTPServicePtr > HTTPServicePtrs
Definition: mythhttptypes.h:51
MythHTTPContent
Definition: mythhttptypes.h:163
HTTPShortLife
@ HTTPShortLife
Definition: mythhttptypes.h:147
HTTPUnauthorized
@ HTTPUnauthorized
Definition: mythhttptypes.h:113
HTTPHandler
std::pair< QString, HTTPFunction > HTTPHandler
Definition: mythhttptypes.h:46
MythHTTPContent::m_multipartHeaderSize
int64_t m_multipartHeaderSize
Definition: mythhttptypes.h:171
HTTPRegisterTypes
std::function< void()> HTTPRegisterTypes
Definition: mythhttptypes.h:49
HTTPMediumLife
@ HTTPMediumLife
Definition: mythhttptypes.h:148
HTTPServiceCtor
std::function< HTTPServicePtr()> HTTPServiceCtor
Definition: mythhttptypes.h:52
HTTPPartialContent
@ HTTPPartialContent
Definition: mythhttptypes.h:109
HTTPServiceUnavailable
@ HTTPServiceUnavailable
Definition: mythhttptypes.h:123
HTTPUnknownVersion
@ HTTPUnknownVersion
Definition: mythhttptypes.h:83
MythHTTPContent::m_fileName
QString m_fileName
Definition: mythhttptypes.h:167
MythHTTP::ConnectionToString
static QString ConnectionToString(MythHTTPConnection Connection)
Definition: mythhttptypes.h:305
HTTPTooManyRequests
@ HTTPTooManyRequests
Definition: mythhttptypes.h:119
HTTPService
std::pair< QString, HTTPServiceCtor > HTTPService
Definition: mythhttptypes.h:53
HTTPNetworkAuthenticationRequired
@ HTTPNetworkAuthenticationRequired
Definition: mythhttptypes.h:124
HTTPHandlers
std::vector< HTTPHandler > HTTPHandlers
Definition: mythhttptypes.h:47
MythHTTPConnection
MythHTTPConnection
Definition: mythhttptypes.h:127
MythHTTPConfig::m_serverName
QString m_serverName
Definition: mythhttptypes.h:67