/* ************************************************************************** */ /* */ /* ::: :::::::: */ /* Cgi.hpp :+: :+: :+: */ /* +:+ +:+ +:+ */ /* By: gadelbes +#+ +:+ +#+ */ /* +#+#+#+#+#+ +#+ */ /* Created: 2025/04/24 13:46:34 by gadelbes #+# #+# */ /* Updated: 2025/05/26 17:19:01 by adjoly ### ########.fr */ /* */ /* ************************************************************************** */ #pragma once #include #include #include #include #include #include #include #include namespace webserv { namespace server { #define PIPE_READ 0 #define PIPE_WRITE 1 class Cgi : public server::AClientResource { public: Cgi(webserv::http::Get *, webserv::config::Route *); Cgi(webserv::http::Post *, webserv::config::Route *); ~Cgi(void); /** * @brief Can be used to process the Cgi script */ void process(void); /** * @brief Can be used to check if the Cgi have been executed * * @note Need to be used after the process() function and checked before * using str() */ bool isProcessed(void) { return _executed; } /** * @brief Can be used to get the output of the Cgi * * @note Need to be used after the outfd is in POLLIN state */ std::string str(void); protected: private: bool _executed; bool _is_post; void _initEnvp(void); void _prep(void); /** * @brief Can be used to convert the _envp to a char** usable in execve * * @return A newly allocated char** with the env from _envp */ char **_genEnv(void); std::string _getEnv(std::string &) const; void _setEnv(const std::string, std::string); std::string _script_path; // The full path of the script to be executed std::map _envp; // The envp filled with _initEnvp webserv::config::Route *_conf; // The configuration for the route used webserv::http::ARequest *_request; // The requests that will be used for the cgi int _stdin_pipe[2]; // The pipefd for the stdin of the cgi in the case of a // post int _stdout_pipe[2]; // The pipefd for the stdout of the cgi }; }; // namespace server }; // namespace webserv