summaryrefslogtreecommitdiffhomepage
path: root/midiplay.cpp
diff options
context:
space:
mode:
authorRoland Reichwein <mail@reichwein.it>2025-01-12 17:35:13 +0100
committerRoland Reichwein <mail@reichwein.it>2025-01-12 17:35:13 +0100
commit208a484ca309a4919f83a385f402272039817ed9 (patch)
treeee3f5eb218ac5ef7153033b5eaa8daac256abc62 /midiplay.cpp
parent7386cb9794092a7698ba7ca6c22787c18d911046 (diff)
First roundtrip data for remote control
Diffstat (limited to 'midiplay.cpp')
-rw-r--r--midiplay.cpp60
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;
+}
+