#ifndef CLIENT_HPP # define CLIENT_HPP # include # include # include # include # include // strdup # include "utils.hpp" # include // sockaddr_in, struct in_addr # include // htonl, htons, ntohl, ntohs, inet_addr, inet_ntoa struct Request { http_method method; std::string path; std::string version; std::map headers; std::string body; std::string port; std::string hostname; }; # define MAX_FILESIZE 1000000 // (1Mo) class Client { public: Client(); Client(int afd, listen_socket *lsocket, std::string aport, std::string aip); ~Client(); Client(Client const &src); Client &operator=(Client const &rhs); std::string raw_request; std::string response; static char buf[MAX_FILESIZE+1]; size_t body_size; unsigned int status; // std::string port; // std::string ip; // listen_socket * lsocket; // getters int get_cl_fd() const; std::string get_cl_port() const; std::string get_cl_ip() const; listen_socket * get_cl_lsocket() const; // requests getters http_method get_rq_method() const; std::string get_rq_method_str() const; std::string get_rq_path() const; std::string get_rq_version() const; std::string get_rq_body() const; std::string get_rq_port() const; std::string get_rq_hostname() const; std::string get_rq_headers(const std::string & key); void parse_request(); void clear(); void clear_request(); private: int _fd; std::string _port; std::string _ip; listen_socket * _lsocket; struct Request _request; void _parse_request_line( std::string rline ); void _parse_request_headers( std::vector list ); void _parse_request_body( size_t pos ); void _parse_port_hostname(std::string host); }; bool operator==(const Client& lhs, const Client& rhs); bool operator==(const Client& lhs, int fd); bool operator==(int fd, const Client& rhs); #endif