48 lines
1.2 KiB
C++
48 lines
1.2 KiB
C++
#include <iostream>
|
|
#include <string>
|
|
#include <fcgio.h>
|
|
#include <fcgiapp.h>
|
|
|
|
#include <unistd.h>
|
|
|
|
constexpr static const char* GET("GET");
|
|
|
|
constexpr static const char* REQUEST_METHOD("REQUEST_METHOD");
|
|
constexpr static const char* SCRIPT_NAME("SCRIPT_NAME");
|
|
|
|
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");
|
|
|
|
void handleRequest(FCGX_Request& request) {
|
|
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;
|
|
}
|
|
|
|
std::string scriptName{FCGX_GetParam(SCRIPT_NAME, request.envp)};
|
|
os << contentTypeHtml;
|
|
os << headerEnd;
|
|
os << scriptName << "\n";
|
|
}
|
|
|
|
int main() {
|
|
FCGX_Request request;
|
|
|
|
FCGX_Init();
|
|
FCGX_InitRequest(&request, 0, 0);
|
|
|
|
while (FCGX_Accept_r(&request) == 0) {
|
|
handleRequest(request);
|
|
}
|
|
}
|