7#include <QtNetwork/QHostAddress>
10#include <imtrest/IRequest.h>
11#include <imtrest/IRequestServlet.h>
12#include <imtrest/http_parser.h>
19class CHttpRequest:
public QObject,
virtual public IRequest
35 CHttpRequest(
const IRequestServlet& requestHandler,
const IProtocolEngine& engine);
37 QByteArrayList GetHeaders()
const;
38 QByteArray GetHeaderValue(
const QByteArray& headerType)
const;
40 virtual MethodType GetMethodType()
const;
41 virtual QByteArray GetBody()
const override;
42 QHostAddress GetRemoteAddress()
const;
44 void SetHeader(
const QByteArray& headerId,
const QByteArray& value);
45 void SetMethodType(
const MethodType& methodType);
46 void SetBody(
const QByteArray& body);
47 void SetCommandId(
const QByteArray& commandId);
49 static int OnStartMessage(http_parser* httpParser);
50 static int OnUrl(http_parser* httpParser,
const char* at,
size_t length);
51 static int OnStatus(http_parser* httpParser,
const char *at,
size_t length);
52 static int OnHeaderField(http_parser* httpParser,
const char *at,
size_t length);
53 static int OnHeaderValue(http_parser* httpParser,
const char *at,
size_t length);
54 static int OnHeadersComplete(http_parser* httpParser);
55 static int OnBody(http_parser* httpParser,
const char *at,
size_t length);
56 static int OnMessageComplete(http_parser* httpParser);
57 static int OnChunkHeader(http_parser* httpParser);
58 static int OnChunkComplete(http_parser* httpParser);
61 virtual RequestState GetState()
const override;
62 virtual QByteArray GetCommandId()
const override;
63 virtual CommandParams GetCommandParams()
const override;
64 virtual QByteArray GetRequestId()
const override;
67 virtual const IProtocolEngine& GetProtocolEngine()
const override;
70 virtual bool ResetData(CompatibilityMode mode = CM_WITHOUT_REFS)
override;
73 virtual bool ParseDeviceData(QIODevice& device)
override;
74 virtual bool ExecuteHttpParser(
const QByteArray& data,
const QObject* socketObjectPtr);
77 static bool ParseUrl(
const char *at,
size_t length,
bool connect, QUrl& url);
80 http_parser m_httpParser;
81 QHostAddress m_remoteAddress;
87 const IRequestServlet& m_requestHandler;
88 const IProtocolEngine& m_engine;
91 typedef QMap<QByteArray, QByteArray> HeaderMap;
94 QByteArray m_lastHeader;
96 QByteArray m_requestId;