diff --git a/webserv/handler/CgiHandler.cpp b/webserv/handler/CgiHandler.cpp index 78da490..566f21d 100644 --- a/webserv/handler/CgiHandler.cpp +++ b/webserv/handler/CgiHandler.cpp @@ -177,7 +177,7 @@ void CgiHandler::parseCgiOutput() Log::debug("CGI output headers not complete yet"); return; } - + if (header.substr(static_cast(headerEnd), 2) == "\r\n") { headerSeperatorSize = 4; @@ -190,7 +190,7 @@ void CgiHandler::parseCgiOutput() parseCgiHeaders(headers); buffer_.erase(buffer_.begin(), buffer_.begin() + static_cast(headerEnd) + headerSeperatorSize); - parseCgiBody(); + finalizeCgiResponse(); } void CgiHandler::parseCgiHeaders(std::string &headers) @@ -265,13 +265,13 @@ void CgiHandler::handleTimeout() // cancelTimer(); } -void CgiHandler::parseCgiBody() +void CgiHandler::finalizeCgiResponse() { Log::trace(LOCATION); - auto status = response_.getHeaders().get("Status"); - if (cgiProcess_->getExitCode() > 0 && !status.empty()) + wait(); + if (cgiProcess_->getExitCode() > 0 && status.empty()) { response_.setStatus(500); } @@ -288,4 +288,4 @@ void CgiHandler::appendToBuffer(const char *data, size_t length) { Log::trace(LOCATION); buffer_.insert(buffer_.end(), data, data + length); -} \ No newline at end of file +} diff --git a/webserv/handler/CgiHandler.hpp b/webserv/handler/CgiHandler.hpp index 9e2a9bd..996b57d 100644 --- a/webserv/handler/CgiHandler.hpp +++ b/webserv/handler/CgiHandler.hpp @@ -45,7 +45,7 @@ class CgiHandler : public AHandler std::unique_ptr cgiStdErr_; void parseCgiOutput(); void parseCgiHeaders(std::string &headers); - void parseCgiBody(); + void finalizeCgiResponse(); void appendToBuffer(const char *data, size_t length); int pid_ = -1; diff --git a/webserv/handler/CgiProcess.cpp b/webserv/handler/CgiProcess.cpp index 159b139..f973323 100644 --- a/webserv/handler/CgiProcess.cpp +++ b/webserv/handler/CgiProcess.cpp @@ -18,7 +18,8 @@ #include // for waitpid, WNOHANG #include // for close, dup2, pipe2, execve, fork, STDERR_FILENO, STDIN_FILENO, STDOUT_FILENO -CgiProcess::CgiProcess(const HttpRequest &request, CgiHandler &handler) : request_(request), handler_(handler), pid_(-1), status_(-1) +CgiProcess::CgiProcess(const HttpRequest &request, CgiHandler &handler) + : request_(request), handler_(handler), pid_(-1), status_(-1) { if (!request_.getUri().isCgi()) { @@ -133,8 +134,9 @@ void CgiProcess::wait() noexcept return; } - Log::debug("CGI process with PID " + std::to_string(pid_) + " has terminated with status " + std::to_string(status)); - status_ = status; + Log::debug("CGI process with PID " + std::to_string(pid_) + " has terminated with status " + + std::to_string(WEXITSTATUS(status))); + status_ = WEXITSTATUS(status); pid_ = -1; } }