Webserv
Loading...
Searching...
No Matches
Request.hpp
Go to the documentation of this file.
1#pragma once
2
4#include "http/Headers.hpp"
5#include "http/HttpStatus.hpp"
6#include <aio.h>
7
8namespace config {
9class LocationBlock;
10class ServerBlock;
11} // namespace config
12
13namespace network {
14class ClientHandler;
15} // namespace network
16
17namespace utils {
18class TempFile;
19} // namespace utils
20
21namespace http {
22
28public:
30
32
34 std::string uri;
35 std::string path;
36 std::string queryString;
37 std::string version;
38
44 static RequestStartLine parse(std::string const &line);
45
49 static Method matchHttpMethod(std::string const &s);
50
54 static char const *methodToString(Method m);
55};
56
66class Request {
67public:
68 Request();
69 // ~HttpRequest(); // Will be needed to manage body_
70
75 bool wantsJson() const;
76
81 void clear();
82
83 size_t getMaxAllowedContentSize() const;
84
85 // --- Public Read-only Accessors ---
86
91 config::LocationBlock const *location() const;
92
97 config::ServerBlock const *server() const;
98
103 Headers &headers();
104
108 Headers const &headers() const;
109
110 // --- RequestLine Accessors ---
111
116
120 std::string const &uri() const;
121
122 Request &uri(std::string const &);
123
127 std::string const &path() const;
128
132 std::string const &queryString() const;
133
137 std::string const &version() const;
138
139 utils::TempFile const *body() const;
141
142 const std::string &bodyPath() const;
143
153 utils::TempFile::MoveStatus moveBody(const std::string &destPath) const;
154
160 Request &status(HttpStatus statusCode);
161
165 HttpStatus status() const;
166
175 std::string resolvePath() const;
176
181 std::string const &remoteAddr() const;
182
183 ~Request();
184
185protected:
186 friend class RequestParser;
187 friend class Router;
189
193 Request &path(std::string const &);
194 Request &version(std::string const &);
195 Request &remoteAddr(std::string const &addr);
197
198private:
199 Request(const Request &);
201
208 std::string remoteAddr_; // Client IP address
209};
210
211} // namespace http
Represents a single 'location' block from the configuration file.
Definition LocationBlock.hpp:18
Represents a single 'server' block from the configuration file.
Definition ServerBlock.hpp:22
Manages a collection of HTTP headers.
Definition Headers.hpp:17
Holds the parsed components of an HTTP request's first line.
Definition Request.hpp:27
std::string path
The path portion only (e.g., "/path")
Definition Request.hpp:35
std::string version
The HTTP protocol version (e.g., "HTTP/1.1")
Definition Request.hpp:37
static char const * methodToString(Method m)
Converts a method enum to its string representation.
Definition Request.cpp:50
Method
Definition Request.hpp:29
@ GET
Definition Request.hpp:29
@ POST
Definition Request.hpp:29
@ HEAD
Definition Request.hpp:29
@ UNKNOWN
Definition Request.hpp:29
@ PUT
Definition Request.hpp:29
@ DELETE
Definition Request.hpp:29
static RequestStartLine parse(std::string const &line)
Parses a raw request line (e.g., "GET /path?q HTTP/1.1").
Definition Request.cpp:11
static Method matchHttpMethod(std::string const &s)
Converts a method string (e.g., "GET") to its enum.
Definition Request.cpp:36
RequestStartLine()
Definition Request.cpp:9
Method method
Definition Request.hpp:33
std::string queryString
The query string only (e.g., "query=1")
Definition Request.hpp:36
std::string uri
The full, original request-target (e.g., "/path?query=1")
Definition Request.hpp:34
std::string const & uri() const
Gets the full, original request URI (e.g., "/path?query=1").
Definition Request.cpp:102
config::LocationBlock const * location() const
Gets a const pointer to the matched LocationBlock.
Definition Request.cpp:100
config::ServerBlock const * server() const
Gets a const pointer to the matched ServerBlock.
Definition Request.cpp:101
utils::TempFile::MoveStatus moveBody(const std::string &destPath) const
Relocates the request body to a permanent location.
Definition Request.cpp:131
config::ServerBlock const * server_
Definition Request.hpp:206
Request()
Definition Request.cpp:67
Headers & headers()
Gets a mutable reference to the request headers.
Definition Request.cpp:107
Request & operator=(const Request &)
const std::string & bodyPath() const
Definition Request.cpp:126
std::string const & path() const
Gets the path portion of the URI (e.g., "/path").
Definition Request.cpp:103
std::string const & queryString() const
Gets the query string portion of the URI (e.g., "query=1").
Definition Request.cpp:104
RequestStartLine::Method method() const
Gets the HTTP method enum.
Definition Request.cpp:106
std::string remoteAddr_
Definition Request.hpp:208
size_t getMaxAllowedContentSize() const
Definition Request.cpp:87
void clear()
Resets the request to a default state, ready for reuse. Cleans up any existing body and resets all fi...
Definition Request.cpp:73
std::string const & version() const
Gets the HTTP protocol version (e.g., "HTTP/1.1").
Definition Request.cpp:105
friend class RequestParser
Definition Request.hpp:186
HttpStatus status() const
Gets the current status code.
Definition Request.cpp:116
bool wantsJson() const
Checks the 'Accept' header to see if the client prefers JSON.
Definition Request.cpp:71
RequestStartLine requestLine_
Definition Request.hpp:202
utils::TempFile const * body() const
Definition Request.cpp:117
std::string resolvePath() const
Resolves the full filesystem path for a request.
Definition Request.cpp:140
config::LocationBlock const * location_
Definition Request.hpp:205
friend class Router
Definition Request.hpp:187
utils::TempFile * body_
Definition Request.hpp:204
~Request()
Definition Request.cpp:69
std::string const & remoteAddr() const
Gets the remote (client) IP address for this request.
Definition Request.cpp:136
Request(const Request &)
HttpStatus status_
Definition Request.hpp:207
Headers headers_
Definition Request.hpp:203
Manages the full lifecycle of a single client connection.
Definition ClientHandler.hpp:21
Definition filesystem.hpp:24
MoveStatus
Definition filesystem.hpp:36
Definition ArgumentFactory.hpp:5
Definition IArgument.hpp:5
HttpStatus
Definition HttpStatus.hpp:11
Definition Request.hpp:13
Definition filesystem.hpp:9