22#include <QRegularExpression>
35{
"<s:Envelope xmlns:s=\"http://schemas.xmlsoap.org/soap/envelope/\" " \
36 "s:encodingStyle=\"http://schemas.xmlsoap.org/soap/encoding/\">" \
116 QRegularExpression m_procReqLineExp {
"\\s+"};
117 QRegularExpression m_parseRangeExp {
"(\\d|\\-)"};
142 bool m_bProtected {
false};
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 );
176 void ProcessRequestLine (
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 bool Authenticated ();
202 QString GetAuthenticationHeader (
bool isStale =
false);
203 QString CalculateDigestNonce (
const QString &timeStamp)
const;
205 bool BasicAuthentication ();
206 bool DigestAuthentication ();
207 void AddCORSHeaders (
const QString &sOrigin );
214 bool ParseRequest ();
216 void FormatErrorResponse (
bool bServerError,
217 const QString &sFaultString,
218 const QString &sDetails );
221 void FormatActionResponse(
const NameValues &pArgs );
222 void FormatFileResponse (
const QString &sFileName );
223 void FormatRawResponse (
const QString &sXML );
225 qint64 SendResponse (
void );
226 qint64 SendResponseFile(
const QString& sFileName );
228 void SetResponseHeader (
const QString &sKey,
229 const QString &sValue,
230 bool replace =
false );
232 void SetCookie (
const QString &sKey,
const QString &sValue,
233 const QDateTime &expiryDate,
236 QString GetRequestHeader (
const QString &sKey,
const QString &sDefault );
242 QByteArray GetResponsePage (
void );
244 QString GetRequestProtocol ()
const;
245 static QString GetResponseProtocol () ;
247 QString GetRequestType ()
const;
248 QString GetLastHeader(
const QString &sType )
const;
250 static QString GetMimeType (
const QString &sFileExtension );
251 static QStringList GetSupportedMimeTypes ();
252 static QString TestMimeType (
const QString &sFileName );
253 static long GetParameters ( QString sParams,
QStringMap &mapParams );
254 static QString Encode (
const QString &sIn );
255 static QString Decode (
const QString &sIn );
256 static QString GetETagHash (
const QByteArray &data );
260 static bool IsUrlProtected (
const QString &sBaseUrl );
264 virtual QString
ReadLine ( std::chrono::milliseconds msecs ) = 0;
265 virtual qint64
ReadBlock (
char *pData, qint64 nMaxLen, std::chrono::milliseconds msecs = 0ms ) = 0;
268 virtual QString GetHostName ();
291 QString
ReadLine ( std::chrono::milliseconds msecs )
override;
292 qint64
ReadBlock (
char *pData, qint64 nMaxLen, std::chrono::milliseconds msecs = 0ms )
override;
293 qint64
WriteBlock (
const char *pData, qint64 nLen )
override;
298 {
return(
m_pSocket->socketDescriptor() ); }
313 : m_code( nCode ), m_msg (
std::move( sMsg ))
329 const QString &sMsg =
"" )
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
const char * pszExtension
QMultiMap< QString, QString > QStringMultiMap
QMap< QString, QString > QStringMap