1 /* SPDX-License-Identifier: LGPL-2.1-or-later */ 2 #pragma once 3 4 #include <microhttpd.h> 5 #include <stdarg.h> 6 7 #include "macro.h" 8 9 /* Those defines are added when options are renamed. If the old names 10 * are not '#define'd, then they are not deprecated yet and there are 11 * enum elements with the same name. Hence let's check for the *old* name, 12 * and define the new name by the value of the old name. */ 13 14 /* Renamed in µhttpd 0.9.51 */ 15 #ifndef MHD_USE_PIPE_FOR_SHUTDOWN 16 # define MHD_USE_ITC MHD_USE_PIPE_FOR_SHUTDOWN 17 #endif 18 19 /* Renamed in µhttpd 0.9.52 */ 20 #ifndef MHD_USE_EPOLL_LINUX_ONLY 21 # define MHD_USE_EPOLL MHD_USE_EPOLL_LINUX_ONLY 22 #endif 23 24 /* Renamed in µhttpd 0.9.52 */ 25 #ifndef MHD_USE_SSL 26 # define MHD_USE_TLS MHD_USE_SSL 27 #endif 28 29 /* Renamed in µhttpd 0.9.53 */ 30 #ifndef MHD_USE_POLL_INTERNALLY 31 # define MHD_USE_POLL_INTERNAL_THREAD MHD_USE_POLL_INTERNALLY 32 #endif 33 34 /* Both the old and new names are defines, check for the new one. */ 35 36 /* Compatibility with libmicrohttpd < 0.9.38 */ 37 #ifndef MHD_HTTP_NOT_ACCEPTABLE 38 # define MHD_HTTP_NOT_ACCEPTABLE MHD_HTTP_METHOD_NOT_ACCEPTABLE 39 #endif 40 41 /* Renamed in µhttpd 0.9.74 (8c644fc1f4d498ea489add8d40a68f5d3e5899fa) */ 42 #ifndef MHD_HTTP_CONTENT_TOO_LARGE 43 # ifdef MHD_HTTP_PAYLOAD_TOO_LARGE 44 # define MHD_HTTP_CONTENT_TOO_LARGE MHD_HTTP_PAYLOAD_TOO_LARGE /* 0.9.53 or newer */ 45 # else 46 # define MHD_HTTP_CONTENT_TOO_LARGE MHD_HTTP_REQUEST_ENTITY_TOO_LARGE 47 # endif 48 #endif 49 50 #if MHD_VERSION < 0x00094203 51 # define MHD_create_response_from_fd_at_offset64 MHD_create_response_from_fd_at_offset 52 #endif 53 54 #if MHD_VERSION >= 0x00097002 55 # define mhd_result enum MHD_Result 56 #else 57 # define mhd_result int 58 #endif 59 60 void microhttpd_logger(void *arg, const char *fmt, va_list ap) _printf_(2, 0); 61 62 /* respond_oom() must be usable with return, hence this form. */ 63 #define respond_oom(connection) log_oom(), mhd_respond_oom(connection) 64 65 int mhd_respondf(struct MHD_Connection *connection, 66 int error, 67 unsigned code, 68 const char *format, ...) _printf_(4,5); 69 70 int mhd_respond(struct MHD_Connection *connection, 71 unsigned code, 72 const char *message); 73 74 int mhd_respond_oom(struct MHD_Connection *connection); 75 76 int check_permissions(struct MHD_Connection *connection, int *code, char **hostname); 77 78 /* Set gnutls internal logging function to a callback which uses our 79 * own logging framework. 80 * 81 * gnutls categories are additionally filtered by our internal log 82 * level, so it should be set fairly high to capture all potentially 83 * interesting events without overwhelming detail. 84 */ 85 int setup_gnutls_logger(char **categories); 86 87 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct MHD_Daemon*, MHD_stop_daemon, NULL); 88 DEFINE_TRIVIAL_CLEANUP_FUNC_FULL(struct MHD_Response*, MHD_destroy_response, NULL); 89