#include #include #include std::string getPostData(FCGX_Request& request) { std::string result; std::string contentLengthString(FCGX_GetParam("CONTENT_LENGTH", request.envp)); int contentLength = std::stoul(contentLengthString); if (contentLength < 1) { return "Bad content length"; } else { result.resize(contentLength); unsigned int status = FCGX_GetStr(result.data(), result.size(), request.in); if (status != result.size()) { return fmt::format("Read error: {}/{}", status, result); } return result; } } int main(int argc, char* argv[]) { int result = FCGX_Init(); if (result != 0) { return 1; // error on init } FCGX_Request request; if (FCGX_InitRequest(&request, 0, 0) != 0) { return 1; // error on init } while (FCGX_Accept_r(&request) == 0) { std::string query = FCGX_GetParam("QUERY_STRING", request.envp); std::string method = FCGX_GetParam("REQUEST_METHOD", request.envp); if (method == "POST") { FCGX_PutS("Content-Type: text/xml\r\n\r\n", request.out); std::string data = getPostData(request); if (data == "3") FCGX_PutS("4", request.out); } else { FCGX_PutS("Content-Type: text/text\r\n\r\n", request.out); FCGX_PutS("Bad request method: POST expected", request.out); } } return 0; }