60 lines
1.6 KiB
C++
60 lines
1.6 KiB
C++
#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] << "</br>";
|
|
}
|
|
}
|
|
|