| From cfcd8a8f73aa337e8f45d287a79cd9b8e5c51dcd Mon Sep 17 00:00:00 2001 |
| From: Bernd Kuhls <bernd.kuhls@t-online.de> |
| Date: Sun, 5 Jul 2020 11:42:23 +0200 |
| Subject: [PATCH] Compatibility with libmicrohttpd 0.9.71 |
| |
| From the libmicrohttpd 0.9.71 release notes: |
| |
| Furthermore, the release introduces an 'enum MHD_Result' instead of |
| defines for MHD_YES/MHD_NO. This is intended to make it easier to check |
| 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' |
| |
| Patch sent upstream: https://github.com/etr/libhttpserver/pull/199 |
| |
| Signed-off-by: Bernd Kuhls <bernd.kuhls@t-online.de> |
| --- |
| src/http_request.cpp | 6 +++--- |
| src/httpserver/http_request.hpp | 6 +++--- |
| src/httpserver/http_utils.hpp | 4 ++++ |
| src/httpserver/webserver.hpp | 14 +++++++------- |
| src/webserver.cpp | 22 +++++++++++++--------- |
| 5 files changed, 30 insertions(+), 22 deletions(-) |
| |
| diff --git a/src/http_request.cpp b/src/http_request.cpp |
| index 5703663..be342c7 100644 |
| --- a/src/http_request.cpp |
| +++ b/src/http_request.cpp |
| @@ -88,7 +88,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, |
| @@ -189,7 +189,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, |
| @@ -204,7 +204,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 139272b..62e5275 100644 |
| --- a/src/httpserver/http_request.hpp |
| +++ b/src/httpserver/http_request.hpp |
| @@ -247,15 +247,15 @@ class http_request |
| |
| unescaper_ptr unescaper = 0x0; |
| |
| - 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 9ad89b4..a812197 100644 |
| --- a/src/httpserver/http_utils.hpp |
| +++ b/src/httpserver/http_utils.hpp |
| @@ -53,6 +53,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 1ff472b..661b6ee 100644 |
| --- a/src/httpserver/webserver.hpp |
| +++ b/src/httpserver/webserver.hpp |
| @@ -195,14 +195,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, |
| @@ -219,25 +219,25 @@ class webserver |
| void **con_cls, int upgrade_socket |
| ); |
| |
| - int requests_answer_first_step(MHD_Connection* connection, |
| + MHD_Result requests_answer_first_step(MHD_Connection* connection, |
| struct details::modded_request* mr |
| ); |
| |
| - int requests_answer_second_step(MHD_Connection* connection, |
| + MHD_Result 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 a3104e9..3340eb0 100644 |
| --- a/src/webserver.cpp |
| +++ b/src/webserver.cpp |
| @@ -75,6 +75,10 @@ |
| #define SOCK_CLOEXEC 02000000 |
| #endif |
| |
| +#if MHD_VERSION < 0x00097002 |
| +typedef int MHD_Result; |
| +#endif |
| + |
| using namespace std; |
| |
| namespace httpserver |
| @@ -82,7 +86,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); |
| @@ -421,7 +425,7 @@ void webserver::disallow_ip(const string& ip) |
| 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; |
| |
| @@ -468,7 +472,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, |
| @@ -522,7 +526,7 @@ const std::shared_ptr<http_response> webserver::internal_error_page(details::mod |
| } |
| } |
| |
| -int webserver::requests_answer_first_step( |
| +MHD_Result webserver::requests_answer_first_step( |
| MHD_Connection* connection, |
| struct details::modded_request* mr |
| ) |
| @@ -574,7 +578,7 @@ int webserver::requests_answer_first_step( |
| return MHD_YES; |
| } |
| |
| -int webserver::requests_answer_second_step( |
| +MHD_Result webserver::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 |
| @@ -597,7 +601,7 @@ int webserver::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 |
| @@ -731,10 +735,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, |
| @@ -750,7 +754,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.26.2 |
| |