Webserv
Loading...
Searching...
No Matches
ChunkedBodyParser.hpp
Go to the documentation of this file.
1#pragma once
2
3#include "http/HttpStatus.hpp"
4#include <string>
5
6namespace http {
7
9public:
15
17
18 void reset();
19
28 Status parse(const char* input, size_t size,
29 std::string& output, size_t& bytesConsumed);
30
31 HttpStatus errorStatus() const;
32 void setMaxBodySize(size_t size);
33
34private:
35 struct ParseResult {
36 bool ok;
37 size_t consumed;
38
39 static ParseResult success(size_t n);
40 static ParseResult needMore();
41 static ParseResult error();
42 };
43
51
53 const char* input, size_t size, std::string& output);
54
55 ParseResult readSize(const char* input, size_t size, std::string& output);
56 ParseResult readData(const char* input, size_t size, std::string& output);
57 ParseResult readTrailerCrlf(const char* input, size_t size, std::string& output);
58 ParseResult readFinalCrlf(const char* input, size_t size, std::string& output);
59
61 bool parseHex(const std::string& hex, size_t& result) const;
62
64 std::string sizeBuffer_;
69 bool sawCR_;
70};
71
72} // namespace http
void reset()
Definition ChunkedBodyParser.cpp:61
Status
Definition ChunkedBodyParser.hpp:10
@ CHUNK_DONE
Definition ChunkedBodyParser.hpp:12
@ CHUNK_ERROR
Definition ChunkedBodyParser.hpp:13
@ CHUNK_CONTINUE
Definition ChunkedBodyParser.hpp:11
HttpStatus errorStatus_
Definition ChunkedBodyParser.hpp:68
HttpStatus errorStatus() const
Definition ChunkedBodyParser.cpp:71
bool sawCR_
Definition ChunkedBodyParser.hpp:69
size_t maxBodySize_
Definition ChunkedBodyParser.hpp:67
ParseResult setError(HttpStatus status)
Definition ChunkedBodyParser.cpp:79
ParseResult readTrailerCrlf(const char *input, size_t size, std::string &output)
Definition ChunkedBodyParser.cpp:156
void setMaxBodySize(size_t size)
Definition ChunkedBodyParser.cpp:75
ChunkedBodyParser()
Definition ChunkedBodyParser.cpp:52
ParseResult readFinalCrlf(const char *input, size_t size, std::string &output)
Definition ChunkedBodyParser.cpp:183
Status parse(const char *input, size_t size, std::string &output, size_t &bytesConsumed)
Parse chunked data incrementally.
Definition ChunkedBodyParser.cpp:210
size_t bytesRemainingInChunk_
Definition ChunkedBodyParser.hpp:65
ParseResult readSize(const char *input, size_t size, std::string &output)
Definition ChunkedBodyParser.cpp:101
std::string sizeBuffer_
Definition ChunkedBodyParser.hpp:64
InternalState
Definition ChunkedBodyParser.hpp:44
@ DONE
Definition ChunkedBodyParser.hpp:49
@ READING_SIZE
Definition ChunkedBodyParser.hpp:45
@ READING_DATA
Definition ChunkedBodyParser.hpp:46
@ READING_FINAL_CRLF
Definition ChunkedBodyParser.hpp:48
@ READING_TRAILER_CRLF
Definition ChunkedBodyParser.hpp:47
ParseResult(ChunkedBodyParser::* StateHandler)(const char *input, size_t size, std::string &output)
Definition ChunkedBodyParser.hpp:52
InternalState state_
Definition ChunkedBodyParser.hpp:63
bool parseHex(const std::string &hex, size_t &result) const
Definition ChunkedBodyParser.cpp:85
size_t totalBytesWritten_
Definition ChunkedBodyParser.hpp:66
ParseResult readData(const char *input, size_t size, std::string &output)
Definition ChunkedBodyParser.cpp:138
Definition IArgument.hpp:5
HttpStatus
Definition HttpStatus.hpp:11
Definition ChunkedBodyParser.hpp:35
static ParseResult error()
Definition ChunkedBodyParser.cpp:45
static ParseResult success(size_t n)
Definition ChunkedBodyParser.cpp:31
size_t consumed
Definition ChunkedBodyParser.hpp:37
static ParseResult needMore()
Definition ChunkedBodyParser.cpp:38
bool ok
Definition ChunkedBodyParser.hpp:36