22#include <QRegularExpression>
36{
"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " \
37 "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" \
117 QRegularExpression m_procReqLineExp {
"\\s+"};
118 QRegularExpression m_parseRangeExp {
"(\\d|\\-)"};
143 bool m_bEncrypted {
false};
145 bool m_bSOAPRequest {
false};
153 long m_nResponseStatus {200};
167 bool m_bKeepAlive {
true};
168 std::chrono::seconds m_nKeepAliveTimeout {0s};
173 void SetRequestProtocol (
const QString &sLine );
177 bool ProcessSOAPPayload (
const QString &sSOAPAction );
178 void ExtractMethodFromURL( );
180 QString GetResponseStatus (
void )
const;
181 QString GetResponseType (
void )
const;
182 QString GetResponseHeaders (
void );
184 bool ParseRange ( QString sRange,
189 bool ParseKeepAlive (
void );
191 void ParseCookies (
void );
193 QString BuildResponseHeader (
long long nSize );
195 qint64 SendData ( QIODevice *pDevice, qint64 llStart, qint64 llBytes );
196 qint64 SendFile ( QFile &
file, qint64 llStart, qint64 llBytes );
200 void AddCORSHeaders (
const QString &sOrigin );
207 bool ParseRequest ();
209 void FormatErrorResponse (
bool bServerError,
210 const QString &sFaultString,
211 const QString &sDetails );
212 void FormatErrorResponse(
UPnPResultCode eCode,
const QString &sMsg =
"");
215 void FormatActionResponse(
const NameValues &pArgs );
216 void FormatFileResponse (
const QString &sFileName );
217 void FormatRawResponse (
const QString &sXML );
219 qint64 SendResponse (
void );
220 void SendResponseRedirect(
const QString &hostName);
221 qint64 SendResponseFile(
const QString& sFileName );
223 void SetResponseHeader (
const QString &sKey,
224 const QString &sValue,
225 bool replace =
false );
227 void SetCookie (
const QString &sKey,
const QString &sValue,
228 const QDateTime &expiryDate,
231 QString GetRequestHeader (
const QString &sKey,
const QString &sDefault );
237 QByteArray GetResponsePage (
void );
239 QString GetRequestProtocol ()
const;
240 static QString GetResponseProtocol () ;
242 QString GetRequestType ()
const;
243 QString GetLastHeader(
const QString &sType )
const;
245 static QString GetMimeType (
const QString &sFileExtension );
246 static QStringList GetSupportedMimeTypes ();
247 static QString TestMimeType (
const QString &sFileName );
248 static long GetParameters ( QString sParams,
QStringMap &mapParams );
249 static QString GetETagHash (
const QByteArray &data );
255 virtual QString
ReadLine ( std::chrono::milliseconds msecs ) = 0;
256 virtual qint64
ReadBlock (
char *pData, qint64 nMaxLen, std::chrono::milliseconds msecs = 0ms ) = 0;
259 virtual QString GetHostName ();
282 QString
ReadLine ( std::chrono::milliseconds msecs )
override;
283 qint64
ReadBlock (
char *pData, qint64 nMaxLen, std::chrono::milliseconds msecs = 0ms )
override;
284 qint64
WriteBlock (
const char *pData, qint64 nLen )
override;
289 {
return(
m_pSocket->socketDescriptor() ); }
304 : m_code( nCode ), m_msg (std::move( sMsg ))
320 const QString &sMsg =
"" )
321 :
HttpException( nCode, sMsg ), m_hostName(std::move( sHostName ))
quint16 GetHostPort() override
QString GetPeerAddress() override
QString ReadLine(std::chrono::milliseconds msecs) override
qint64 ReadBlock(char *pData, qint64 nMaxLen, std::chrono::milliseconds msecs=0ms) override
qint64 WriteBlock(const char *pData, qint64 nLen) override
BufferedSocketDeviceRequest(QTcpSocket *pSocket)
QString GetHostAddress() override
~BufferedSocketDeviceRequest() override=default
int getSocketHandle() override
virtual ~HTTPRequest()=default
virtual QString GetHostAddress()=0
QString m_sResponseTypeText
virtual quint16 GetHostPort()=0
void SetKeepAliveTimeout(std::chrono::seconds nTimeout)
virtual int getSocketHandle()=0
MythUserSession m_userSession
QStringMultiMap m_mapHeaders
virtual QString ReadLine(std::chrono::milliseconds msecs)=0
bool GetKeepAlive() const
QStringMap m_mapRespHeaders
virtual qint64 ReadBlock(char *pData, qint64 nMaxLen, std::chrono::milliseconds msecs=0ms)=0
virtual qint64 WriteBlock(const char *pData, qint64 nLen)=0
static const char * s_szServerHeaders
virtual QString GetPeerAddress()=0
virtual ~HttpException()=default
HttpException(int nCode=-1, QString sMsg="")
HttpRedirectException(QString sHostName="", int nCode=-1, const QString &sMsg="")
~HttpRedirectException() override=default
virtual void ExecutePostProcess()=0
virtual ~IPostProcess()=default
static constexpr const char * SOAP_ENVELOPE_END
static constexpr const char * SOAP_ENVELOPE_BEGIN
static SSDPRequestType ProcessRequestLine(const QString &sLine)
const char * pszExtension
QMultiMap< QString, QString > QStringMultiMap
QMap< QString, QString > QStringMap