#ifndef WEBSERV_HPP # define WEBSERV_HPP # include # include # include // errno # include // perror # include # include # 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 // stringstream #define BUFSIZE 8192 #define TIMEOUT 10 * 1000 #define MAX_EVENTS 42 // arbitrary #define MSG_TEST "Le Webserv / 20 =D\n" #define MSG_BOUNCE "bounced properly ;)\n" // placeholder 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 _socket_fd; // TODO: replace with vector of "Server" struct int _epfd; // WIP global buffer. Need one variable set per "Client" char _buf[BUFSIZE+1]; ssize_t _read_ret; std::map _request; std::map _response; void _bind(int socket_fd, in_port_t port); void _listen(int socket_fd, unsigned int max_connections); void _accept_connection(int fd); void _read_request(int fd); void _send_response(int fd); // TMP HUGO TEST CGI void _serve_file(int fd, std::string page); void _exec_cgi_script(int fd); }; #endif