diff options
Diffstat (limited to 'midiplay.cpp')
-rw-r--r-- | midiplay.cpp | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/midiplay.cpp b/midiplay.cpp new file mode 100644 index 0000000..75f33da --- /dev/null +++ b/midiplay.cpp @@ -0,0 +1,60 @@ +#include <string> + +#include <fcgiapp.h> + +#include <fmt/format.h> + +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 == "<data><value1>3</value1></data>") + FCGX_PutS("<data><value1>4</value1></data>", 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; +} + |