diff --git a/src/Client/Response.cpp b/src/Client/Response.cpp index f729122..690f90c 100644 --- a/src/Client/Response.cpp +++ b/src/Client/Response.cpp @@ -31,17 +31,11 @@ void Response::setData(Request request, ServerConfig *config) void Response::OpenResponseFile(const char *path) { std::stringstream ss; - char buf[BUFFSIZE + 1] = {0}; - std::ifstream file(path); + std::ifstream file(path, std::ifstream::in); if (file.is_open()) { - while (!file.eof()) - { - file.read(buf, BUFFSIZE); - ss << buf; - memset(buf, 0, BUFFSIZE + 1); - } + ss << file.rdbuf(); _body = ss.str(); file.close(); } @@ -61,7 +55,44 @@ void Response::generate() // methodDelete(); } -//-------------------------------------------------GET/SET--------------------------------------- +//-------------------------------------------------HEADER/BODY--------------------------------------- + +std::string Response::getTime(void) +{ + char buff[1337] = {0}; + struct timeval currTime; + struct tm *t; + + gettimeofday(&currTime, NULL); + t = gmtime(&currTime.tv_sec); + strftime(buff, 1337, "%a, %d %b %Y %H:%M:%S GTM", t); + + return (buff); +} + +std::string Response::getContentType(void) +{ + std::string path = _request.getFullUri(); + std::string type = path.substr(path.rfind(".") + 1, path.size() - path.rfind(".")); + + if (_request.isDir(path) == 0) + return ("text/html"); + else if (type == "html") + return ("text/html"); + else if (type == "css") + return ("text/css"); + else if (type == "js") + return ("text/javascript"); + else if (type == "jpeg" || type == "jpg") + return ("image/jpeg"); + else if (type == "png") + return ("image/png"); + else if (type == "bmp") + return ( "image/bmp"); + else + return ("text/plain"); + +} void Response::invalidClient(void) { @@ -82,6 +113,8 @@ void Response::generateBody(void) _body = Autoindex::getPage(_request.getURI(), _request.getFullUri(), _request.getHost()); else if (!_request.badCode(_code) && _request.isFile(_request.getFullUri()) == 0) OpenResponseFile(_request.getFullUri().c_str()); + else if (_request.isFile(_request.getFullUri()) == -1) + _body = getErrorPage(404); else _body = getErrorPage(_code); @@ -92,11 +125,14 @@ void Response::generateHeader(void) std::stringstream ss; std::string tmp; - ss << "HTTP/1.1" << " " << _request.getCode() << " " << getReasonPhrase(_request.getCode()) - << "\r\nContent-Type: text/html" - << "\r\nContent-Length: " << _body.size() - << "\r\nServer: poheck" - << "\r\n\r\n"; + ss << "HTTP/1.1" << " " << _request.getCode() << " " << getReasonPhrase(_request.getCode()) << "\r\n"; + ss << "Content-Type: " << getContentType() << "\r\n"; + ss << "Content-Length: " << _body.size() << "\r\n"; + ss << "Server: poheck\r\n"; + if (_request.getConnection() == "keep-alive") + ss << "Keep-Alive: timeout=" << _request.getLifeTime() << "\r\n"; + ss << "Date: " << getTime() << "\r\n"; + ss << "\r\n"; _header = ss.str(); } diff --git a/src/Client/Response.hpp b/src/Client/Response.hpp index 43dfbb3..b9fce3e 100644 --- a/src/Client/Response.hpp +++ b/src/Client/Response.hpp @@ -22,8 +22,10 @@ private: // void methodPost(void); // void methodDelete(void); void invalidClient(void); - void generateHeader(void); - void generateBody(void); + void generateHeader(void); + void generateBody(void); + std::string getTime(void); + std::string getContentType(void); public: std::string getHeader(void); std::string getBody(void); diff --git a/www/images/images.jpeg b/www/images/images.jpeg new file mode 100644 index 0000000..c2ef91c Binary files /dev/null and b/www/images/images.jpeg differ diff --git a/www/images/images1.jpeg b/www/images/images1.jpeg new file mode 100644 index 0000000..baefa9b Binary files /dev/null and b/www/images/images1.jpeg differ diff --git a/www/images/images2.jpeg b/www/images/images2.jpeg new file mode 100644 index 0000000..0a4c329 Binary files /dev/null and b/www/images/images2.jpeg differ diff --git a/www/images/images3.jpeg b/www/images/images3.jpeg new file mode 100644 index 0000000..782b3ff Binary files /dev/null and b/www/images/images3.jpeg differ diff --git a/www/images/images4.jpeg b/www/images/images4.jpeg new file mode 100644 index 0000000..44ff8ee Binary files /dev/null and b/www/images/images4.jpeg differ diff --git a/www/images/images5.jpeg b/www/images/images5.jpeg new file mode 100644 index 0000000..7a4f8b4 Binary files /dev/null and b/www/images/images5.jpeg differ diff --git a/www/images/index.jpeg b/www/images/index.jpeg new file mode 100644 index 0000000..f318771 Binary files /dev/null and b/www/images/index.jpeg differ