mirror of
https://github.com/3lswear/webserv.git
synced 2025-10-29 21:38:00 +03:00
add eboll
This commit is contained in:
@@ -29,6 +29,7 @@ public:
|
|||||||
void identifyType(std::string);
|
void identifyType(std::string);
|
||||||
void printHeaderInfo(void);
|
void printHeaderInfo(void);
|
||||||
void parseRequest(void);
|
void parseRequest(void);
|
||||||
|
void clearHeader(void);
|
||||||
Header();
|
Header();
|
||||||
Header(char *);
|
Header(char *);
|
||||||
~Header();
|
~Header();
|
||||||
|
|||||||
@@ -3,7 +3,8 @@
|
|||||||
|
|
||||||
#include "webserv.hpp"
|
#include "webserv.hpp"
|
||||||
|
|
||||||
#define BUFFSIZE 1024
|
#define BUFFSIZE 1024
|
||||||
|
#define MAX_CLIENT 1000
|
||||||
|
|
||||||
class Header;
|
class Header;
|
||||||
|
|
||||||
@@ -11,18 +12,19 @@ class Server
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
int _port;
|
int _port;
|
||||||
int _serverSocket;
|
int _epolfd;
|
||||||
int _clientSocket;
|
int _client;
|
||||||
// int _bufferSize;
|
struct epoll_event _events[MAX_CLIENT];
|
||||||
struct sockaddr_in _addres;
|
struct sockaddr_in _addres;
|
||||||
std::string _ip;
|
std::string _ip;
|
||||||
|
|
||||||
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(Header head);
|
void sendHeader(Header head, int);
|
||||||
void sendRespons(Header head);
|
void sendRespons(Header head, int);
|
||||||
|
void setNonblocking(int fd);
|
||||||
|
void newConnection(int fd);
|
||||||
public:
|
public:
|
||||||
Server();
|
Server();
|
||||||
Server(std::string path);
|
Server(std::string path);
|
||||||
|
|||||||
@@ -81,6 +81,7 @@ void Header::parseRequest(void)
|
|||||||
if (_request.find(key) != _request.end())
|
if (_request.find(key) != _request.end())
|
||||||
{
|
{
|
||||||
std::cout << RED << "ERROR: double header-field" << ZERO_C << std::endl;
|
std::cout << RED << "ERROR: double header-field" << ZERO_C << std::endl;
|
||||||
|
std::cout << RED << (_request.find(key))->first << (_request.find(key))->second << std::endl;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
_request[key] = line;
|
_request[key] = line;
|
||||||
@@ -98,18 +99,27 @@ void Header::printHeaderInfo(void)
|
|||||||
std::cout << YELLOW << "request fileName = " << _fileName << 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;
|
std::cout << YELLOW << "request header:\n" << _buff << ZERO_C << std::endl;
|
||||||
|
|
||||||
// std::cout << TURGUOISE << "HEADER MAP" << ZERO_C << std::endl;
|
std::cout << TURGUOISE << "HEADER MAP" << ZERO_C << std::endl;
|
||||||
// for ( it = _request.begin(); it != _request.end(); it++)
|
for ( it = _request.begin(); it != _request.end(); it++)
|
||||||
// {
|
{
|
||||||
// std::cout << PINK << it->first << ZERO_C << std::endl;
|
std::cout << PINK << it->first << ZERO_C << std::endl;
|
||||||
// }
|
}
|
||||||
// for ( it = _request.begin(); it != _request.end(); it++)
|
for ( it = _request.begin(); it != _request.end(); it++)
|
||||||
// {
|
{
|
||||||
// std::cout << PINK << it->second << ZERO_C << std::endl;
|
std::cout << PINK << it->second << ZERO_C << std::endl;
|
||||||
// }
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Header::clearHeader(void)
|
||||||
|
{
|
||||||
|
_type = -1;
|
||||||
|
_row = 0;
|
||||||
|
_buff = NULL;
|
||||||
|
_fileName = "www/index2.html";
|
||||||
|
_request.clear();
|
||||||
|
}
|
||||||
|
|
||||||
Header::~Header()
|
Header::~Header()
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,28 +2,30 @@
|
|||||||
//----------------------------------------------Constructors-----------------------------------------------------------------------------------
|
//----------------------------------------------Constructors-----------------------------------------------------------------------------------
|
||||||
Server::Server()
|
Server::Server()
|
||||||
{
|
{
|
||||||
|
_client = 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Server::Server(std::string path)
|
Server::Server(std::string path)
|
||||||
{
|
{
|
||||||
(void)path;
|
(void)path;
|
||||||
|
_client = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
//----------------------------------------------Send--------------------------------------------------------------------------------------------
|
//----------------------------------------------Send--------------------------------------------------------------------------------------------
|
||||||
|
|
||||||
void Server::sendHeader(Header head)
|
void Server::sendHeader(Header head, int fd)
|
||||||
{
|
{
|
||||||
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\nContent-Type: text/html\r\n\r\n";
|
||||||
header = tmp.c_str();
|
header = tmp.c_str();
|
||||||
std::cout << TURGUOISE << "Send Header\n" << YELLOW << tmp << ZERO_C;
|
std::cout << TURGUOISE << "Send Header\n" << YELLOW << tmp << ZERO_C;
|
||||||
send(_clientSocket, header, tmp.length(), 0);
|
send(fd, header, tmp.length(), 0);
|
||||||
(void)head;
|
(void)head;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Server::sendRespons(Header head)
|
void Server::sendRespons(Header head, int fd)
|
||||||
{
|
{
|
||||||
std::string str = head.getFileName();
|
std::string str = head.getFileName();
|
||||||
const char *path = str.c_str();
|
const char *path = str.c_str();
|
||||||
@@ -34,11 +36,11 @@ void Server::sendRespons(Header head)
|
|||||||
{
|
{
|
||||||
file.open("www/index2.html");
|
file.open("www/index2.html");
|
||||||
}
|
}
|
||||||
sendHeader(head);
|
sendHeader(head, fd);
|
||||||
while (!file.eof())
|
while (!file.eof())
|
||||||
{
|
{
|
||||||
file.read(buff, BUFFSIZE);
|
file.read(buff, BUFFSIZE);
|
||||||
send(_clientSocket, buff, file.gcount(), 0);
|
send(fd, buff, file.gcount(), 0);
|
||||||
}
|
}
|
||||||
(void)path;
|
(void)path;
|
||||||
}
|
}
|
||||||
@@ -56,27 +58,86 @@ void Server::setupConfig(void)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void Server::setNonblocking(int fd)
|
||||||
|
{
|
||||||
|
fcntl(fd, F_SETFL, O_NONBLOCK);
|
||||||
|
}
|
||||||
|
|
||||||
|
void Server::newConnection(int fd)
|
||||||
|
{
|
||||||
|
struct epoll_event ev;
|
||||||
|
ev.events = EPOLLIN | EPOLLOUT | EPOLLET;
|
||||||
|
ev.data.fd = fd;
|
||||||
|
|
||||||
|
epoll_ctl(_epolfd, EPOLL_CTL_ADD, fd, &ev);
|
||||||
|
_client++;
|
||||||
|
}
|
||||||
|
|
||||||
void Server::start(void)
|
void Server::start(void)
|
||||||
{
|
{
|
||||||
Socket serverSocket(AF_INET, SOCK_STREAM, 0, _port);
|
Socket serverSocket(AF_INET, SOCK_STREAM, 0, _port);
|
||||||
char buff[BUFFSIZE + 1] = {0};
|
char buff[BUFFSIZE + 1] = {0};
|
||||||
Header header;
|
Header header;
|
||||||
|
int fd_accept;
|
||||||
|
|
||||||
checkError(serverSocket.init(3), "Socket init");
|
checkError(serverSocket.init(MAX_CLIENT), "Socket init");
|
||||||
_clientSocket = accept(serverSocket.getSocketFd(),
|
fd_accept = accept(serverSocket.getSocketFd(),
|
||||||
serverSocket.getSockaddr(), serverSocket.getSocklen());
|
serverSocket.getSockaddr(), serverSocket.getSocklen());
|
||||||
checkError(_clientSocket, "Initialize client socket");
|
checkError(fd_accept, "Initialize client socket");
|
||||||
checkError(recv(_clientSocket, buff, BUFFSIZE, 0), "Receive msg from client");
|
checkError(recv(fd_accept, buff, BUFFSIZE, 0), "Receive msg from client");
|
||||||
std::cout << TURGUOISE << "Receive Header" << ZERO_C << std::endl;
|
std::cout << TURGUOISE << "Receive Header" << ZERO_C << std::endl;
|
||||||
header.setRequest(buff);
|
header.setRequest(buff);
|
||||||
header.parseRequest();
|
header.parseRequest();
|
||||||
header.printHeaderInfo();
|
header.printHeaderInfo();
|
||||||
sendRespons(header);
|
sendRespons(header, fd_accept);
|
||||||
close(_clientSocket);
|
close(fd_accept);
|
||||||
close(serverSocket.getSocketFd());
|
close(serverSocket.getSocketFd());
|
||||||
|
//-----------------------------------------------попытка добавить epoll------------------
|
||||||
|
// Socket serverSocket(AF_INET, SOCK_STREAM, 0, _port);
|
||||||
|
// char buff[BUFFSIZE + 1] = {0};
|
||||||
|
// Header header[MAX_CLIENT];
|
||||||
|
// int fd;
|
||||||
|
// int n;
|
||||||
|
// int nfds;
|
||||||
|
// int _clientSocket;
|
||||||
|
|
||||||
|
// nfds = 0;
|
||||||
|
// n = 0;
|
||||||
|
// _epolfd = epoll_create1(0);
|
||||||
|
// checkError(serverSocket.init(MAX_CLIENT), "Socket init");
|
||||||
|
// setNonblocking(serverSocket.getSocketFd());
|
||||||
|
// setNonblocking(_epolfd);
|
||||||
|
// while (true)
|
||||||
|
// {
|
||||||
|
// _clientSocket = accept(serverSocket.getSocketFd(),
|
||||||
|
// serverSocket.getSockaddr(), serverSocket.getSocklen());
|
||||||
|
// if (_clientSocket > 0)
|
||||||
|
// newConnection(_clientSocket);
|
||||||
|
// if (_client > 0)
|
||||||
|
// nfds = epoll_wait(_epolfd, _events, MAX_CLIENT, -1);
|
||||||
|
// while (n < nfds)
|
||||||
|
// {
|
||||||
|
// fd = _events[n].data.fd;
|
||||||
|
// // std::cout << "n = " << n << " nfds = " << nfds << " fd = " << fd << " _clientSize = " << _client << " _clientSocket " << _clientSocket << std::endl;
|
||||||
|
// checkError(recv(fd, buff, BUFFSIZE, 0), "Receive msg from client");
|
||||||
|
// header[fd].setRequest(buff);
|
||||||
|
// header[fd].parseRequest();
|
||||||
|
// header[fd].printHeaderInfo();
|
||||||
|
// sendRespons(header[fd], fd);
|
||||||
|
// header[fd].clearHeader();
|
||||||
|
// close(fd);
|
||||||
|
// _client--;
|
||||||
|
// n++;
|
||||||
|
// }
|
||||||
|
// n = 0;
|
||||||
|
// nfds = 0;
|
||||||
|
// _clientSocket = 0;
|
||||||
|
// }
|
||||||
|
// close(serverSocket.getSocketFd());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void Server::end(void)
|
void Server::end(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user