From 4fd8a07b560dcd4ad5706684d512d33707de3da0 Mon Sep 17 00:00:00 2001
From: Jean-Francois Dockes <jf@dockes.org>
Date: Fri, 3 Jul 2020 19:26:37 +0200
Subject: [PATCH] Adapt streamproxy to newer microhttpd where results are now
 an enum

Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de>
[downloaded from upstream commit
 https://framagit.org/medoc92/upmpdcli/-/commit/4fd8a07b560dcd4ad5706684d512d33707de3da0]
---
 src/mediaserver/cdplugins/streamproxy.cpp | 23 ++++++++++++++---------
 1 file changed, 14 insertions(+), 9 deletions(-)

diff --git a/src/mediaserver/cdplugins/streamproxy.cpp b/src/mediaserver/cdplugins/streamproxy.cpp
index abc57915..8d283834 100644
--- a/src/mediaserver/cdplugins/streamproxy.cpp
+++ b/src/mediaserver/cdplugins/streamproxy.cpp
@@ -28,6 +28,11 @@
 #include <fcntl.h>
 #include <microhttpd.h>
 
+
+#if MHD_VERSION < 0x00097002
+typedef int MHD_Result;
+#endif
+
 #include <mutex>
 #include <condition_variable>
 #include <unordered_map>
@@ -155,7 +160,7 @@ public:
     ~Internal();
     bool startMHD();
 
-    int answerConn(
+    MHD_Result answerConn(
         struct MHD_Connection *connection, const char *url, 
         const char *method, const char *version, 
         const char *upload_data, size_t *upload_data_size,
@@ -202,7 +207,7 @@ StreamProxy::Internal::Internal(int _listenport, UrlTransFunc _urltrans)
 }
 
 
-static int answer_to_connection(
+static MHD_Result answer_to_connection(
     void *cls, struct MHD_Connection *conn, 
     const char *url, const char *method, const char *version, 
     const char *upload_data, size_t *upload_data_size,
@@ -214,7 +219,7 @@ static int answer_to_connection(
         return internal->answerConn(
             conn, url, method, version, upload_data, upload_data_size, con_cls);
     } else {
-        return -1;
+        return MHD_NO;
     }
 }
 
@@ -238,8 +243,8 @@ static int print_out_key (void *cls, enum MHD_ValueKind kind,
 }
 #endif /* PRINT_KEYS */
 
-static int mapvalues_cb(void *cls, enum MHD_ValueKind kind, 
-                        const char *key, const char *value)
+static MHD_Result mapvalues_cb(void *cls, enum MHD_ValueKind kind, 
+                               const char *key, const char *value)
 {
     unordered_map<string,string> *mp = (unordered_map<string,string> *)cls;
     if (mp) {
@@ -307,7 +312,7 @@ static bool processRange(struct MHD_Connection *mhdconn, uint64_t& offset)
     return true;
 }
 
-int StreamProxy::Internal::answerConn(
+MHD_Result StreamProxy::Internal::answerConn(
     struct MHD_Connection *mhdconn, const char *_url,
     const char *method, const char *version, 
     const char *upload_data, size_t *upload_data_size,
@@ -352,7 +357,7 @@ int StreamProxy::Internal::answerConn(
                 return MHD_NO;
             }
             MHD_add_response_header (response, "Location", url.c_str());
-            int ret = MHD_queue_response(mhdconn, 302, response);
+            MHD_Result ret = MHD_queue_response(mhdconn, 302, response);
             MHD_destroy_response(response);
             return ret;
         }
@@ -393,7 +398,7 @@ int StreamProxy::Internal::answerConn(
         int code = httpcode ? httpcode : MHD_HTTP_INTERNAL_SERVER_ERROR;
         struct MHD_Response *response =
             MHD_create_response_from_buffer(0, 0, MHD_RESPMEM_PERSISTENT);
-        int ret = MHD_queue_response(mhdconn, code, response);
+        MHD_Result ret = MHD_queue_response(mhdconn, code, response);
         MHD_destroy_response(response);
         LOGINF("StreamProxy::answerConn (1): return with http code: " <<
                code << endl);
@@ -434,7 +439,7 @@ int StreamProxy::Internal::answerConn(
     if (reader->fetcher->fetchDone(&fetchcode, &httpcode)) {
         code = httpcode ? httpcode : MHD_HTTP_INTERNAL_SERVER_ERROR;
     }
-    int ret = MHD_queue_response(mhdconn, code, response);
+    MHD_Result ret = MHD_queue_response(mhdconn, code, response);
     MHD_destroy_response(response);
     return ret;
 }
-- 
GitLab

