Debug in progress, somes fix but not the main problem

This commit is contained in:
lperrey
2022-08-18 06:03:09 +02:00
parent a008c12058
commit 3d17db996a
13 changed files with 136 additions and 117 deletions

View File

@@ -3,30 +3,27 @@
#define BUFSIZE 8192 // (8Ko)
#define STATUS_500 std::string("Status: 500" CRLF CRLF);
void Webserv::_read_cgi_output(Client *client)
{
char buf[BUFSIZE];
ssize_t ret;
std::cerr << "_read_cgi_output()" << "\n";
std::cerr << "cgi_pid = " << client->cgi_pid << "\n";
std::cerr << "client fd = " << client->get_cl_fd() << "\n";
std::cerr << "cgi fd = " << client->cgi_pipe_r_from_child << "\n";
std::cerr << "_read_cgi_output()" << "\n"; // Debug
std::cerr << "cgi_pid = " << client->cgi_pid << "\n"; // Debug
std::cerr << "client fd = " << client->get_cl_fd() << "\n"; // Debug
std::cerr << "cgi fd = " << client->cgi_pipe_r_from_child << "\n"; // Debug
ret = ::read(client->cgi_pipe_r_from_child, buf, BUFSIZE);
std::cerr << "cgi read ret = " << ret << "\n";
std::cerr << "cgi read ret = " << ret << "\n"; // Debug
if (ret == -1)
{
std::perror("err read(cgi_fd)");
client->cgi_output = STATUS_500;
client->status = 500;
client->cgi_state = CGI_NO_CGI;
}
else if (ret == 0)
std::cerr << "Madame s'il vous plait, du Ketchup pour mon hamburger" << " (AKA:ret=0)" << "\n";
std::cerr << "Madame s'il vous plait, du Ketchup pour mon hamburger" << " (AKA:ret=0)" << "\n"; // :)
else
{
std::cerr << "NORMAL BEHAVIOR I THINK!\n"; // debug
client->cgi_output.append(buf, ret);
}
}
void Webserv::_handle_epollerr_cgi_output(uint32_t events, Client *client)
@@ -37,7 +34,8 @@ void Webserv::_handle_epollerr_cgi_output(uint32_t events, Client *client)
std::cerr << "client fd = " << client->get_cl_fd() << "\n";
std::cerr << "cgi fd = " << client->cgi_pipe_r_from_child << "\n";
client->cgi_output = STATUS_500;
client->status = 500;
client->cgi_state = CGI_NO_CGI;
// Common with EPOLLHUP
pid_t wait_ret;
@@ -45,14 +43,11 @@ void Webserv::_handle_epollerr_cgi_output(uint32_t events, Client *client)
std::cerr << "cgi EPOLLERR waitpid ret = " << wait_ret << "\n";
if (wait_ret == client->cgi_pid)
{
if (client->cgi_pipe_r_from_child)
{
if (::close(client->cgi_pipe_r_from_child) == -1)
std::perror("err close()");
}
client->cgi_pipe_r_from_child = 0;
_epoll_update(client->cgi_pipe_r_from_child, 0, EPOLL_CTL_DEL);
if (::close(client->cgi_pipe_r_from_child) == -1)
std::perror("err close()");
client->cgi_pipe_r_from_child = -1;
_epoll_update(client->get_cl_fd(), EPOLLOUT, EPOLL_CTL_ADD);
client->cgi_state = CGI_OUTPUT_READY;
}
}
@@ -73,14 +68,12 @@ void Webserv::_handle_epollhup_cgi_output(uint32_t events, Client *client)
// std::cerr << "cgi EPOLLHUP waitpid ret = " << wait_ret << "\n";
if (wait_ret == client->cgi_pid)
{
if (client->cgi_pipe_r_from_child)
{
if (::close(client->cgi_pipe_r_from_child) == -1)
std::perror("err close()");
}
client->cgi_pipe_r_from_child = 0;
_epoll_update(client->cgi_pipe_r_from_child, 0, EPOLL_CTL_DEL);
if (::close(client->cgi_pipe_r_from_child) == -1)
std::perror("err close()");
client->cgi_pipe_r_from_child = -1;
_epoll_update(client->get_cl_fd(), EPOLLOUT, EPOLL_CTL_ADD);
client->cgi_state = CGI_OUTPUT_READY;
client->cgi_state = CGI_OUTPUT_COMPLETE;
}
}
@@ -95,9 +88,8 @@ void Webserv::_handle_epollerr_cgi_input(uint32_t events, Client *client)
{
(void)events;
client->cgi_output = STATUS_500;
client->cgi_state = CGI_OUTPUT_READY;
client->status = 500;
client->cgi_state = CGI_NO_CGI;
_close_client_cgi_pipes(client);
_epoll_update(client->get_cl_fd(), EPOLLOUT, EPOLL_CTL_ADD);
}