From 208a484ca309a4919f83a385f402272039817ed9 Mon Sep 17 00:00:00 2001 From: Roland Reichwein Date: Sun, 12 Jan 2025 17:35:13 +0100 Subject: First roundtrip data for remote control --- Makefile | 15 ++++++++++++++ html/index.html | 63 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ midiplay.cpp | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+) create mode 100644 html/index.html create mode 100644 midiplay.cpp diff --git a/Makefile b/Makefile index c81e849..5f24c4e 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,19 @@ TARGET=midiplay +all: $(TARGET) + play: aplaymidi -p24 locked_out_of_heaven.midi + +run-fcgi: + spawn-fcgi -a 127.0.0.1 -p 9090 -n -- ./midiplay + +midiplay.o: midiplay.cpp + g++ -Wall -g -O2 -fPIC -o $@ -c $^ + +$(TARGET): midiplay.o + g++ -Wall -g -O2 -fPIC -o $@ $^ -lfcgi -lreichwein -lfmt + + +clean: + -rm -rf $(TARGET) diff --git a/html/index.html b/html/index.html new file mode 100644 index 0000000..a27b654 --- /dev/null +++ b/html/index.html @@ -0,0 +1,63 @@ + + + + MIDIPLAY + + + + + +MIDIPLAY + +
+
+
+
+
+
+ + + + 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 + +#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; +} + -- cgit v1.2.3