From 056df008ecb8ab354191b7515199267eb6b84124 Mon Sep 17 00:00:00 2001 From: bkuhls 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 --- 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(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 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