From 59f9ee47dc60386f05bc331da9fd0420e22ed344 Mon Sep 17 00:00:00 2001 From: Craig Andrews Date: Thu, 2 Jul 2020 14:36:09 -0400 Subject: [PATCH] Compatibility with libmicrohttpd 0.9.71 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'. --- xbmc/network/WebServer.cpp | 45 ++++++++++--------- xbmc/network/WebServer.h | 30 ++++++------- .../httprequesthandler/HTTPFileHandler.cpp | 2 +- .../httprequesthandler/HTTPFileHandler.h | 2 +- .../HTTPImageTransformationHandler.cpp | 2 +- .../HTTPImageTransformationHandler.h | 2 +- .../httprequesthandler/HTTPJsonRpcHandler.cpp | 2 +- .../httprequesthandler/HTTPJsonRpcHandler.h | 2 +- .../httprequesthandler/HTTPPythonHandler.cpp | 2 +- .../httprequesthandler/HTTPPythonHandler.h | 2 +- .../HTTPRequestHandlerUtils.cpp | 4 +- .../HTTPRequestHandlerUtils.h | 4 +- .../HTTPWebinterfaceAddonsHandler.cpp | 2 +- .../HTTPWebinterfaceAddonsHandler.h | 2 +- .../httprequesthandler/IHTTPRequestHandler.h | 8 +++- 15 files changed, 60 insertions(+), 51 deletions(-) diff --git a/xbmc/network/WebServer.cpp b/xbmc/network/WebServer.cpp index 783404227785a..53549aafa9ce9 100644 --- a/xbmc/network/WebServer.cpp +++ b/xbmc/network/WebServer.cpp @@ -86,7 +86,7 @@ static MHD_Response* create_response(size_t size, const void* data, int free, in return MHD_create_response_from_buffer(size, const_cast(data), mode); } -int CWebServer::AskForAuthentication(const HTTPRequest& request) const +MHD_RESULT CWebServer::AskForAuthentication(const HTTPRequest& request) const { struct MHD_Response *response = create_response(0, nullptr, MHD_NO, MHD_NO); if (!response) @@ -95,7 +95,7 @@ int CWebServer::AskForAuthentication(const HTTPRequest& request) const return MHD_NO; } - int ret = AddHeader(response, MHD_HTTP_HEADER_CONNECTION, "close"); + MHD_RESULT ret = AddHeader(response, MHD_HTTP_HEADER_CONNECTION, "close"); if (!ret) { CLog::Log(LOGERROR, "CWebServer[%hu]: unable to prepare HTTP Unauthorized response", m_port); @@ -105,7 +105,10 @@ int CWebServer::AskForAuthentication(const HTTPRequest& request) const LogResponse(request, MHD_HTTP_UNAUTHORIZED); - ret = MHD_queue_basic_auth_fail_response(request.connection, "XBMC", response); + // This MHD_RESULT cast is only necessary for libmicrohttpd 0.9.71 + // The return type of MHD_queue_basic_auth_fail_response was fixed for future versions + // See https://git.gnunet.org/libmicrohttpd.git/commit/?id=860b42e9180da4dcd7e8690a3fcdb4e37e5772c5 + ret = static_cast(MHD_queue_basic_auth_fail_response(request.connection, "XBMC", response)); MHD_destroy_response(response); return ret; @@ -135,7 +138,7 @@ bool CWebServer::IsAuthenticated(const HTTPRequest& request) const return authenticated; } -int CWebServer::AnswerToConnection(void *cls, struct MHD_Connection *connection, +MHD_RESULT CWebServer::AnswerToConnection(void *cls, struct MHD_Connection *connection, const char *url, const char *method, const char *version, const char *upload_data, size_t *upload_data_size, void **con_cls) @@ -163,7 +166,7 @@ int CWebServer::AnswerToConnection(void *cls, struct MHD_Connection *connection, return webServer->HandlePartialRequest(connection, connectionHandler, request, upload_data, upload_data_size, con_cls); } -int CWebServer::HandlePartialRequest(struct MHD_Connection *connection, ConnectionHandler* connectionHandler, const HTTPRequest& request, const char *upload_data, size_t *upload_data_size, void **con_cls) +MHD_RESULT CWebServer::HandlePartialRequest(struct MHD_Connection *connection, ConnectionHandler* connectionHandler, const HTTPRequest& request, const char *upload_data, size_t *upload_data_size, void **con_cls) { std::unique_ptr conHandler(connectionHandler); @@ -276,7 +279,7 @@ int CWebServer::HandlePartialRequest(struct MHD_Connection *connection, Connecti return SendErrorResponse(request, MHD_HTTP_NOT_FOUND, request.method); } -int CWebServer::HandlePostField(void *cls, enum MHD_ValueKind kind, const char *key, +MHD_RESULT CWebServer::HandlePostField(void *cls, enum MHD_ValueKind kind, const char *key, const char *filename, const char *content_type, const char *transfer_encoding, const char *data, uint64_t off, size_t size) @@ -294,13 +297,13 @@ int CWebServer::HandlePostField(void *cls, enum MHD_ValueKind kind, const char * return MHD_YES; } -int CWebServer::HandleRequest(const std::shared_ptr& handler) +MHD_RESULT CWebServer::HandleRequest(const std::shared_ptr& handler) { if (handler == nullptr) return MHD_NO; HTTPRequest request = handler->GetRequest(); - int ret = handler->HandleRequest(); + MHD_RESULT ret = handler->HandleRequest(); if (ret == MHD_NO) { CLog::Log(LOGERROR, "CWebServer[%hu]: failed to handle HTTP request for %s", m_port, request.pathUrl.c_str()); @@ -348,7 +351,7 @@ int CWebServer::HandleRequest(const std::shared_ptr& handle return FinalizeRequest(handler, responseDetails.status, response); } -int CWebServer::FinalizeRequest(const std::shared_ptr& handler, int responseStatus, struct MHD_Response *response) +MHD_RESULT CWebServer::FinalizeRequest(const std::shared_ptr& handler, int responseStatus, struct MHD_Response *response) { if (handler == nullptr || response == nullptr) return MHD_NO; @@ -562,7 +565,7 @@ void CWebServer::FinalizePostDataProcessing(ConnectionHandler *connectionHandler MHD_destroy_post_processor(connectionHandler->postprocessor); } -int CWebServer::CreateMemoryDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const +MHD_RESULT CWebServer::CreateMemoryDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const { if (handler == nullptr) return MHD_NO; @@ -620,7 +623,7 @@ int CWebServer::CreateMemoryDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const +MHD_RESULT CWebServer::CreateRangedMemoryDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const { if (handler == nullptr) return MHD_NO; @@ -700,7 +703,7 @@ int CWebServer::CreateRangedMemoryDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const +MHD_RESULT CWebServer::CreateFileDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const { if (handler == nullptr) return MHD_NO; @@ -850,7 +853,7 @@ int CWebServer::CreateFileDownloadResponse(const std::shared_ptr(data), free ? MHD_YES : MHD_NO, copy ? MHD_YES : MHD_NO); if (response == nullptr) @@ -893,20 +896,20 @@ int CWebServer::CreateMemoryDownloadResponse(struct MHD_Connection *connection, return MHD_YES; } -int CWebServer::SendResponse(const HTTPRequest& request, int responseStatus, MHD_Response *response) const +MHD_RESULT CWebServer::SendResponse(const HTTPRequest& request, int responseStatus, MHD_Response *response) const { LogResponse(request, responseStatus); - int ret = MHD_queue_response(request.connection, responseStatus, response); + MHD_RESULT ret = MHD_queue_response(request.connection, responseStatus, response); MHD_destroy_response(response); return ret; } -int CWebServer::SendErrorResponse(const HTTPRequest& request, int errorType, HTTPMethod method) const +MHD_RESULT CWebServer::SendErrorResponse(const HTTPRequest& request, int errorType, HTTPMethod method) const { struct MHD_Response *response = nullptr; - int ret = CreateErrorResponse(request.connection, errorType, method, response); + MHD_RESULT ret = CreateErrorResponse(request.connection, errorType, method, response); if (ret == MHD_NO) return MHD_NO; @@ -1296,10 +1299,10 @@ std::string CWebServer::CreateMimeTypeFromExtension(const char *ext) return CMime::GetMimeType(ext); } -int CWebServer::AddHeader(struct MHD_Response *response, const std::string &name, const std::string &value) const +MHD_RESULT CWebServer::AddHeader(struct MHD_Response *response, const std::string &name, const std::string &value) const { if (response == nullptr || name.empty()) - return 0; + return MHD_NO; CLog::Log(LOGDEBUG, LOGWEBSERVER, "CWebServer[%hu] [OUT] %s: %s", m_port, name.c_str(), value.c_str()); diff --git a/xbmc/network/WebServer.h b/xbmc/network/WebServer.h index c7a909304a218..1274a2e0ed403 100644 --- a/xbmc/network/WebServer.h +++ b/xbmc/network/WebServer.h @@ -56,17 +56,17 @@ class CWebServer virtual void LogRequest(const char* uri) const; - virtual int HandlePartialRequest(struct MHD_Connection *connection, ConnectionHandler* connectionHandler, const HTTPRequest& request, + virtual MHD_RESULT HandlePartialRequest(struct MHD_Connection *connection, ConnectionHandler* connectionHandler, const HTTPRequest& request, const char *upload_data, size_t *upload_data_size, void **con_cls); - virtual int HandleRequest(const std::shared_ptr& handler); - virtual int FinalizeRequest(const std::shared_ptr& handler, int responseStatus, struct MHD_Response *response); + virtual MHD_RESULT HandleRequest(const std::shared_ptr& handler); + virtual MHD_RESULT FinalizeRequest(const std::shared_ptr& handler, int responseStatus, struct MHD_Response *response); private: struct MHD_Daemon* StartMHD(unsigned int flags, int port); std::shared_ptr FindRequestHandler(const HTTPRequest& request) const; - int AskForAuthentication(const HTTPRequest& request) const; + MHD_RESULT AskForAuthentication(const HTTPRequest& request) const; bool IsAuthenticated(const HTTPRequest& request) const; bool IsRequestCacheable(const HTTPRequest& request) const; @@ -76,18 +76,18 @@ class CWebServer bool ProcessPostData(const HTTPRequest& request, ConnectionHandler *connectionHandler, const char *upload_data, size_t *upload_data_size, void **con_cls) const; void FinalizePostDataProcessing(ConnectionHandler *connectionHandler) const; - int CreateMemoryDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const; - int CreateRangedMemoryDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const; + MHD_RESULT CreateMemoryDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const; + MHD_RESULT CreateRangedMemoryDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const; - int CreateRedirect(struct MHD_Connection *connection, const std::string &strURL, struct MHD_Response *&response) const; - int CreateFileDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const; - int CreateErrorResponse(struct MHD_Connection *connection, int responseType, HTTPMethod method, struct MHD_Response *&response) const; - int CreateMemoryDownloadResponse(struct MHD_Connection *connection, const void *data, size_t size, bool free, bool copy, struct MHD_Response *&response) const; + MHD_RESULT CreateRedirect(struct MHD_Connection *connection, const std::string &strURL, struct MHD_Response *&response) const; + MHD_RESULT CreateFileDownloadResponse(const std::shared_ptr& handler, struct MHD_Response *&response) const; + MHD_RESULT CreateErrorResponse(struct MHD_Connection *connection, int responseType, HTTPMethod method, struct MHD_Response *&response) const; + MHD_RESULT CreateMemoryDownloadResponse(struct MHD_Connection *connection, const void *data, size_t size, bool free, bool copy, struct MHD_Response *&response) const; - int SendResponse(const HTTPRequest& request, int responseStatus, MHD_Response *response) const; - int SendErrorResponse(const HTTPRequest& request, int errorType, HTTPMethod method) const; + MHD_RESULT SendResponse(const HTTPRequest& request, int responseStatus, MHD_Response *response) const; + MHD_RESULT SendErrorResponse(const HTTPRequest& request, int errorType, HTTPMethod method) const; - int AddHeader(struct MHD_Response *response, const std::string &name, const std::string &value) const; + MHD_RESULT AddHeader(struct MHD_Response *response, const std::string &name, const std::string &value) const; void LogRequest(const HTTPRequest& request) const; void LogResponse(const HTTPRequest& request, int responseStatus) const; @@ -100,11 +100,11 @@ class CWebServer static ssize_t ContentReaderCallback (void *cls, uint64_t pos, char *buf, size_t max); static void ContentReaderFreeCallback(void *cls); - static int AnswerToConnection (void *cls, struct MHD_Connection *connection, + static MHD_RESULT AnswerToConnection (void *cls, struct 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 HandlePostField(void *cls, enum MHD_ValueKind kind, const char *key, + static MHD_RESULT HandlePostField(void *cls, enum MHD_ValueKind kind, const char *key, const char *filename, const char *content_type, const char *transfer_encoding, const char *data, uint64_t off, size_t size); diff --git a/xbmc/network/httprequesthandler/HTTPFileHandler.cpp b/xbmc/network/httprequesthandler/HTTPFileHandler.cpp index 2101d49f09117..26e53901dbfa6 100644 --- a/xbmc/network/httprequesthandler/HTTPFileHandler.cpp +++ b/xbmc/network/httprequesthandler/HTTPFileHandler.cpp @@ -23,7 +23,7 @@ CHTTPFileHandler::CHTTPFileHandler(const HTTPRequest &request) m_lastModified() { } -int CHTTPFileHandler::HandleRequest() +MHD_RESULT CHTTPFileHandler::HandleRequest() { return !m_url.empty() ? MHD_YES : MHD_NO; } diff --git a/xbmc/network/httprequesthandler/HTTPFileHandler.h b/xbmc/network/httprequesthandler/HTTPFileHandler.h index 3c74b52750922..6121315c6f5f4 100644 --- a/xbmc/network/httprequesthandler/HTTPFileHandler.h +++ b/xbmc/network/httprequesthandler/HTTPFileHandler.h @@ -19,7 +19,7 @@ class CHTTPFileHandler : public IHTTPRequestHandler public: ~CHTTPFileHandler() override = default; - int HandleRequest() override; + MHD_RESULT HandleRequest() override; bool CanHandleRanges() const override { return m_canHandleRanges; } bool CanBeCached() const override { return m_canBeCached; } diff --git a/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.cpp b/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.cpp index de42e7fd3017f..6902be0125329 100644 --- a/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.cpp +++ b/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.cpp @@ -104,7 +104,7 @@ bool CHTTPImageTransformationHandler::CanHandleRequest(const HTTPRequest &reques options.find(TRANSFORMATION_OPTION_HEIGHT) != options.end()); } -int CHTTPImageTransformationHandler::HandleRequest() +MHD_RESULT CHTTPImageTransformationHandler::HandleRequest() { if (m_response.type == HTTPError) return MHD_YES; diff --git a/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.h b/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.h index c55015ec4eb09..0d17afc3250a0 100644 --- a/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.h +++ b/xbmc/network/httprequesthandler/HTTPImageTransformationHandler.h @@ -23,7 +23,7 @@ class CHTTPImageTransformationHandler : public IHTTPRequestHandler IHTTPRequestHandler* Create(const HTTPRequest &request) const override { return new CHTTPImageTransformationHandler(request); } bool CanHandleRequest(const HTTPRequest &request)const override; - int HandleRequest() override; + MHD_RESULT HandleRequest() override; bool CanHandleRanges() const override { return true; } bool CanBeCached() const override { return true; } diff --git a/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.cpp b/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.cpp index e8e2fa36924b5..a4c3c198eba3a 100644 --- a/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.cpp +++ b/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.cpp @@ -25,7 +25,7 @@ bool CHTTPJsonRpcHandler::CanHandleRequest(const HTTPRequest &request) const return (request.pathUrl.compare("/jsonrpc") == 0); } -int CHTTPJsonRpcHandler::HandleRequest() +MHD_RESULT CHTTPJsonRpcHandler::HandleRequest() { CHTTPClient client(m_request.method); bool isRequest = false; diff --git a/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.h b/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.h index 67c14b666ef6f..2659fd549c253 100644 --- a/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.h +++ b/xbmc/network/httprequesthandler/HTTPJsonRpcHandler.h @@ -24,7 +24,7 @@ class CHTTPJsonRpcHandler : public IHTTPRequestHandler IHTTPRequestHandler* Create(const HTTPRequest &request) const override { return new CHTTPJsonRpcHandler(request); } bool CanHandleRequest(const HTTPRequest &request) const override; - int HandleRequest() override; + MHD_RESULT HandleRequest() override; HttpResponseRanges GetResponseData() const override; diff --git a/xbmc/network/httprequesthandler/HTTPPythonHandler.cpp b/xbmc/network/httprequesthandler/HTTPPythonHandler.cpp index 5f9aeef10f2e1..a07ef0d3ac31b 100644 --- a/xbmc/network/httprequesthandler/HTTPPythonHandler.cpp +++ b/xbmc/network/httprequesthandler/HTTPPythonHandler.cpp @@ -112,7 +112,7 @@ bool CHTTPPythonHandler::CanHandleRequest(const HTTPRequest &request) const return true; } -int CHTTPPythonHandler::HandleRequest() +MHD_RESULT CHTTPPythonHandler::HandleRequest() { if (m_response.type == HTTPError || m_response.type == HTTPRedirect) return MHD_YES; diff --git a/xbmc/network/httprequesthandler/HTTPPythonHandler.h b/xbmc/network/httprequesthandler/HTTPPythonHandler.h index 03c150693ff47..166430e68d51b 100644 --- a/xbmc/network/httprequesthandler/HTTPPythonHandler.h +++ b/xbmc/network/httprequesthandler/HTTPPythonHandler.h @@ -25,7 +25,7 @@ class CHTTPPythonHandler : public IHTTPRequestHandler bool CanBeCached() const override { return false; } bool GetLastModifiedDate(CDateTime &lastModified) const override; - int HandleRequest() override; + MHD_RESULT HandleRequest() override; HttpResponseRanges GetResponseData() const override { return m_responseRanges; } diff --git a/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.cpp b/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.cpp index 80d1d67334756..f2ea1f2e51ed0 100644 --- a/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.cpp +++ b/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.cpp @@ -61,7 +61,7 @@ bool HTTPRequestHandlerUtils::GetRequestedRanges(struct MHD_Connection *connecti return ranges.Parse(GetRequestHeaderValue(connection, MHD_HEADER_KIND, MHD_HTTP_HEADER_RANGE), totalLength); } -int HTTPRequestHandlerUtils::FillArgumentMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value) +MHD_RESULT HTTPRequestHandlerUtils::FillArgumentMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value) { if (cls == nullptr || key == nullptr) return MHD_NO; @@ -72,7 +72,7 @@ int HTTPRequestHandlerUtils::FillArgumentMap(void *cls, enum MHD_ValueKind kind, return MHD_YES; } -int HTTPRequestHandlerUtils::FillArgumentMultiMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value) +MHD_RESULT HTTPRequestHandlerUtils::FillArgumentMultiMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value) { if (cls == nullptr || key == nullptr) return MHD_NO; diff --git a/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.h b/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.h index 9a07801914e43..0ec5ed1bf706f 100644 --- a/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.h +++ b/xbmc/network/httprequesthandler/HTTPRequestHandlerUtils.h @@ -25,6 +25,6 @@ class HTTPRequestHandlerUtils private: HTTPRequestHandlerUtils() = delete; - static int FillArgumentMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value); - static int FillArgumentMultiMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value); + static MHD_RESULT FillArgumentMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value); + static MHD_RESULT FillArgumentMultiMap(void *cls, enum MHD_ValueKind kind, const char *key, const char *value); }; diff --git a/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.cpp b/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.cpp index 01a6b503bdf6f..0716a5df96cad 100644 --- a/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.cpp +++ b/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.cpp @@ -18,7 +18,7 @@ bool CHTTPWebinterfaceAddonsHandler::CanHandleRequest(const HTTPRequest &request return (request.pathUrl.compare("/addons") == 0 || request.pathUrl.compare("/addons/") == 0); } -int CHTTPWebinterfaceAddonsHandler::HandleRequest() +MHD_RESULT CHTTPWebinterfaceAddonsHandler::HandleRequest() { m_responseData = ADDON_HEADER; ADDON::VECADDONS addons; diff --git a/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.h b/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.h index e9b1c6d29a410..23cea36d14367 100644 --- a/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.h +++ b/xbmc/network/httprequesthandler/HTTPWebinterfaceAddonsHandler.h @@ -21,7 +21,7 @@ class CHTTPWebinterfaceAddonsHandler : public IHTTPRequestHandler IHTTPRequestHandler* Create(const HTTPRequest &request) const override { return new CHTTPWebinterfaceAddonsHandler(request); } bool CanHandleRequest(const HTTPRequest &request) const override; - int HandleRequest() override; + MHD_RESULT HandleRequest() override; HttpResponseRanges GetResponseData() const override; diff --git a/xbmc/network/httprequesthandler/IHTTPRequestHandler.h b/xbmc/network/httprequesthandler/IHTTPRequestHandler.h index 4b1e40a587a7b..567c8e55ee9bf 100644 --- a/xbmc/network/httprequesthandler/IHTTPRequestHandler.h +++ b/xbmc/network/httprequesthandler/IHTTPRequestHandler.h @@ -22,6 +22,12 @@ #include "utils/HttpRangeUtils.h" +#if MHD_VERSION >= 0x00097002 +using MHD_RESULT = MHD_Result; +#else +using MHD_RESULT = int; +#endif + class CDateTime; class CWebServer; @@ -114,7 +120,7 @@ class IHTTPRequestHandler * * \return MHD_NO if a severe error has occurred otherwise MHD_YES. */ - virtual int HandleRequest() = 0; + virtual MHD_RESULT HandleRequest() = 0; /*! * \brief Whether the HTTP response could also be provided in ranges.