diff --git a/promhttp/include/promhttp.h b/promhttp/include/promhttp.h index fc47523..f181b5d 100644 --- a/promhttp/include/promhttp.h +++ b/promhttp/include/promhttp.h @@ -46,3 +46,16 @@ void promhttp_set_active_collector_registry(prom_collector_registry_t *active_re */ struct MHD_Daemon *promhttp_start_daemon(unsigned int flags, unsigned short port, MHD_AcceptPolicyCallback apc, void *apc_cls); + +/** + * @brief Starts a daemon in the background and returns a pointer to an MHD_Daemon. + * + * This is the same as promhttp_start_daemon(), except it allows applications + * to pass options to MHD_start_daemon() directly. + * + * @return struct MHD_Daemon* + */ +struct MHD_Daemon *promhttp_start_daemon_with_options(unsigned int flags, unsigned short port, + MHD_AcceptPolicyCallback apc, + void *apc_cls, ...); + diff --git a/promhttp/src/promhttp.c b/promhttp/src/promhttp.c index d94a53e..b8dadb5 100644 --- a/promhttp/src/promhttp.c +++ b/promhttp/src/promhttp.c @@ -15,6 +15,7 @@ */ #include +#include #include "microhttpd.h" #include "prom.h" @@ -63,3 +64,22 @@ struct MHD_Daemon *promhttp_start_daemon(unsigned int flags, unsigned short port void *apc_cls) { return MHD_start_daemon(flags, port, apc, apc_cls, &promhttp_handler, NULL, MHD_OPTION_END); } + +static struct MHD_Daemon *promhttp_start_daemon_with_options_va(unsigned int flags, unsigned short port, + MHD_AcceptPolicyCallback apc, + void *apc_cls, va_list ap) { + return MHD_start_daemon_va(flags, port, apc, apc_cls, &promhttp_handler, NULL, ap); +} + +struct MHD_Daemon *promhttp_start_daemon_with_options(unsigned int flags, unsigned short port, + MHD_AcceptPolicyCallback apc, + void *apc_cls, ...) { + va_list ap; + struct MHD_Daemon *ret; + + va_start(ap, apc_cls); + ret = promhttp_start_daemon_with_options_va(flags, port, apc, apc_cls, ap); + va_end(ap); + + return ret; +}