#ifndef WEBSERV_HPP # define WEBSERV_HPP # include # include # include # include # include # include // stringstream # include // errno # include // perror # include // close # include // cout, cin # include // memset # include // socket, accept, listen, send, recv, bind, connect, setsockopt, getsockname # include // sockaddr_in # include // htonl, htons, ntohl, ntohs, inet_addr # include // epoll # include // fcntl # include // waitpid # include // signal # include "Client.hpp" # include "Server.hpp" # define BUFSIZE 8192 # define TIMEOUT 10 * 1000 # define MAX_EVENTS 42 // arbitrary # define MSG_TEST "Le Webserv / 20 =D\n" class Webserv { public: Webserv(); // Webserv(Webserv const &src); ~Webserv(); // Webserv &operator=(Webserv const &rhs); void init_virtual_servers(); // ADD config param void start(); private: int _epfd; int _socket_fd; // temp, to replace with std::vector // std::vector _servers; std::vector _clients; void _accept_connection(int fd); void _read_request(Client *client); void _send_response(Client *client); int _epoll_update(int fd, uint32_t events, int op); int _epoll_update(int fd, uint32_t events, int op, void *ptr); void _handle_last_signal(); // void _signal_handler(int signum); // invalide dans une class Client* _actual_client; void _close_client(int fd); void _close_all_clients(); void _bind(int socket_fd, in_port_t port); void _listen(int socket_fd, unsigned int max_connections); // TMP HUGO TEST CGI // void _serve_file(Client *client, std::string page); void _exec_cgi_script(Client *client); void _parse_request(); // // END TMP HUGO TEST CGI }; #endif