Http Parser¶
-
namespace HTTPServer
Enums
-
enum class ParseState¶
Values:
-
enumerator REQUEST_LINE¶
-
enumerator HEADERS¶
-
enumerator BODY¶
-
enumerator COMPLETE¶
-
enumerator ERROR¶
-
enumerator REQUEST_LINE¶
-
enum class ChunkState¶
Values:
-
enumerator SIZE¶
-
enumerator DATA¶
-
enumerator DATA_CRLF¶
-
enumerator TRAILERS¶
-
enumerator DONE¶
-
enumerator SIZE¶
-
enum class ParseResult¶
Values:
-
enumerator NEED_MORE_DATA¶
-
enumerator REQUEST_COMPLETE¶
-
enumerator PARSE_ERROR¶
-
enumerator NEED_MORE_DATA¶
-
enum class ParseError¶
Values:
-
enumerator NONE¶
-
enumerator INVALID_REQUEST_LINE_FORMAT¶
-
enumerator REQUEST_METHOD_EMPTY¶
-
enumerator REQUEST_METHOD_LOWERCASE¶
-
enumerator UNSUPPORTED_METHOD¶
-
enumerator UNSUPPORTED_VERSION¶
-
enumerator INVALID_HEADER_MISSING_COLON¶
-
enumerator INVALID_HEADER_UNSUPPORTED_CHARACTER¶
-
enumerator HEADER_TOO_LARGE¶
-
enumerator MISSING_HOST_HEADER¶
-
enumerator CONTENT_LENGTH_EMPTY¶
-
enumerator CONTENT_LENGTH_NOT_NUMERIC¶
-
enumerator BODY_TOO_LARGE¶
-
enumerator INVALID_CHUNKED_ENCODING¶
-
enumerator TOO_MANY_HEADERS¶
-
enumerator TOTAL_HEADER_SIZE_TOO_LARGE¶
-
enumerator NONE¶
-
class HttpParser¶
Public Functions
-
HttpParser()¶
-
ParseResult parse(std::string_view &buffer)¶
Feed new bytes into the parser. Consumes as much as possible from
bufferand leaves any unconsumed bytes in buffer
-
bool hasCompleteRequest() const¶
-
HttpRequest takeRequest()¶
-
bool hasError() const¶
-
ParseError error() const¶
-
void reset()¶
Prepare parser for next request (pipelining)
Private Functions
-
bool parseRequestLine(std::string_view &buffer)¶
Internal parsing methods
-
bool parseHeaders(std::string_view &buffer)¶
-
bool determineBodyFraming()¶
-
bool parseBody(std::string_view &buffer)¶
-
bool parseChunkSize(std::string_view &buffer)¶
-
bool parseChunkData(std::string_view &buffer)¶
-
bool parseChunkTrailers(std::string_view &buffer)¶
-
bool consumeLine(std::string_view &buffer, std::string &out)¶
-
bool validateRequestLine()¶
-
bool validateHeaders()¶
-
void parseQueryParams(const std::string &qs, std::unordered_map<std::string, std::string> &map)¶
-
std::string urlDecode(const std::string &s)¶
Private Members
-
ParseState d_state = ParseState::REQUEST_LINE¶
-
ChunkState d_chunkState = ChunkState::SIZE¶
-
ParseError d_error = ParseError::NONE¶
-
HttpRequest d_request¶
-
std::string d_lineBuffer¶
Temporary Buffers
-
size_t d_bodyBytesRemaining = 0¶
-
size_t d_currentChunkSize = 0¶
-
size_t d_currentChunkRead = 0¶
-
size_t d_currentHeaderCount = 0¶
-
size_t d_currentTotalHeaderSize = 0¶
-
HttpParser()¶
-
enum class ParseState¶