Webserv
Loading...
Searching...
No Matches
http::ChunkedBodyParser Class Reference

#include <ChunkedBodyParser.hpp>

Classes

struct  ParseResult

Public Types

enum  Status { CHUNK_CONTINUE , CHUNK_DONE , CHUNK_ERROR }

Public Member Functions

 ChunkedBodyParser ()
void reset ()
Status parse (const char *input, size_t size, std::string &output, size_t &bytesConsumed)
 Parse chunked data incrementally.
HttpStatus errorStatus () const
void setMaxBodySize (size_t size)

Private Types

enum  InternalState {
  READING_SIZE , READING_DATA , READING_TRAILER_CRLF , READING_FINAL_CRLF ,
  DONE
}
typedef ParseResult(ChunkedBodyParser::* StateHandler) (const char *input, size_t size, std::string &output)

Private Member Functions

ParseResult readSize (const char *input, size_t size, std::string &output)
ParseResult readData (const char *input, size_t size, std::string &output)
ParseResult readTrailerCrlf (const char *input, size_t size, std::string &output)
ParseResult readFinalCrlf (const char *input, size_t size, std::string &output)
ParseResult setError (HttpStatus status)
bool parseHex (const std::string &hex, size_t &result) const

Private Attributes

InternalState state_
std::string sizeBuffer_
size_t bytesRemainingInChunk_
size_t totalBytesWritten_
size_t maxBodySize_
HttpStatus errorStatus_
bool sawCR_

Member Typedef Documentation

◆ StateHandler

typedef ParseResult(ChunkedBodyParser::* http::ChunkedBodyParser::StateHandler) (const char *input, size_t size, std::string &output)
private

Member Enumeration Documentation

◆ InternalState

Enumerator
READING_SIZE 
READING_DATA 
READING_TRAILER_CRLF 
READING_FINAL_CRLF 
DONE 

◆ Status

Enumerator
CHUNK_CONTINUE 
CHUNK_DONE 
CHUNK_ERROR 

Constructor & Destructor Documentation

◆ ChunkedBodyParser()

http::ChunkedBodyParser::ChunkedBodyParser ( )

Member Function Documentation

◆ errorStatus()

HttpStatus http::ChunkedBodyParser::errorStatus ( ) const

◆ parse()

ChunkedBodyParser::Status http::ChunkedBodyParser::parse ( const char * input,
size_t size,
std::string & output,
size_t & bytesConsumed )

Parse chunked data incrementally.

Parameters
inputRaw input buffer
sizeSize of input
outputDecoded body data (appended)
bytesConsumedHow many bytes were consumed from input
Returns
Status indicating parse state

◆ parseHex()

bool http::ChunkedBodyParser::parseHex ( const std::string & hex,
size_t & result ) const
private

◆ readData()

ChunkedBodyParser::ParseResult http::ChunkedBodyParser::readData ( const char * input,
size_t size,
std::string & output )
private

◆ readFinalCrlf()

ChunkedBodyParser::ParseResult http::ChunkedBodyParser::readFinalCrlf ( const char * input,
size_t size,
std::string & output )
private

◆ readSize()

ChunkedBodyParser::ParseResult http::ChunkedBodyParser::readSize ( const char * input,
size_t size,
std::string & output )
private

◆ readTrailerCrlf()

ChunkedBodyParser::ParseResult http::ChunkedBodyParser::readTrailerCrlf ( const char * input,
size_t size,
std::string & output )
private

◆ reset()

void http::ChunkedBodyParser::reset ( )

◆ setError()

ChunkedBodyParser::ParseResult http::ChunkedBodyParser::setError ( HttpStatus status)
private

◆ setMaxBodySize()

void http::ChunkedBodyParser::setMaxBodySize ( size_t size)

Member Data Documentation

◆ bytesRemainingInChunk_

size_t http::ChunkedBodyParser::bytesRemainingInChunk_
private

◆ errorStatus_

HttpStatus http::ChunkedBodyParser::errorStatus_
private

◆ maxBodySize_

size_t http::ChunkedBodyParser::maxBodySize_
private

◆ sawCR_

bool http::ChunkedBodyParser::sawCR_
private

◆ sizeBuffer_

std::string http::ChunkedBodyParser::sizeBuffer_
private

◆ state_

InternalState http::ChunkedBodyParser::state_
private

◆ totalBytesWritten_

size_t http::ChunkedBodyParser::totalBytesWritten_
private

The documentation for this class was generated from the following files: