Webserv
Loading...
Searching...
No Matches
RequestParser.hpp
Go to the documentation of this file.
1#pragma once
2#include "http/HttpStatus.hpp"
3#include "http/Request.hpp"
5#include <ostream>
6#include <string>
7#include <sys/types.h>
8#include <unistd.h>
9
10namespace http {
11
13public:
14 enum State {
15 READING_HEADERS, // Waiting for '\r\n\r\n'
16 HEADERS_READY, // **PAUSE STATE**. Headers are parsed. Waiting for routing.
17 READING_BODY, // Consuming the request body.
18 REQUEST_READY, // Successfully parsed one full request.
19 ERROR // A protocol or policy error occurred.
20 };
21
26 RequestParser(Request &req, size_t maxHeaderSize);
27
31 void reset();
32
39 State feed(char const *chunk, size_t size);
40
52
53 State state() const;
54 HttpStatus errorStatus() const;
55 bool hasLeftoverData() const { return !buffer_.empty(); }
56
57private:
63
69
70 void handleChunkedBody();
72 bool writeToBodyFile(const std::string &data);
73
78
79 void setRequestReady();
80
83
84 std::string buffer_;
85
86 size_t maxHeaderSize_; // Hard-coded server limit
87 size_t maxContentSize_; // Policy-driven limit, set in proceedReadingBody()
88
92
94
96};
97
98std::ostream &operator<<(std::ostream &o, RequestParser::State st);
99
100}; // namespace http
Definition ChunkedBodyParser.hpp:8
ChunkedBodyParser chunkParser_
Definition RequestParser.hpp:95
State parseHeaders()
Internal: Tries to find and parse the full header block.
Definition RequestParser.cpp:71
RequestParser(Request &req, size_t maxHeaderSize)
Definition RequestParser.cpp:13
State setError(HttpStatus status)
Sets the parser to an error state and updates the Request's status.
Definition RequestParser.cpp:34
void reset()
Resets the parser and the associated Request object for reuse.
Definition RequestParser.cpp:19
size_t bytesWrittenToBody_
Definition RequestParser.hpp:90
State parseBody()
Internal: Tries to consume data from the buffer for the body.
Definition RequestParser.cpp:129
size_t maxHeaderSize_
Definition RequestParser.hpp:86
HttpStatus errorStatus_
Definition RequestParser.hpp:82
State feed(char const *chunk, size_t size)
Feeds a chunk of raw socket data into the parser's state machine.
Definition RequestParser.cpp:42
State proceedReadingBody()
Resumes parsing after the HEADERS_READY pause.
Definition RequestParser.cpp:54
State state_
Definition RequestParser.hpp:81
void handleChunkedBody()
Definition RequestParser.cpp:182
size_t maxContentSize_
Definition RequestParser.hpp:87
HttpStatus errorStatus() const
Definition RequestParser.cpp:32
std::string buffer_
Definition RequestParser.hpp:84
size_t contentLength_
Definition RequestParser.hpp:89
State state() const
Definition RequestParser.cpp:31
State
Definition RequestParser.hpp:14
@ ERROR
Definition RequestParser.hpp:19
@ REQUEST_READY
Definition RequestParser.hpp:18
@ READING_HEADERS
Definition RequestParser.hpp:15
@ HEADERS_READY
Definition RequestParser.hpp:16
@ READING_BODY
Definition RequestParser.hpp:17
bool hasLeftoverData() const
Definition RequestParser.hpp:55
bool writeToBodyFile(const std::string &data)
Definition RequestParser.cpp:169
Request & request_
Definition RequestParser.hpp:93
void handleContentLengthBody()
Definition RequestParser.cpp:145
bool isContentChunked_
Definition RequestParser.hpp:91
void setRequestReady()
Definition RequestParser.cpp:209
Definition Request.hpp:66
Definition IArgument.hpp:5
HttpStatus
Definition HttpStatus.hpp:11
std::ostream & operator<<(std::ostream &o, RequestParser::State st)
Definition RequestParser.cpp:219