This commit is contained in:
whaffman 2025-10-26 13:43:42 +01:00
parent 5e9243b064
commit d98fb98c52
46 changed files with 267 additions and 241 deletions

View File

@ -1,11 +1,7 @@
[
# ============================================================================
# WEBSERV PROJECT IWYU MAPPINGS
# Based on preferences: Forward declarations in headers, central common header,
# umbrella headers for modules, strict standard library includes, stdexcept
# STANDARD LIBRARY PRIVATE IMPLEMENTATION MAPPINGS
# ============================================================================
# Standard C++ library private implementation mappings
{ include: ["<bits/std_abs.h>", "private", "<cstdlib>", "public"] },
{ include: ["<bits/stdint-intn.h>", "private", "<cstdint>", "public"] },
{ include: ["<bits/stdint-uintn.h>", "private", "<cstdint>", "public"] },
@ -14,23 +10,17 @@
{ include: ["<bits/exception.h>", "private", "<exception>", "public"] },
{ include: ["<bits/std_function.h>", "private", "<functional>", "public"] },
{ include: ["<bits/stringfwd.h>", "private", "<string>", "public"] },
{ include: ["<bits/basic_string.h>", "private", "<string>", "public"] },
{ include: ["<bits/move.h>", "private", "<utility>", "public"] },
{ include: ["<bits/stl_pair.h>", "private", "<utility>", "public"] },
{ include: ["<bits/stl_vector.h>", "private", "<vector>", "public"] },
{ include: ["<bits/stl_map.h>", "private", "<map>", "public"] },
{ include: ["<bits/unique_ptr.h>", "private", "<memory>", "public"] },
{ include: ["<bits/shared_ptr.h>", "private", "<memory>", "public"] },
# Standard library strict mappings (preference 5C - very strict)
{ include: ["<iostream>", "public", "<iostream>", "public"] },
{ symbol: ["std::cout", "private", "<iostream>", "public"] },
{ symbol: ["std::cerr", "private", "<iostream>", "public"] },
{ symbol: ["std::cin", "private", "<iostream>", "public"] },
{ symbol: ["std::endl", "private", "<iostream>", "public"] },
{ symbol: ["std::vector", "private", "<vector>", "public"] },
{ symbol: ["std::string", "private", "<string>", "public"] },
{ symbol: ["std::map", "private", "<map>", "public"] },
{ symbol: ["std::unordered_map", "private", "<unordered_map>", "public"] },
{ symbol: ["std::unique_ptr", "private", "<memory>", "public"] },
{ symbol: ["std::shared_ptr", "private", "<memory>", "public"] },
{ symbol: ["std::make_unique", "private", "<memory>", "public"] },
{ symbol: ["std::make_shared", "private", "<memory>", "public"] },
# System headers for socket programming
# ============================================================================
# SYSTEM HEADERS
# ============================================================================
{ include: ["<sys/socket.h>", "public", "<sys/socket.h>", "public"] },
{ include: ["<netinet/in.h>", "public", "<netinet/in.h>", "public"] },
{ include: ["<arpa/inet.h>", "public", "<arpa/inet.h>", "public"] },
@ -38,17 +28,9 @@
{ include: ["<fcntl.h>", "public", "<fcntl.h>", "public"] },
{ include: ["<unistd.h>", "public", "<unistd.h>", "public"] },
# Error handling (preference 6A - stdexcept)
{ symbol: ["std::runtime_error", "private", "<stdexcept>", "public"] },
{ symbol: ["std::logic_error", "private", "<stdexcept>", "public"] },
{ symbol: ["std::invalid_argument", "private", "<stdexcept>", "public"] },
{ symbol: ["std::out_of_range", "private", "<stdexcept>", "public"] },
# ============================================================================
# PROJECT HEADER MAPPINGS - Standardized on <> angle brackets
# PROJECT HEADERS - Normalize to angle brackets
# ============================================================================
# Convert quoted includes to angle brackets for consistency
{ include: ["\"webserv/log/Log.hpp\"", "public", "<webserv/log/Log.hpp>", "public"] },
{ include: ["\"webserv/log/Channel.hpp\"", "public", "<webserv/log/Channel.hpp>", "public"] },
{ include: ["\"webserv/log/StdoutChannel.hpp\"", "public", "<webserv/log/StdoutChannel.hpp>", "public"] },
@ -62,31 +44,27 @@
{ include: ["\"webserv/config/ConfigManager.hpp\"", "public", "<webserv/config/ConfigManager.hpp>", "public"] },
{ include: ["\"webserv/config/ServerConfig.hpp\"", "public", "<webserv/config/ServerConfig.hpp>", "public"] },
{ include: ["\"webserv/config/LocationConfig.hpp\"", "public", "<webserv/config/LocationConfig.hpp>", "public"] },
{ include: ["\i"webserv/utils/utls.hpp\"", "public", "<webserv/utils/utils.hpp>", "public"] },
{ include: ["\"webserv/config/AConfig.hpp\"", "public", "<webserv/config/AConfig.hpp>", "public"] },
{ include: ["\"webserv/config/GlobalConfig.hpp\"", "public", "<webserv/config/GlobalConfig.hpp>", "public"] },
{ include: ["\"webserv/utils/utils.hpp\"", "public", "<webserv/utils/utils.hpp>", "public"] },
{ include: ["\"webserv/utils/FileUtils.hpp\"", "public", "<webserv/utils/FileUtils.hpp>", "public"] },
{ include: ["\"webserv/server/Server.hpp\"", "public", "<webserv/server/Server.hpp>", "public"] },
{ include: ["\"webserv/client/Client.hpp\"", "public", "<webserv/client/Client.hpp>", "public"] },
{ include: ["\"webserv/socket/Socket.hpp\"", "public", "<webserv/socket/Socket.hpp>", "public"] },
{ include: ["\"webserv/socket/ASocket.hpp\"", "public", "<webserv/socket/ASocket.hpp>", "public"] },
{ include: ["\"webserv/socket/ClientSocket.hpp\"", "public", "<webserv/socket/ClientSocket.hpp>", "public"] },
{ include: ["\"webserv/socket/ServerSocket.hpp\"", "public", "<webserv/socket/ServerSocket.hpp>", "public"] },
{ include: ["\"webserv/socket/CgiSocket.hpp\"", "public", "<webserv/socket/CgiSocket.hpp>", "public"] },
{ include: ["\"webserv/router/Router.hpp\"", "public", "<webserv/router/Router.hpp>", "public"] },
{ include: ["\"webserv/handler/AHandler.hpp\"", "public", "<webserv/handler/AHandler.hpp>", "public"] },
{ include: ["\"webserv/handler/CgiHandler.hpp\"", "public", "<webserv/handler/CgiHandler.hpp>", "public"] },
{ include: ["\"webserv/handler/FileHandler.hpp\"", "public", "<webserv/handler/FileHandler.hpp>", "public"] },
{ include: ["\"webserv/handler/ErrorHandler.hpp\"", "public", "<webserv/handler/ErrorHandler.hpp>", "public"] },
# ============================================================================
# FORWARD DECLARATION PREFERENCES
# ============================================================================
# Suggest forward declarations instead of full includes in headers where possible
{ symbol: ["Client", "private", "<webserv/client/Client.hpp>", "public"] },
{ symbol: ["Server", "private", "<webserv/server/Server.hpp>", "public"] },
{ symbol: ["HttpRequest", "private", "<webserv/http/HttpRequest.hpp>", "public"] },
{ symbol: ["HttpResponse", "private", "<webserv/http/HttpResponse.hpp>", "public"] },
{ symbol: ["HttpHeaders", "private", "<webserv/http/HttpHeaders.hpp>", "public"] },
{ symbol: ["ServerConfig", "private", "<webserv/config/ServerConfig.hpp>", "public"] },
{ symbol: ["ConfigManager", "private", "<webserv/config/ConfigManager.hpp>", "public"] },
{ symbol: ["LocationConfig", "private", "<webserv/config/LocationConfig.hpp>", "public"] },
{ symbol: ["Socket", "private", "<webserv/socket/Socket.hpp>", "public"] },
{ symbol: ["Router", "private", "<webserv/router/Router.hpp>", "public"] },
{ symbol: ["Channel", "private", "<webserv/log/Channel.hpp>", "public"] }
{ include: ["\"webserv/handler/URI.hpp\"", "public", "<webserv/handler/URI.hpp>", "public"] },
{ include: ["\"webserv/handler/CgiProcess.hpp\"", "public", "<webserv/handler/CgiProcess.hpp>", "public"] },
{ include: ["\"webserv/handler/CgiEnvironment.hpp\"", "public", "<webserv/handler/CgiEnvironment.hpp>", "public"] },
# CgiHandler needs CgiProcess for unique_ptr deletion
{ include: ["<webserv/handler/CgiHandler.hpp>", "public", "<webserv/handler/CgiProcess.hpp>", "public"] }
]

View File

@ -1,24 +1,26 @@
#include "webserv/handler/CgiHandler.hpp"
#include "webserv/handler/ErrorHandler.hpp"
#include "webserv/socket/ASocket.hpp"
#include "webserv/socket/CgiSocket.hpp"
#include <webserv/client/Client.hpp>
#include <webserv/handler/CgiHandler.hpp> // for CgiHandler
#include <webserv/handler/ErrorHandler.hpp> // for ErrorHandler
#include <webserv/http/HttpHeaders.hpp> // for HttpHeaders
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/http/HttpResponse.hpp> // for HttpResponse
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/router/Router.hpp> // for Router
#include <webserv/server/Server.hpp> // for Server
#include <webserv/socket/ClientSocket.hpp> // for Socket
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <webserv/socket/ClientSocket.hpp> // for ClientSocket
#include <cstdint> // for uint8_t
#include <exception>
#include <functional> // for ref, reference_wrapper
#include <functional> // for function, ref, reference_wrapper
#include <map> // for map
#include <memory>
#include <string> // for basic_string, to_string, operator+, operator<=>
#include <utility> // for pair, move
#include <memory> // for unique_ptr, make_unique, allocator, operator==, default_delete
#include <stdexcept> // for runtime_error
#include <string> // for basic_string, to_string, operator+, char_traits, operator<=>
#include <utility> // for move, pair
#include <vector> // for vector
#include <sys/epoll.h>
#include <sys/socket.h> // for send
#include <sys/types.h> // for ssize_t
Client::Client(std::unique_ptr<ClientSocket> socket, Server &server)

View File

@ -2,25 +2,28 @@
// #include <webserv/http/HttpResponse.hpp>
#include "webserv/handler/AHandler.hpp"
#include "webserv/router/Router.hpp"
#include "webserv/socket/ASocket.hpp"
#include "webserv/socket/CgiSocket.hpp"
#include <webserv/config/ServerConfig.hpp> // for ServerConfig
#include <webserv/handler/AHandler.hpp> // for AHandler
#include <webserv/http/HttpConstants.hpp> // for OK
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/http/HttpResponse.hpp> // for HttpResponse
#include <webserv/router/Router.hpp>
#include <webserv/server/Server.hpp>
#include <webserv/socket/ASocket.hpp>
#include <webserv/socket/CgiSocket.hpp>
#include <webserv/socket/ClientSocket.hpp> // for ClientSocket
#include <cstddef> // for size_t
#include <memory> // for unique_ptr
#include <unordered_map> // for unordered_map
class Server;
class ClientSocket;
class ServerConfig;
class HttpResponse;
class ASocket;
class HttpRequest;
class Router;
class Client
{

View File

@ -1,4 +1,5 @@
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/config/directive/ADirective.hpp> // for ADirective
#include <webserv/config/directive/DirectiveFactory.hpp> // for DirectiveFactory
#include <webserv/config/directive/DirectiveValue.hpp> // for DirectiveValue

View File

@ -1,4 +1,5 @@
#include <webserv/config/ConfigManager.hpp>
#include <webserv/config/GlobalConfig.hpp> // for GlobalConfig
#include <webserv/log/Log.hpp> // for Log
#include <webserv/utils/utils.hpp> // for removeComments

View File

@ -1,6 +1,6 @@
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/config/LocationConfig.hpp>
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/config/AConfig.hpp> // for AConfig
LocationConfig::LocationConfig(const std::string &block, const std::string &path, const AConfig *parent)
: AConfig(parent), _path(path)

View File

@ -1,9 +1,10 @@
#include <webserv/config/directive/ADirective.hpp>
#include <webserv/config/directive/DirectiveValue.hpp> // for DirectiveValue, operator<<
#include <utility> // for move
ADirective::ADirective(std::string name) : name_(std::move(name)) //TODO Move here but derived classes take const ref
ADirective::ADirective(std::string name) : name_(std::move(name)) // TODO Move here but derived classes take const ref
{
}

View File

@ -1,10 +1,12 @@
#include <webserv/config/directive/SizeDirective.hpp> // for SizeDirective
#include <webserv/config/directive/ADirective.hpp> // for ADirective
#include <webserv/config/directive/DirectiveValue.hpp> // for DirectiveValueType
#include <webserv/config/directive/SizeDirective.hpp> // for SizeDirective
#include <webserv/utils/utils.hpp> // for trim
#include <algorithm> // for __transform_fn, transform
#include <cctype> // for tolower
#include <exception> // for exception
#include <stdexcept> // for invalid_argument
SizeDirective::SizeDirective(const std::string &name, const std::string &value)

View File

@ -1,4 +1,5 @@
#include <webserv/config/validation/ConfigValidator.hpp>
#include <webserv/config/validation/ValidationEngine.hpp> // for ValidationEngine
#include <webserv/config/validation/directive_rules/AValidationRule.hpp> // for AValidationRule
#include <webserv/config/validation/directive_rules/AllowedValuesRule.hpp> // for AllowedValuesRule
@ -36,9 +37,8 @@ ConfigValidator::ConfigValidator(const GlobalConfig *config) : engine_(std::make
engine_->addServerRule("root", std::make_unique<FolderExistsRule>(false));
/*Location Directive Rules*/
engine_->addLocationRule("allowed_methods",
std::make_unique<AllowedValuesRule>(std::vector<std::string>{"GET", "POST", "DELETE", "PUT"},
true));
engine_->addLocationRule("allowed_methods", std::make_unique<AllowedValuesRule>(
std::vector<std::string>{"GET", "POST", "DELETE", "PUT"}, true));
engine_->addLocationRule("root", std::make_unique<FolderExistsRule>(true));
engine_->addLocationRule("cgi_ext", std::make_unique<CgiExtValidationRule>(false));

View File

@ -1,8 +1,9 @@
#include <webserv/config/validation/ValidationEngine.hpp>
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/config/GlobalConfig.hpp> // for GlobalConfig
#include <webserv/config/LocationConfig.hpp> // for LocationConfig
#include <webserv/config/ServerConfig.hpp> // for ServerConfig
#include <webserv/config/validation/ValidationEngine.hpp>
#include <webserv/config/validation/ValidationResult.hpp> // for ValidationResult
#include <webserv/config/validation/directive_rules/AValidationRule.hpp> // for AValidationRule
#include <webserv/config/validation/structural_rules/AStructuralValidationRule.hpp> // for AStructuralValidationRule

View File

@ -1,4 +1,5 @@
#include <webserv/config/validation/ValidationResult.hpp>
#include <webserv/log/Log.hpp> // for Log
#include <utility> // for move

View File

@ -2,7 +2,6 @@
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/config/validation/ValidationResult.hpp> // for ValidationResult
#include <webserv/log/Log.hpp> // for LOCATION, Log
#include <utility> // for move

View File

@ -1,14 +1,17 @@
#include "webserv/log/Log.hpp"
#include <webserv/handler/AHandler.hpp> // for AHandler
#include <webserv/client/Client.hpp>
#include <webserv/handler/AHandler.hpp>
#include <webserv/handler/URI.hpp>
#include <webserv/http/HttpRequest.hpp>
#include <webserv/http/HttpResponse.hpp>
#include <webserv/client/Client.hpp> // for Client
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/handler/URI.hpp> // for URI
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/log/Log.hpp> // for Log
#include <webserv/socket/TimerSocket.hpp> // for TimerSocket
#include <chrono>
#include <memory>
#include <string>
#include <chrono> // for operator*, milliseconds
#include <functional> // for function
#include <memory> // for unique_ptr, make_unique
#include <optional> // for optional
#include <string> // for basic_string, operator+, to_string
AHandler::AHandler(const HttpRequest &request, HttpResponse &response) : request_(request), response_(response) {}

View File

@ -1,10 +1,12 @@
#pragma once
#include "webserv/socket/TimerSocket.hpp"
#include <webserv/socket/TimerSocket.hpp>
#include <memory> // for unique_ptr
#include <memory>
class HttpRequest;
class HttpResponse;
class TimerSocket;
class AHandler
{

View File

@ -1,8 +1,11 @@
#include "webserv/handler/CgiEnvironment.hpp"
#include <webserv/handler/CgiEnvironment.hpp>
#include "webserv/log/Log.hpp"
#include <webserv/handler/URI.hpp> // for URI
#include <webserv/http/HttpHeaders.hpp> // for HttpHeaders
#include <cstring> // for strcpy
#include <cstring> // for strcpy, size_t
#include <optional> // for optional
#include <utility> // for pair
CgiEnvironment::CgiEnvironment(const URI &uri, const HttpRequest &request)
{
@ -46,8 +49,6 @@ CgiEnvironment::CgiEnvironment(const URI &uri, const HttpRequest &request)
env_["HTTP_ACCEPT"] = headers.get("Accept");
env_["HTTP_ACCEPT_LANGUAGE"] = headers.get("Accept-Language");
env_["HTTP_ACCEPT_ENCODING"] = headers.get("Accept-Encoding");
}
char **CgiEnvironment::toEnvp() const

View File

@ -1,21 +1,22 @@
#pragma once
#include <map>
#include <string>
#include "webserv/handler/URI.hpp"
#include "webserv/http/HttpRequest.hpp"
#include "webserv/utils/FileUtils.hpp"
#include "webserv/log/Log.hpp"
#include <webserv/handler/URI.hpp>
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/log/Log.hpp>
#include <webserv/utils/FileUtils.hpp>
#include <map> // for map
#include <string> // for basic_string, string
class URI;
class CgiEnvironment
{
public:
public:
CgiEnvironment(const URI &uri, const HttpRequest &request);
[[nodiscard]] char **toEnvp() const;
private:
private:
std::map<std::string, std::string> env_;
};

View File

@ -1,15 +1,19 @@
#include "webserv/handler/ErrorHandler.hpp"
#include <webserv/handler/CgiHandler.hpp>
#include <webserv/client/Client.hpp> // for Client
#include <webserv/handler/CgiHandler.hpp>
#include <webserv/handler/CgiProcess.hpp> // for CgiProcess
#include <webserv/handler/ErrorHandler.hpp> // for ErrorHandler
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/http/HttpResponse.hpp> // for HttpResponse
#include <webserv/log/Log.hpp> // for Log
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/socket/CgiSocket.hpp> // for CgiSocket
#include <webserv/utils/utils.hpp> // for stoul
#include <webserv/socket/TimerSocket.hpp> // for TimerSocket
#include <webserv/utils/utils.hpp> // for trim
#include <sys/types.h>
#include <functional> // for function
#include <utility> // for move
#include <sys/types.h> // for ssize_t
CgiHandler::CgiHandler(const HttpRequest &request, HttpResponse &response)
: AHandler(request, response), cgiProcess_(nullptr), cgiStdIn_(nullptr), cgiStdOut_(nullptr)

View File

@ -1,11 +1,18 @@
#pragma once
#include "webserv/handler/AHandler.hpp"
#include "webserv/socket/CgiSocket.hpp"
#include <webserv/handler/AHandler.hpp> // for AHandler
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/socket/CgiSocket.hpp> // for CgiSocket
#include <memory>
#include <memory> // for unique_ptr
#include <string> // for string
#include <vector> // for vector
#include <stddef.h> // for size_t
#include <stdint.h> // for uint8_t
class CgiProcess;
class HttpResponse;
class CgiHandler : public AHandler
{
@ -21,7 +28,8 @@ class CgiHandler : public AHandler
void handle() override;
void wait() noexcept;
void setCgiSockets(std::unique_ptr<CgiSocket> cgiStdIn, std::unique_ptr<CgiSocket> cgiStdOut, std::unique_ptr<CgiSocket> cgiStdErr);
void setCgiSockets(std::unique_ptr<CgiSocket> cgiStdIn, std::unique_ptr<CgiSocket> cgiStdOut,
std::unique_ptr<CgiSocket> cgiStdErr);
void setPid(int pid);
protected:
@ -42,7 +50,6 @@ class CgiHandler : public AHandler
int pid_ = -1;
void write();
void read();
void error();

View File

@ -1,22 +1,23 @@
#include "webserv/handler/CgiProcess.hpp"
#include <webserv/handler/CgiProcess.hpp>
#include "webserv/handler/CgiEnvironment.hpp"
#include "webserv/http/HttpRequest.hpp"
#include "webserv/log/Log.hpp"
#include "webserv/socket/CgiSocket.hpp"
#include <webserv/handler/CgiEnvironment.hpp> // for CgiEnvironment
#include <webserv/handler/CgiHandler.hpp> // for CgiHandler
#include <webserv/handler/URI.hpp> // for URI
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/log/Log.hpp> // for Log
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <webserv/socket/CgiSocket.hpp> // for CgiSocket
#include <webserv/handler/URI.hpp>
#include <csignal> // for kill, SIGKILL
#include <cstdlib> // for exit
#include <memory> // for allocator, make_unique, unique_ptr
#include <stdexcept> // for runtime_error
#include <string> // for basic_string, operator+, to_string, char_traits, string
#include <utility> // for move
#include <csignal>
#include <cstdlib>
#include <iostream>
#include <memory>
#include <string>
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/wait.h>
#include <unistd.h>
#include <fcntl.h> // for O_CLOEXEC, O_NONBLOCK
#include <sys/wait.h> // for waitpid, WNOHANG
#include <unistd.h> // for close, dup2, pipe2, execve, fork, STDERR_FILENO, STDIN_FILENO, STDOUT_FILENO
CgiProcess::CgiProcess(const HttpRequest &request, CgiHandler &handler) : request_(request), handler_(handler), _pid(-1)
{
@ -41,7 +42,8 @@ void CgiProcess::spawn()
int pipeStdout[2];
int pipeStderr[2];
if (pipe2(pipeStdin, O_CLOEXEC | O_NONBLOCK) == -1 || pipe2(pipeStdout, O_CLOEXEC | O_NONBLOCK) == -1 || pipe2(pipeStderr, O_CLOEXEC | O_NONBLOCK) == -1)
if (pipe2(pipeStdin, O_CLOEXEC | O_NONBLOCK) == -1 || pipe2(pipeStdout, O_CLOEXEC | O_NONBLOCK) == -1
|| pipe2(pipeStderr, O_CLOEXEC | O_NONBLOCK) == -1)
{
throw std::runtime_error("Failed to create pipes");
}

View File

@ -1,7 +1,9 @@
#pragma once
#include "webserv/handler/CgiHandler.hpp"
#include "webserv/http/HttpRequest.hpp"
#include <webserv/handler/CgiHandler.hpp>
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
class CgiHandler;
class CgiProcess
{

View File

@ -1,15 +1,15 @@
#include <webserv/handler/ErrorHandler.hpp> // for ErrorHandler
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/config/ConfigManager.hpp> // for ConfigManager
#include <webserv/config/GlobalConfig.hpp> // for GlobalConfig
#include <webserv/handler/ErrorHandler.hpp> // for ErrorHandler
#include <webserv/http/HttpConstants.hpp> // for getStatusCodeReason, INTERNAL_SERVER_ERROR
#include <webserv/http/HttpResponse.hpp> // for HttpResponse
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <fstream> // for basic_ifstream, basic_filebuf, basic_ostream::operator<<, ifstream, stringstream
#include <memory> // for allocator, make_unique, unique_ptr
#include <sstream> // for basic_stringstream
#include <string> // for basic_string, char_traits, operator+, string, to_string
#include <string> // for allocator, basic_string, char_traits, operator+, string, to_string
void ErrorHandler::createErrorResponse(uint16_t statusCode, HttpResponse &response, const AConfig *config)
{

View File

@ -10,6 +10,7 @@
#include <sys/types.h>
class AConfig;
class HttpResponse;
class ErrorHandler
{

View File

@ -1,6 +1,7 @@
#include <webserv/handler/FileHandler.hpp>
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/handler/ErrorHandler.hpp> // for ErrorHandler
#include <webserv/handler/FileHandler.hpp>
#include <webserv/handler/MIMETypes.hpp> // for MIMETypes
#include <webserv/handler/URI.hpp> // for URI
#include <webserv/http/HttpConstants.hpp> // for NOT_FOUND, FORBIDDEN, OK
@ -8,10 +9,9 @@
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/utils/FileUtils.hpp> // for joinPath, getExtension, isFile, readBinaryFile
#include <memory> // for unique_ptr, allocator, make_unique
#include <optional> // for optional
#include <ranges> // for __find_if_fn, find_if
#include <string> // for basic_string, string, operator+, char_traits
#include <string> // for basic_string, allocator, operator+, string, char_traits
#include <vector> // for vector
FileHandler::FileHandler(const HttpRequest &request, HttpResponse &response)
@ -91,16 +91,10 @@ void FileHandler::handle()
switch (resourceType)
{
case FILE:
handleFile(filepath);
return;
case FILE: handleFile(filepath); return;
case DIRECTORY_AUTOINDEX:
case DIRECTORY_INDEX:
handleDirectory(filepath, resourceType);
return;
case NOT_FOUND:
ErrorHandler::createErrorResponse(Http::StatusCode::NOT_FOUND, response_, config_);
return;
case DIRECTORY_INDEX: handleDirectory(filepath, resourceType); return;
case NOT_FOUND: ErrorHandler::createErrorResponse(Http::StatusCode::NOT_FOUND, response_, config_); return;
}
ErrorHandler::createErrorResponse(Http::StatusCode::NOT_FOUND, response_, config_);
}

View File

@ -1,11 +1,10 @@
#pragma once
#include "webserv/http/HttpRequest.hpp"
#include <webserv/config/AConfig.hpp>
#include <webserv/handler/AHandler.hpp>
#include <webserv/config/LocationConfig.hpp>
#include <webserv/handler/AHandler.hpp> // for AHandler
#include <webserv/handler/URI.hpp>
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/http/HttpResponse.hpp> // for HttpResponse
#include <cstdint> // for uint8_t
@ -14,6 +13,7 @@
class AConfig;
class URI;
class HttpResponse;
class FileHandler : public AHandler
{
@ -35,6 +35,7 @@ class FileHandler : public AHandler
private:
const URI &uri_;
const AConfig *config_;
enum ResourceType : uint8_t
{
FILE,

View File

@ -1,14 +1,16 @@
#include "webserv/log/Log.hpp"
#include <webserv/handler/URI.hpp>
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/config/LocationConfig.hpp> // for LocationConfig
#include <webserv/config/ServerConfig.hpp> // for ServerConfig
#include <webserv/handler/URI.hpp>
#include <webserv/http/HttpHeaders.hpp> // for HttpHeaders
#include <webserv/utils/FileUtils.hpp> // for joinPath, getExtension, isDirectory, isFile, isValidPath
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/utils/FileUtils.hpp> // for joinPath, isDirectory, isFile, getExtension, isValidPath
#include <webserv/utils/utils.hpp> // for trim, split
#include <cstddef> // for size_t
#include <format> // for vector
#include <map> // for map
#include <optional> // for optional, operator!=
#include <vector> // for vector

View File

@ -6,7 +6,6 @@
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/server/Server.hpp>
#include <string> // for string, basic_string
class LocationConfig;

View File

@ -1,5 +1,6 @@
#include <webserv/http/HttpConstants.hpp> // for CRLF
#include <webserv/http/HttpHeaders.hpp> // for HttpHeaders
#include <webserv/http/HttpConstants.hpp> // for CRLF
#include <webserv/log/Log.hpp>
#include <webserv/utils/utils.hpp> // for trim

View File

@ -1,18 +1,16 @@
#include "webserv/config/ConfigManager.hpp"
#include "webserv/config/ServerConfig.hpp"
#include "webserv/handler/URI.hpp"
#include <webserv/client/Client.hpp> // for Client
#include <webserv/http/HttpConstants.hpp> // for CRLF, DOUBLE_CRLF, BAD_REQUEST
#include <webserv/http/HttpRequest.hpp>
#include <webserv/config/ConfigManager.hpp> // for ConfigManager
#include <webserv/handler/URI.hpp> // for URI
#include <webserv/http/HttpConstants.hpp> // for CRLF, DOUBLE_CRLF
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/utils/utils.hpp> // for stoul
#include <exception> // for exception
#include <map> // for map
#include <memory>
#include <memory> // for allocator, make_unique, unique_ptr
#include <optional> // for optional
#include <sstream> // for basic_stringstream, basic_istream, stringstream
#include <utility> // for pair
#include <vector> // for vector
HttpRequest::HttpRequest(Client *client) : client_(client), uri_(nullptr)
@ -43,8 +41,7 @@ void HttpRequest::setState(State state)
state_ = State::ParseError;
return;
}
uri_ = std::make_unique<URI>(
*this, *serverConfig);
uri_ = std::make_unique<URI>(*this, *serverConfig);
}
state_ = state;
}

View File

@ -5,7 +5,7 @@
#include <cstddef> // for size_t
#include <cstdint> // for uint8_t
#include <memory>
#include <memory> // for unique_ptr
#include <string> // for string, basic_string
class Client;

View File

@ -1,6 +1,7 @@
#include <webserv/http/HttpConstants.hpp> // for getStatusCodeReason
#include <webserv/http/HttpResponse.hpp>
#include <webserv/http/HttpConstants.hpp> // for getStatusCodeReason
#include <string> // for basic_string, operator+, string, char_traits, to_string
#include <vector> // for vector

View File

@ -4,6 +4,7 @@
#include <webserv/log/Log.hpp> // for LOCATION, Log
#include <cstdint> // for uint8_t, uint16_t
#include <format> // for vector
#include <memory> // for unique_ptr
#include <string> // for string
#include <vector> // for vector

View File

@ -1,14 +1,12 @@
#include <webserv/log/FileChannel.hpp>
#include <webserv/log/Log.hpp> // for Log
#include <chrono> // for system_clock
#include <cstdio>
#include <ctime> // for localtime, tm
#include <iomanip> // for operator<<, put_time
#include <iostream> // for cerr
#include <fcntl.h>
struct tm;
FileChannel::FileChannel(const std::string &filename) : filename_(filename), fileStream_(filename, std::ios_base::trunc)

View File

@ -4,10 +4,10 @@
#include <webserv/log/Log.hpp> // for Log
#include <webserv/server/Server.hpp> // for Server
#include <csignal>
#include <iostream> // for ios_base
#include <string> // for allocator, basic_string, char_traits, operator+, string
#include <vector> // for vector
#include <csignal>
int main(int argc, char **argv)
{

View File

@ -1,22 +1,26 @@
#include "webserv/handler/CgiProcess.hpp"
#include <webserv/router/Router.hpp> // for Router
#include <webserv/client/Client.hpp> // for Client
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/config/ConfigManager.hpp> // for ConfigManager
#include <webserv/config/directive/ADirective.hpp> // for ADirective
#include <webserv/config/directive/DirectiveValue.hpp> // for DirectiveValue
#include <webserv/handler/ErrorHandler.hpp> // for ErrorHandler
#include <webserv/handler/CgiHandler.hpp> // for CgiHandler
#include <webserv/handler/CgiProcess.hpp> // for CgiProcess
#include <webserv/handler/FileHandler.hpp> // for FileHandler
#include <webserv/handler/URI.hpp> // for URI
#include <webserv/http/HttpHeaders.hpp> // for HttpHeaders
#include <webserv/log/Log.hpp> // for LOCATION, Log
#include <webserv/router/Router.hpp>
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <memory> // for unique_ptr
#include <exception> // for exception
#include <format> // for vector
#include <memory> // for unique_ptr, make_unique
#include <optional> // for optional
#include <ranges> // for __find_fn, find
#include <string> // for basic_string, string
#include <string> // for basic_string, string, operator+
#include <vector> // for vector
class HttpResponse;
Router::Router(Client *client) : client_(client)
{
Log::trace(LOCATION);

View File

@ -1,8 +1,8 @@
#pragma once
#include "webserv/handler/AHandler.hpp"
#include <webserv/config/AConfig.hpp> // for AConfig
#include <webserv/config/LocationConfig.hpp>
#include <webserv/handler/AHandler.hpp> // for AHandler
#include <webserv/http/HttpRequest.hpp> // for HttpRequest
#include <webserv/http/HttpResponse.hpp> // for HttpResponse
@ -11,6 +11,7 @@
class LocationConfig;
class ServerConfig;
class Client;
class Router
{

View File

@ -1,33 +1,31 @@
#include "webserv/utils/utils.hpp"
#include <webserv/server/Server.hpp>
#include <webserv/client/Client.hpp> // for Client
#include <webserv/config/ConfigManager.hpp> // for ConfigManager
#include <webserv/config/ServerConfig.hpp> // for ServerConfig
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/server/Server.hpp>
#include <webserv/socket/ASocket.hpp>
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <webserv/socket/ClientSocket.hpp> // for ClientSocket
#include <webserv/socket/ServerSocket.hpp> // for ServerSocket
#include <webserv/utils/utils.hpp> // for stateToEpoll
#include <cerrno> // for errno
#include <cerrno> // for errno, EBADF, ENOENT, EINTR
#include <csignal> // for SIGINT, sig_atomic_t
#include <cstring> // for strerror
#include <exception> // for exception
#include <memory> // for unique_ptr, allocator, make_unique
#include <optional> // for optional
#include <stdexcept> // for runtime_error
#include <stdexcept> // for runtime_error, invalid_argument
#include <string> // for basic_string, operator+, to_string, char_traits, string
#include <unordered_map> // for unordered_map, operator==
#include <utility> // for move, pair
#include <vector> // for vector
#include <unordered_map> // for unordered_map
#include <utility> // for move
#include <vector> // for vector, erase_if
#include <fcntl.h>
#include <sys/epoll.h> // for epoll_event, epoll_ctl, EPOLLIN, EPOLLOUT, epoll_create1, epoll_wait, EPOLLERR, EPOLLHUP, EPOLL_CTL_ADD, EPOLL_CTL_DEL, EPOLL_CTL_MOD
#include <sys/socket.h> // for send, SOMAXCONN
#include <sys/types.h> // for ssize_t
#include <fcntl.h> // for O_CLOEXEC
#include <stdint.h> // for uint32_t
#include <sys/epoll.h> // for epoll_event, epoll_ctl, EPOLLOUT, EPOLL_CTL_MOD, epoll_create1, epoll_wait, EPOLLERR, EPOLLHUP, EPOLLIN, EPOLL_CTL_ADD, EPOLL_CTL_DEL
#include <sys/socket.h> // for SOMAXCONN
#include <unistd.h> // for close
#include <csignal>
class Router;
volatile sig_atomic_t Server::stop_ = 0;

View File

@ -7,7 +7,7 @@
#include <webserv/socket/ASocket.hpp>
#include <webserv/socket/ServerSocket.hpp> // for ServerSocket
#include <csignal>
#include <csignal> // for sig_atomic_t
#include <cstdint> // for uint32_t
#include <memory> // for unique_ptr
#include <set> // for set

View File

@ -1,12 +1,14 @@
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/socket/ASocket.hpp>
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <stdexcept> // for runtime_error
#include <string> // for basic_string
#include <string> // for operator+, basic_string, to_string, allocator, char_traits, string
#include <system_error> // for generic_category, system_error
#include <utility> // for move
#include <errno.h> // for errno
#include <fcntl.h> // for fcntl, F_SETFL, O_NONBLOCK
#include <fcntl.h> // for fcntl, FD_CLOEXEC, F_GETFD, F_GETFL, O_NONBLOCK, F_SETFD, F_SETFL
#include <sys/socket.h> // for recv, send
#include <unistd.h> // for close

View File

@ -1,8 +1,12 @@
#include <webserv/log/Log.hpp> // for LOCATION, Log
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <webserv/socket/CgiSocket.hpp>
#include <unistd.h>
#include <webserv/log/Log.hpp> // for LOCATION, Log
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <system_error> // for generic_category, system_error
#include <errno.h> // for errno
#include <unistd.h> // for read, write
CgiSocket::CgiSocket(int fd, ASocket::IoState event) : ASocket(fd, event)
{

View File

@ -2,8 +2,9 @@
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <stddef.h> // for size_t
#include <sys/socket.h>
#include <sys/types.h>
#include <sys/types.h> // for ssize_t
#include <unistd.h>
class CgiSocket : public ASocket

View File

@ -1,6 +1,7 @@
#include <webserv/socket/ClientSocket.hpp>
#include <webserv/log/Log.hpp> // for LOCATION, Log
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <webserv/socket/ClientSocket.hpp>
ClientSocket::ClientSocket(int fd) : ASocket(fd)
{

View File

@ -1,13 +1,15 @@
#include <webserv/socket/ServerSocket.hpp>
#include <webserv/log/Log.hpp> // for Log, LOCATION
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <webserv/socket/ClientSocket.hpp> // for ClientSocket
#include <webserv/socket/ServerSocket.hpp>
#include <memory> // for allocator, make_unique, unique_ptr
#include <stdexcept> // for runtime_error
#include <arpa/inet.h> // for htons, inet_addr
#include <netinet/in.h> // for sockaddr_in, in_addr
#include <stdint.h> // for uint16_t
#include <sys/socket.h> // for AF_INET, accept, bind, listen, setsockopt, socket, SOCK_STREAM, SOL_SOCKET, SO_REUSEADDR
#include <unistd.h> // for close

View File

@ -1,12 +1,16 @@
#include "webserv/log/Log.hpp"
#include "webserv/socket/ASocket.hpp"
#include <webserv/socket/TimerSocket.hpp>
#include <stdexcept>
#include <webserv/log/Log.hpp> // for LOCATION, Log
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <sys/time.h>
#include <sys/timerfd.h>
#include <stdexcept> // for runtime_error
#include <system_error> // for generic_category, system_error
#include <errno.h> // for errno
#include <sys/time.h> // for CLOCK_MONOTONIC
#include <sys/timerfd.h> // for timerfd_create, timerfd_settime
#include <time.h> // for itimerspec, timespec
#include <unistd.h> // for read, write
TimerSocket::TimerSocket(std::chrono::milliseconds timeout)
: ASocket(timerfd_create(CLOCK_MONOTONIC, 0), ASocket::IoState::NONE), timeout_(timeout)

View File

@ -1,8 +1,11 @@
#pragma once
#include "webserv/socket/ASocket.hpp"
#include <webserv/socket/ASocket.hpp> // for ASocket
#include <chrono>
#include <chrono> // for milliseconds
#include <stddef.h> // for size_t
#include <sys/types.h> // for ssize_t
class TimerSocket : public ASocket
{

View File

@ -1,8 +1,8 @@
#include "webserv/socket/ASocket.hpp"
#include <webserv/utils/utils.hpp>
#include <webserv/socket/ASocket.hpp>
#include <cstdint>
#include <sstream>
#include <stdexcept>

View File

@ -1,6 +1,6 @@
#pragma once
#include "webserv/socket/ASocket.hpp"
#include <webserv/socket/ASocket.hpp>
#include <cstddef> // for size_t
#include <cstdint>