mirror of
https://github.com/3lswear/webserv.git
synced 2025-10-29 05:17:59 +03:00
add class Header
This commit is contained in:
42
includes/Header.hpp
Normal file
42
includes/Header.hpp
Normal 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
|
||||||
@@ -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();
|
||||||
|
|||||||
@@ -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
87
src/Header.cpp
Normal 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()
|
||||||
|
{
|
||||||
|
}
|
||||||
@@ -9,70 +9,37 @@ 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);
|
||||||
send(_clientSocket, buff, file.gcount(), 0);
|
send(_clientSocket, buff, file.gcount(), 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//---------------------------------------------Configuration-----------------------------------------------------------------------------------
|
//---------------------------------------------Configuration-----------------------------------------------------------------------------------
|
||||||
@@ -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);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,5 +11,7 @@ int main(int argc, char **argv)
|
|||||||
server.setupConfig();
|
server.setupConfig();
|
||||||
server.start();
|
server.start();
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user