Files
42_INT_12_webserv/headers/Webserv.hpp
2022-07-29 14:15:15 +02:00

75 lines
1.9 KiB
C++

#ifndef WEBSERV_HPP
# define WEBSERV_HPP
# include <map>
# include <vector>
# include <exception>
# include <stdexcept>
# include <string>
# include <sstream> // stringstream
# include <cerrno> // errno
# include <cstdio> // perror
# include <unistd.h> // close
# include <iostream> // cout, cin
# include <cstring> // memset
# include <sys/socket.h> // socket, accept, listen, send, recv, bind, connect, setsockopt, getsockname
# include <netinet/in.h> // sockaddr_in
# include <arpa/inet.h> // htonl, htons, ntohl, ntohs, inet_addr
# include <sys/epoll.h> // epoll
# include <fcntl.h> // fcntl
# include <sys/wait.h> // waitpid
# include <csignal> // 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<Server>
// std::vector<Server> _servers;
std::vector<Client> _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