add class Header

This commit is contained in:
Talyx
2022-01-07 21:07:37 +03:00
parent 61ed01b849
commit 08c490813a
6 changed files with 170 additions and 65 deletions

42
includes/Header.hpp Normal file
View File

@@ -0,0 +1,42 @@
#ifndef HEADER
# define HEADER
#include "webserv.hpp"
class Header
{
private:
int _type;
int _row;
char *_buff;
// std::string _respons;
std::string _fileName;
std::vector<std::string> _request;
public:
enum REQ
{
GET,
POST,
DELETE
};
public:
std::vector<std::string> getRequest(void);
// std::string getRespons(void);
int getType(void);
std::string getFileName(void);
void setFile(std::string);
void setRequest(char *);
// void generateRespons(void);
void parseBuff(void);
void identifyType(std::string);
void printHeaderInfo(void);
Header();
Header(char *);
~Header();
};
#endif

View File

@@ -5,6 +5,8 @@
#define BUFFSIZE 1024 #define BUFFSIZE 1024
class Header;
class Server class Server
{ {
private: private:
@@ -18,13 +20,8 @@ private:
private: private:
void checkError(int fd, std::string str); void checkError(int fd, std::string str);
void sendFile(std::string str); void sendFile(std::string str);
void sendHeader(void); void sendHeader(Header head);
void printRed(std::string str); void sendRespons(Header head);
void printYellow(std::string str);
void printBlue(std::string str);
void printPink(std::string str);
void printGreen(std::string str);
void printTurguoise(std::string str);
public: public:
Server(); Server();

View File

@@ -1,6 +1,16 @@
#ifndef WEBSERV_HPP #ifndef WEBSERV_HPP
#define WEBSERV_HPP #define WEBSERV_HPP
#define RED "\033[31m"
#define GREEN "\033[32m"
#define YELLOW "\033[33m"
#define BLUE "\033[34m"
#define PINK "\033[35m"
#define TURGUOISE "\033[36m"
#define ZERO_C "\033[0m"
#define HOME "www"
#include <iostream> #include <iostream>
#include <string> #include <string>
#include <arpa/inet.h> #include <arpa/inet.h>
@@ -12,8 +22,11 @@
#include <netinet/in.h> #include <netinet/in.h>
#include <fcntl.h> #include <fcntl.h>
#include <unistd.h> #include <unistd.h>
#include "Server.hpp"
#include <stdlib.h> #include <stdlib.h>
#include <fstream> #include <fstream>
#include <vector>
#include <sstream>
#include "Server.hpp"
#include "Header.hpp"
#endif #endif

87
src/Header.cpp Normal file
View File

@@ -0,0 +1,87 @@
#include "Header.hpp"
Header::Header()
{
this->_row = 0;
}
Header::Header(char *str)
{
this->_row = 0;
this->_buff = str;
}
//-------------------------------------------------GET/SET---------------------------------------
std::vector<std::string> Header::getRequest(void)
{
return (this->_request);
}
// std::string Header::getRespons(void)
// {
// return (this->_respons);
// }
int Header::getType(void)
{
return (this->_type);
}
std::string Header::getFileName(void)
{
return _fileName;
}
void Header::setRequest(char *str)
{
this->_buff = str;
}
//--------------------------------------------------
void Header::setFile(std::string str)
{
std::string del = " ";
int pos;
pos = str.find(del);
str.erase(0, pos + del.length());
_fileName = str.substr(0, str.find(del));
_fileName.insert(0, HOME);
}
void Header::identifyType(std::string str)
{
if (str.compare(0,3, "GET") == 0)
_type = GET;
else if (str.compare(0,4, "POST") == 0)
_type = POST;
else if (str.compare(0,6, "DELETE") == 0)
_type = DELETE;
}
void Header::parseBuff(void)
{
std::string line;
std::stringstream buffStream;
buffStream << _buff;
while (std::getline(buffStream, line, '\n'))
{
if (_row == 0)
{
identifyType(line);
setFile(line);
}
_request.push_back(line);
_row++;
}
}
void Header::printHeaderInfo(void)
{
std::cout << YELLOW << "request type = " << _type << ZERO_C << std::endl;
std::cout << YELLOW << "request rows = " << _row << ZERO_C << std::endl;
std::cout << YELLOW << "request fileName = " << _fileName << ZERO_C << std::endl;
std::cout << YELLOW << "request header:\n" << _buff << ZERO_C << std::endl;
}
Header::~Header()
{
}

View File

@@ -9,65 +9,32 @@ Server::Server(std::string path)
{ {
(void)path; (void)path;
} }
//---------------------------------------------Color printing----------------------------------------------------------------------------------
void Server::printRed(std::string str)
{
std::cout << "\033[31m" << str << "\033[0m";
}
void Server::printGreen(std::string str)
{
std::cout << "\033[32m" << str << "\033[0m";
}
void Server::printYellow(std::string str)
{
std::cout << "\033[33m" << str << "\033[0m";
}
void Server::printBlue(std::string str)
{
std::cout << "\033[34m" << str << "\033[0m";
}
void Server::printPink(std::string str)
{
std::cout << "\033[35m" << str << "\033[0m";
}
void Server::printTurguoise(std::string str)
{
std::cout << "\033[36m" << str << "\033[0m";
}
//---------------------------------------------Send-------------------------------------------------------------------------------------------- //---------------------------------------------Send--------------------------------------------------------------------------------------------
void Server::sendHeader(void) void Server::sendHeader(Header head)
{ {
std::string tmp; std::string tmp;
const char *header; const char *header;
tmp = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
tmp = "HTTP/1.1 200 OK\r\nDate: Mon, 27 Jul 2009 12:28:53 GMT\r\nServer: Apache/2.2.14 (Win32)\r\nLast-Modified: Wed, 22 Jul 2009 19:15:56 GMT\r\nContent-Length: 6196\r\nContent-Type: text/html\r\nConnection: Closed\r\n\r\n";
header = tmp.c_str(); header = tmp.c_str();
printTurguoise("Send Header\n"); std::cout << TURGUOISE << "Send Header\n" << YELLOW << tmp << ZERO_C;
printYellow(tmp);
send(_clientSocket, header, tmp.length(), 0); send(_clientSocket, header, tmp.length(), 0);
(void)head;
} }
void Server::sendFile(std::string str) void Server::sendRespons(Header head)
{ {
char const *path = str.c_str(); std::string str = head.getFileName();
std::ifstream file(path); const char *path = str.c_str();
char buff[BUFFSIZE + 1] = {0}; std::ifstream file(path);
char buff[BUFFSIZE + 1] = {0};
if (!file.good()) if (!file.good())
{ {
printRed("Send ERROR: bad file: "); file.open("www/index2.html");
printRed(str);
std::cout << std::endl;
} }
sendHeader(); sendHeader(head);
while (!file.eof()) while (!file.eof())
{ {
file.read(buff, BUFFSIZE); file.read(buff, BUFFSIZE);
@@ -91,17 +58,11 @@ void Server::checkError(int fd, std::string str)
{ {
if (fd < 0) if (fd < 0)
{ {
printRed("Server ERROR: "); std::cout << RED << "Server ERROR: " << str << ZERO_C << std::endl;
printRed(str);
std::cout << std::endl;
exit(1); exit(1);
} }
else else
{ std::cout << GREEN << "Server SUCCESS: " << str << ZERO_C << std::endl;
printGreen("Server SUCCESS: ");
printGreen(str);
std::cout << std::endl;
}
} }
void Server::start(void) void Server::start(void)
@@ -109,6 +70,7 @@ void Server::start(void)
char buff[BUFFSIZE + 1] = {0}; char buff[BUFFSIZE + 1] = {0};
int opt = 1; int opt = 1;
socklen_t addrlen; socklen_t addrlen;
Header header;
_serverSocket = socket(AF_INET, SOCK_STREAM, 0); _serverSocket = socket(AF_INET, SOCK_STREAM, 0);
checkError(_serverSocket, "Initialize Server socket"); checkError(_serverSocket, "Initialize Server socket");
@@ -123,9 +85,11 @@ void Server::start(void)
_clientSocket = accept(_serverSocket, (struct sockaddr *)&_addres, (socklen_t *)&addrlen); _clientSocket = accept(_serverSocket, (struct sockaddr *)&_addres, (socklen_t *)&addrlen);
checkError(_clientSocket, "Initialize Client socket"); checkError(_clientSocket, "Initialize Client socket");
checkError(recv(_clientSocket, buff, BUFFSIZE, 0), "Receive msg from client"); checkError(recv(_clientSocket, buff, BUFFSIZE, 0), "Receive msg from client");
printTurguoise("Receive Header\n"); std::cout << TURGUOISE << "Receive Header" << ZERO_C << std::endl;
printYellow(buff); header.setRequest(buff);
sendFile("www/index.html"); header.parseBuff();
header.printHeaderInfo();
sendRespons(header);
close(_clientSocket); close(_clientSocket);
close(_serverSocket); close(_serverSocket);
} }

View File

@@ -11,5 +11,7 @@ int main(int argc, char **argv)
server.setupConfig(); server.setupConfig();
server.start(); server.start();
return (0); return (0);
} }