mirror of
https://github.com/3lswear/webserv.git
synced 2025-10-29 05:17:59 +03:00
add eboll
This commit is contained in:
@@ -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