7 #ifndef HTTP_MESSAGE_PARSER_BASE_H
8 #define HTTP_MESSAGE_PARSER_BASE_H
142 void postBuffer(
const void* buf,
const size_t buf_size);
163 const size_t limit = 0);
169 using StateModel::runModel;
198 std::function<
void(
const char c)>
218 std::function<
void(
const std::string&)>
268 const unsigned int event);
288 bool isChar(
const char c)
const;
293 bool isCtl(
const char c)
const;
Implements a finite state machine.
std::string getBufferAsString(const size_t limit=0) const
Returns parser's input buffer as string.
static const int MORE_DATA_PROVIDED_EVT
New data provided and parsing should continue.
static const int DATA_READ_OK_EVT
Chunk of data successfully read and parsed.
static std::string logFormatHttpMessage(const std::string &message, const size_t limit=0)
Formats provided HTTP message for logging.
virtual void defineStates()
Defines states of the parser.
std::string error_message_
Error message set by onModelFailure.
void parseEndedHandler()
Handler for HTTP_PARSE_OK_ST and HTTP_PARSE_FAILED_ST.
HttpMessage & message_
Reference to the parsed HTTP message.
static const int HTTP_PARSE_OK_ST
Parsing successfully completed.
bool httpParseOk() const
Returns true if the message has been parsed successfully.
virtual void onModelFailure(const std::string &explanation)
A method called when parsing fails.
HttpMessageParserBase(HttpMessage &message)
Constructor.
bool isSpecial(const char c) const
Checks if specified value is a special character.
static const int HTTP_PARSE_OK_EVT
Parsing HTTP request successful.
bool needData() const
Returns true if the parser needs more data to continue.
void stateWithReadHandler(const std::string &handler_name, std::function< void(const char c)> after_read_logic)
Generic parser handler which reads a single byte of data and parses it using specified callback funct...
size_t buffer_pos_
Position of the next character to read from the buffer.
HttpParseError(const char *file, size_t line, const char *what)
Base class for HttpRequest and HttpResponse.
static const int NEED_MORE_DATA_EVT
Unable to proceed with parsing until new data is provided.
void invalidEventError(const std::string &handler_name, const unsigned int event)
This method is called when invalid event occurred in a particular parser state.
bool isCtl(const char c) const
Checks if specified value is a control value.
virtual void verifyEvents()
Verifies events used by the parser.
static const int SM_DERIVED_EVENT_MIN
Value at which custom events in a derived class should begin.
void parseFailure(const std::string &error_msg)
Transition parser to failure state.
static const int SM_DERIVED_STATE_MIN
Value at which custom states in a derived class should begin.
virtual const char * what() const
Returns a C-style character string of the cause of the exception.
bool isChar(const char c) const
Checks if specified value is a character.
std::string getErrorMessage() const
Returns error message.
This is a base class for exceptions thrown from the DNS library module.
std::string buffer_
Internal buffer from which parser reads data.
Defines the logger used by the top-level component of kea-dhcp-ddns.
bool popNextFromBuffer(std::string &next, const size_t limit=1)
Tries to read next byte from buffer.
virtual void defineEvents()
Define events used by the parser.
void getNextFromBuffer(std::string &bytes, const size_t limit=1)
Retrieves next bytes of data from the buffer.
Base class for the HTTP message parsers.
static const int HTTP_PARSE_FAILED_EVT
Parsing HTTP request failed.
This file defines the class StateModel.
void poll()
Run the parser as long as the amount of data is sufficient.
static const int HTTP_PARSE_FAILED_ST
Parsing failed.
Exception thrown when an error during parsing HTTP message has occurred.
void postBuffer(const void *buf, const size_t buf_size)
Provides more input data to the parser.
void stateWithMultiReadHandler(const std::string &handler_name, std::function< void(const std::string &)> after_read_logic)
Generic parser handler which reads multiple bytes of data and parses it using specified callback func...