blob: 118b3df398c8f38ee01acf6ec46fd86fe5c9478d [file] [log] [blame]
From 056df008ecb8ab354191b7515199267eb6b84124 Mon Sep 17 00:00:00 2001
From: bkuhls <bkuhls@users.noreply.github.com>
Date: Mon, 6 Jul 2020 04:23:21 +0200
Subject: [PATCH] Compatibility with libmicrohttpd 0.9.71 (#199)
From the libmicrohttpd 0.9.71 release notes:
The release introduces an 'enum MHD_Result' instead of
for certain API misuse bugs by providing better types (not everything is
an 'int'). While this does NOT change the binary API, this change
_will_ cause compiler warnings for all legacy code -- until 'int' is
replaced with 'enum MHD_Result'.
(cherry picked from commit 51b343c6b05dd13cbde0db04984fbf392e9f6df6)
[Peter: backported to 0.17.5]
Signed-off-by: Peter Korsgaard <peter@korsgaard.com>
---
src/http_request.cpp | 6 +++---
src/httpserver/http_request.hpp | 6 +++---
src/httpserver/http_utils.hpp | 4 ++++
src/httpserver/webserver.hpp | 16 ++++++++--------
src/webserver.cpp | 24 ++++++++++++++----------
5 files changed, 32 insertions(+), 24 deletions(-)
diff --git a/src/http_request.cpp b/src/http_request.cpp
index 973ab33..37035b2 100644
--- a/src/http_request.cpp
+++ b/src/http_request.cpp
@@ -86,7 +86,7 @@ const std::string http_request::get_connection_value(const std::string& key, enu
return header_c;
}
-int http_request::build_request_header(
+MHD_Result http_request::build_request_header(
void *cls,
enum MHD_ValueKind kind,
const char *key,
@@ -187,7 +187,7 @@ const std::string http_request::get_querystring() const
return querystring;
}
-int http_request::build_request_args(
+MHD_Result http_request::build_request_args(
void *cls,
enum MHD_ValueKind kind,
const char *key,
@@ -202,7 +202,7 @@ int http_request::build_request_args(
return MHD_YES;
}
-int http_request::build_request_querystring(
+MHD_Result http_request::build_request_querystring(
void *cls,
enum MHD_ValueKind kind,
const char *key,
diff --git a/src/httpserver/http_request.hpp b/src/httpserver/http_request.hpp
index 21f2176..6bd371c 100644
--- a/src/httpserver/http_request.hpp
+++ b/src/httpserver/http_request.hpp
@@ -304,15 +304,15 @@ class http_request
unescaper_ptr unescaper;
- static int build_request_header(void *cls, enum MHD_ValueKind kind,
+ static MHD_Result build_request_header(void *cls, enum MHD_ValueKind kind,
const char *key, const char *value
);
- static int build_request_args(void *cls, enum MHD_ValueKind kind,
+ static MHD_Result build_request_args(void *cls, enum MHD_ValueKind kind,
const char *key, const char *value
);
- static int build_request_querystring(void *cls, enum MHD_ValueKind kind,
+ static MHD_Result build_request_querystring(void *cls, enum MHD_ValueKind kind,
const char *key, const char *value
);
diff --git a/src/httpserver/http_utils.hpp b/src/httpserver/http_utils.hpp
index bd3df17..cf18360 100644
--- a/src/httpserver/http_utils.hpp
+++ b/src/httpserver/http_utils.hpp
@@ -39,6 +39,10 @@
#define DEFAULT_MASK_VALUE 0xFFFF
+#if MHD_VERSION < 0x00097002
+typedef int MHD_Result;
+#endif
+
namespace httpserver {
typedef void(*unescaper_ptr)(std::string&);
diff --git a/src/httpserver/webserver.hpp b/src/httpserver/webserver.hpp
index 2660c70..3c915a1 100644
--- a/src/httpserver/webserver.hpp
+++ b/src/httpserver/webserver.hpp
@@ -201,14 +201,14 @@ class webserver
enum MHD_RequestTerminationCode toe
);
- static int answer_to_connection
+ static MHD_Result answer_to_connection
(
void* cls, MHD_Connection* connection,
const char* url, const char* method,
const char* version, const char* upload_data,
size_t* upload_data_size, void** con_cls
);
- static int post_iterator
+ static MHD_Result post_iterator
(
void *cls,
enum MHD_ValueKind kind,
@@ -225,30 +225,30 @@ class webserver
void **con_cls, int upgrade_socket
);
- int bodyless_requests_answer(MHD_Connection* connection,
+ MHD_Result bodyless_requests_answer(MHD_Connection* connection,
const char* method, const char* version,
struct details::modded_request* mr
);
- int bodyfull_requests_answer_first_step(MHD_Connection* connection,
+ MHD_Result bodyfull_requests_answer_first_step(MHD_Connection* connection,
struct details::modded_request* mr
);
- int bodyfull_requests_answer_second_step(MHD_Connection* connection,
+ MHD_Result bodyfull_requests_answer_second_step(MHD_Connection* connection,
const char* method, const char* version, const char* upload_data,
size_t* upload_data_size, struct details::modded_request* mr
);
- int finalize_answer(MHD_Connection* connection,
+ MHD_Result finalize_answer(MHD_Connection* connection,
struct details::modded_request* mr, const char* method
);
- int complete_request(MHD_Connection* connection,
+ MHD_Result complete_request(MHD_Connection* connection,
struct details::modded_request* mr,
const char* version, const char* method
);
- friend int policy_callback (void *cls,
+ friend MHD_Result policy_callback (void *cls,
const struct sockaddr* addr, socklen_t addrlen
);
friend void error_log(void* cls, const char* fmt, va_list ap);
diff --git a/src/webserver.cpp b/src/webserver.cpp
index e71c364..ab6b530 100644
--- a/src/webserver.cpp
+++ b/src/webserver.cpp
@@ -61,6 +61,10 @@
#define SOCK_CLOEXEC 02000000
#endif
+#if MHD_VERSION < 0x00097002
+typedef int MHD_Result;
+#endif
+
using namespace std;
namespace httpserver
@@ -68,7 +72,7 @@ namespace httpserver
using namespace http;
-int policy_callback (void *, const struct sockaddr*, socklen_t);
+MHD_Result policy_callback (void *, const struct sockaddr*, socklen_t);
void error_log(void*, const char*, va_list);
void* uri_log(void*, const char*);
void access_log(webserver*, string);
@@ -408,7 +412,7 @@ void webserver::disallow_ip(const string& ip)
this->allowances.erase(ip);
}
-int policy_callback (void *cls, const struct sockaddr* addr, socklen_t addrlen)
+MHD_Result policy_callback (void *cls, const struct sockaddr* addr, socklen_t addrlen)
{
if(!(static_cast<webserver*>(cls))->ban_system_enabled) return MHD_YES;
@@ -455,7 +459,7 @@ size_t unescaper_func(void * cls, struct MHD_Connection *c, char *s)
return std::string(s).size();
}
-int webserver::post_iterator (void *cls, enum MHD_ValueKind kind,
+MHD_Result webserver::post_iterator (void *cls, enum MHD_ValueKind kind,
const char *key,
const char *filename,
const char *content_type,
@@ -509,7 +513,7 @@ const std::shared_ptr<http_response> webserver::internal_error_page(details::mod
}
}
-int webserver::bodyless_requests_answer(
+MHD_Result webserver::bodyless_requests_answer(
MHD_Connection* connection, const char* method,
const char* version, struct details::modded_request* mr
)
@@ -519,7 +523,7 @@ int webserver::bodyless_requests_answer(
return complete_request(connection, mr, version, method);
}
-int webserver::bodyfull_requests_answer_first_step(
+MHD_Result webserver::bodyfull_requests_answer_first_step(
MHD_Connection* connection,
struct details::modded_request* mr
)
@@ -565,7 +569,7 @@ int webserver::bodyfull_requests_answer_first_step(
return MHD_YES;
}
-int webserver::bodyfull_requests_answer_second_step(
+MHD_Result webserver::bodyfull_requests_answer_second_step(
MHD_Connection* connection, const char* method,
const char* version, const char* upload_data,
size_t* upload_data_size, struct details::modded_request* mr
@@ -583,7 +587,7 @@ int webserver::bodyfull_requests_answer_second_step(
return MHD_YES;
}
-int webserver::finalize_answer(
+MHD_Result webserver::finalize_answer(
MHD_Connection* connection,
struct details::modded_request* mr,
const char* method
@@ -717,10 +721,10 @@ int webserver::finalize_answer(
mr->dhrs->decorate_response(raw_response);
to_ret = mr->dhrs->enqueue_response(connection, raw_response);
MHD_destroy_response(raw_response);
- return to_ret;
+ return (MHD_Result) to_ret;
}
-int webserver::complete_request(
+MHD_Result webserver::complete_request(
MHD_Connection* connection,
struct details::modded_request* mr,
const char* version,
@@ -736,7 +740,7 @@ int webserver::complete_request(
return finalize_answer(connection, mr, method);
}
-int webserver::answer_to_connection(void* cls, MHD_Connection* connection,
+MHD_Result webserver::answer_to_connection(void* cls, MHD_Connection* connection,
const char* url, const char* method,
const char* version, const char* upload_data,
size_t* upload_data_size, void** con_cls
--
2.20.1