Cuberite
A lightweight, fast and extensible game server for Minecraft
HTTPMessageParser.h
Go to the documentation of this file.
1 
2 // HTTPMessageParser.h
3 
4 // Declares the cHTTPMessageParser class that parses HTTP messages (request or response) being pushed into the parser,
5 // and reports the individual parts via callbacks
6 
7 
8 
9 
10 
11 #pragma once
12 
13 #include "EnvelopeParser.h"
14 #include "TransferEncodingParser.h"
15 
16 
17 
18 
19 
23 {
24 public:
25  class cCallbacks
26  {
27  public:
28  // Force a virtual destructor in descendants:
29  virtual ~cCallbacks() {}
30 
32  virtual void OnError(const AString & a_ErrorDescription) = 0;
33 
36  virtual void OnFirstLine(const AString & a_FirstLine) = 0;
37 
39  virtual void OnHeaderLine(const AString & a_Key, const AString & a_Value) = 0;
40 
42  virtual void OnHeadersFinished(void) = 0;
43 
45  virtual void OnBodyData(const void * a_Data, size_t a_Size) = 0;
46 
48  virtual void OnBodyFinished(void) = 0;
49  };
50 
52  cHTTPMessageParser(cCallbacks & a_Callbacks);
53 
56  size_t Parse(const char * a_Data, size_t a_Size);
57 
60  void Finish(void);
61 
63  bool IsFinished(void) const { return m_IsFinished; }
64 
66  void Reset(void);
67 
68 
69 protected:
70 
73 
76 
79 
82 
85 
88 
91 
95 
100 
101 
105  size_t ParseFirstLine(void);
106 
110  size_t ParseBody(const char * a_Data, size_t a_Size);
111 
113  void HeadersFinished(void);
114 
115  // cEnvelopeParser::cCallbacks overrides:
116  virtual void OnHeaderLine(const AString & a_Key, const AString & a_Value) override;
117 
118  // cTransferEncodingParser::cCallbacks overrides:
119  virtual void OnError(const AString & a_ErrorDescription) override;
120  virtual void OnBodyData(const void * a_Data, size_t a_Size) override;
121  virtual void OnBodyFinished(void) override;
122 };
123 
124 
125 
126 
cHTTPMessageParser::m_HasHadError
bool m_HasHadError
Set to true if an error has been encountered by the parser.
Definition: HTTPMessageParser.h:75
cHTTPMessageParser::cHTTPMessageParser
cHTTPMessageParser(cCallbacks &a_Callbacks)
Creates a new parser instance that will use the specified callbacks for reporting.
Definition: HTTPMessageParser.cpp:14
cHTTPMessageParser::cCallbacks::OnHeaderLine
virtual void OnHeaderLine(const AString &a_Key, const AString &a_Value)=0
Called when a single header line is parsed.
cTransferEncodingParserPtr
std::shared_ptr< cTransferEncodingParser > cTransferEncodingParserPtr
Definition: TransferEncodingParser.h:13
cHTTPMessageParser::IsFinished
bool IsFinished(void) const
Returns true if the entire response has been already parsed.
Definition: HTTPMessageParser.h:63
cHTTPMessageParser::Parse
size_t Parse(const char *a_Data, size_t a_Size)
Parses the incoming data and calls the appropriate callbacks.
Definition: HTTPMessageParser.cpp:25
cHTTPMessageParser::Finish
void Finish(void)
Called when the server indicates no more data will be sent (HTTP 1.0 socket closed).
cHTTPMessageParser::OnHeaderLine
virtual void OnHeaderLine(const AString &a_Key, const AString &a_Value) override
Called when a full header line is parsed.
Definition: HTTPMessageParser.cpp:174
cHTTPMessageParser::OnBodyData
virtual void OnBodyData(const void *a_Data, size_t a_Size) override
Called for each chunk of the incoming body data.
Definition: HTTPMessageParser.cpp:207
EnvelopeParser.h
cHTTPMessageParser::m_ContentLength
size_t m_ContentLength
The content length, parsed from the headers, if available.
Definition: HTTPMessageParser.h:99
cHTTPMessageParser::OnBodyFinished
virtual void OnBodyFinished(void) override
Called when the entire body has been reported by OnBodyData().
Definition: HTTPMessageParser.cpp:216
cHTTPMessageParser::m_FirstLine
AString m_FirstLine
The complete first line of the response.
Definition: HTTPMessageParser.h:81
cHTTPMessageParser::cCallbacks::OnBodyFinished
virtual void OnBodyFinished(void)=0
Called when the entire body has been reported by OnBodyData().
cHTTPMessageParser::ParseBody
size_t ParseBody(const char *a_Data, size_t a_Size)
Parses the message body.
Definition: HTTPMessageParser.cpp:141
cHTTPMessageParser::m_EnvelopeParser
cEnvelopeParser m_EnvelopeParser
Parser for the envelope data (headers)
Definition: HTTPMessageParser.h:87
cHTTPMessageParser::HeadersFinished
void HeadersFinished(void)
Called internally when the headers-parsing has just finished.
Definition: HTTPMessageParser.cpp:159
cHTTPMessageParser::cCallbacks::OnFirstLine
virtual void OnFirstLine(const AString &a_FirstLine)=0
Called when the first line of the request or response is fully parsed.
cEnvelopeParser::cCallbacks
Definition: EnvelopeParser.h:19
cHTTPMessageParser
Definition: HTTPMessageParser.h:20
cHTTPMessageParser::cCallbacks::OnError
virtual void OnError(const AString &a_ErrorDescription)=0
Called when an error has occured while parsing.
cHTTPMessageParser::m_Callbacks
cCallbacks & m_Callbacks
The callbacks used for reporting.
Definition: HTTPMessageParser.h:72
cEnvelopeParser
Definition: EnvelopeParser.h:16
cHTTPMessageParser::Reset
void Reset(void)
Resets the parser to the initial state, so that a new request can be parsed.
Definition: HTTPMessageParser.cpp:107
cHTTPMessageParser::cCallbacks::~cCallbacks
virtual ~cCallbacks()
Definition: HTTPMessageParser.h:29
cHTTPMessageParser::m_Buffer
AString m_Buffer
Buffer for the incoming data until the status line is parsed.
Definition: HTTPMessageParser.h:84
TransferEncodingParser.h
cHTTPMessageParser::cCallbacks
Definition: HTTPMessageParser.h:25
cHTTPMessageParser::OnError
virtual void OnError(const AString &a_ErrorDescription) override
Called when an error has occured while parsing.
Definition: HTTPMessageParser.cpp:197
cHTTPMessageParser::m_TransferEncodingParser
cTransferEncodingParserPtr m_TransferEncodingParser
The specific parser for the transfer encoding used by this response.
Definition: HTTPMessageParser.h:90
cHTTPMessageParser::cCallbacks::OnHeadersFinished
virtual void OnHeadersFinished(void)=0
Called when all the headers have been parsed.
cTransferEncodingParser::cCallbacks
Definition: TransferEncodingParser.h:24
cHTTPMessageParser::m_IsFinished
bool m_IsFinished
True if the response has been fully parsed.
Definition: HTTPMessageParser.h:78
AString
std::string AString
Definition: StringUtils.h:11
cHTTPMessageParser::m_TransferEncoding
AString m_TransferEncoding
The transfer encoding to be used by the parser.
Definition: HTTPMessageParser.h:94
cHTTPMessageParser::cCallbacks::OnBodyData
virtual void OnBodyData(const void *a_Data, size_t a_Size)=0
Called for each chunk of the incoming body data.
cHTTPMessageParser::ParseFirstLine
size_t ParseFirstLine(void)
Parses the first line out of m_Buffer.
Definition: HTTPMessageParser.cpp:123