#include "server.h" constexpr static const char* GET("GET"); constexpr static const char* REQUEST_METHOD("REQUEST_METHOD"); constexpr static const char* REQUEST_URI("REQUEST_URI"); constexpr static const char* DOCUMENT_URI("DOCUMENT_URI"); constexpr static const char* DOCUMENT_ROOT("DOCUMENT_ROOT"); constexpr static const char* SCRIPT_NAME("SCRIPT_NAME"); constexpr static const char* SCRIPT_FILENAME("SCRIPT_FILENAME"); constexpr static const char* status405("Status: 405 Method Not Allowed"); constexpr static const char* contentTypeHtml("Content-type: text/html"); constexpr static const char* headerEnd("\n\n"); Server::Server(): requestCount(0) {} Server::~Server() { } void Server::handleRequest(FCGX_Request& request) { ++requestCount; fcgi_streambuf cin_fcgi_streambuf(request.in); fcgi_streambuf cout_fcgi_streambuf(request.out); fcgi_streambuf cerr_fcgi_streambuf(request.err); std::ostream os{&cout_fcgi_streambuf}; std::ostream errs{&cerr_fcgi_streambuf}; std::istream is{&cin_fcgi_streambuf}; std::string requestMethod(FCGX_GetParam(REQUEST_METHOD, request.envp)); if (requestMethod != GET) { os << status405; return; } try { printEnv(os, request); os << requestCount; } catch (const std::exception e) { os << contentTypeHtml; os << headerEnd; os << e.what(); } } void Server::printEnv(std::ostream& out, FCGX_Request& request) { char **envp = request.envp; for (int i = 0; envp[i] != nullptr; ++i) { out << envp[i] << "
"; } }