mirror of
https://github.com/3lswear/webserv.git
synced 2025-10-28 21:07:59 +03:00
add eboll
This commit is contained in:
@@ -29,6 +29,7 @@ public:
|
||||
void identifyType(std::string);
|
||||
void printHeaderInfo(void);
|
||||
void parseRequest(void);
|
||||
void clearHeader(void);
|
||||
Header();
|
||||
Header(char *);
|
||||
~Header();
|
||||
|
||||
@@ -3,7 +3,8 @@
|
||||
|
||||
#include "webserv.hpp"
|
||||
|
||||
#define BUFFSIZE 1024
|
||||
#define BUFFSIZE 1024
|
||||
#define MAX_CLIENT 1000
|
||||
|
||||
class Header;
|
||||
|
||||
@@ -11,18 +12,19 @@ class Server
|
||||
{
|
||||
private:
|
||||
int _port;
|
||||
int _serverSocket;
|
||||
int _clientSocket;
|
||||
// int _bufferSize;
|
||||
int _epolfd;
|
||||
int _client;
|
||||
struct epoll_event _events[MAX_CLIENT];
|
||||
struct sockaddr_in _addres;
|
||||
std::string _ip;
|
||||
|
||||
private:
|
||||
void checkError(int fd, std::string str);
|
||||
void sendFile(std::string str);
|
||||
void sendHeader(Header head);
|
||||
void sendRespons(Header head);
|
||||
|
||||
void sendHeader(Header head, int);
|
||||
void sendRespons(Header head, int);
|
||||
void setNonblocking(int fd);
|
||||
void newConnection(int fd);
|
||||
public:
|
||||
Server();
|
||||
Server(std::string path);
|
||||
|
||||
@@ -81,6 +81,7 @@ void Header::parseRequest(void)
|
||||
if (_request.find(key) != _request.end())
|
||||
{
|
||||
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
|
||||
_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 header:\n" << _buff << ZERO_C << std::endl;
|
||||
|
||||
// std::cout << TURGUOISE << "HEADER MAP" << ZERO_C << std::endl;
|
||||
// for ( it = _request.begin(); it != _request.end(); it++)
|
||||
// {
|
||||
// std::cout << PINK << it->first << ZERO_C << std::endl;
|
||||
// }
|
||||
// for ( it = _request.begin(); it != _request.end(); it++)
|
||||
// {
|
||||
// std::cout << PINK << it->second << ZERO_C << std::endl;
|
||||
// }
|
||||
std::cout << TURGUOISE << "HEADER MAP" << ZERO_C << std::endl;
|
||||
for ( it = _request.begin(); it != _request.end(); it++)
|
||||
{
|
||||
std::cout << PINK << it->first << ZERO_C << std::endl;
|
||||
}
|
||||
for ( it = _request.begin(); it != _request.end(); it++)
|
||||
{
|
||||
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()
|
||||
{
|
||||
}
|
||||
|
||||
@@ -2,28 +2,30 @@
|
||||
//----------------------------------------------Constructors-----------------------------------------------------------------------------------
|
||||
Server::Server()
|
||||
{
|
||||
_client = 0;
|
||||
|
||||
}
|
||||
|
||||
Server::Server(std::string path)
|
||||
{
|
||||
(void)path;
|
||||
_client = 0;
|
||||
}
|
||||
|
||||
//----------------------------------------------Send--------------------------------------------------------------------------------------------
|
||||
|
||||
void Server::sendHeader(Header head)
|
||||
void Server::sendHeader(Header head, int fd)
|
||||
{
|
||||
std::string tmp;
|
||||
const char *header;
|
||||
tmp = "HTTP/1.1 200 OK\r\nContent-Type: text/html\r\n\r\n";
|
||||
header = tmp.c_str();
|
||||
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 Server::sendRespons(Header head)
|
||||
void Server::sendRespons(Header head, int fd)
|
||||
{
|
||||
std::string str = head.getFileName();
|
||||
const char *path = str.c_str();
|
||||
@@ -34,11 +36,11 @@ void Server::sendRespons(Header head)
|
||||
{
|
||||
file.open("www/index2.html");
|
||||
}
|
||||
sendHeader(head);
|
||||
sendHeader(head, fd);
|
||||
while (!file.eof())
|
||||
{
|
||||
file.read(buff, BUFFSIZE);
|
||||
send(_clientSocket, buff, file.gcount(), 0);
|
||||
send(fd, buff, file.gcount(), 0);
|
||||
}
|
||||
(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)
|
||||
{
|
||||
Socket serverSocket(AF_INET, SOCK_STREAM, 0, _port);
|
||||
char buff[BUFFSIZE + 1] = {0};
|
||||
Header header;
|
||||
int fd_accept;
|
||||
|
||||
checkError(serverSocket.init(3), "Socket init");
|
||||
_clientSocket = accept(serverSocket.getSocketFd(),
|
||||
checkError(serverSocket.init(MAX_CLIENT), "Socket init");
|
||||
fd_accept = accept(serverSocket.getSocketFd(),
|
||||
serverSocket.getSockaddr(), serverSocket.getSocklen());
|
||||
checkError(_clientSocket, "Initialize client socket");
|
||||
checkError(recv(_clientSocket, buff, BUFFSIZE, 0), "Receive msg from client");
|
||||
checkError(fd_accept, "Initialize client socket");
|
||||
checkError(recv(fd_accept, buff, BUFFSIZE, 0), "Receive msg from client");
|
||||
std::cout << TURGUOISE << "Receive Header" << ZERO_C << std::endl;
|
||||
header.setRequest(buff);
|
||||
header.parseRequest();
|
||||
header.printHeaderInfo();
|
||||
sendRespons(header);
|
||||
close(_clientSocket);
|
||||
sendRespons(header, fd_accept);
|
||||
close(fd_accept);
|
||||
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)
|
||||
{
|
||||
|
||||
|
||||
Reference in New Issue
Block a user