From: Timo Sirainen Date: Mon, 3 Jan 2022 17:38:54 +0000 (+0200) Subject: anvil: Add admin_cmd_send() X-Git-Tag: 2.4.0~4496 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=c8aa5ae3172a67ce9836b4f73bd2291a45d7af9e;p=thirdparty%2Fdovecot%2Fcore.git anvil: Add admin_cmd_send() This can use either incoming or outgoing connections for sending the command. --- diff --git a/src/anvil/common.h b/src/anvil/common.h index f9a44bd576..4768ab14a4 100644 --- a/src/anvil/common.h +++ b/src/anvil/common.h @@ -3,8 +3,22 @@ #include "lib.h" +/* Error is set and reply=NULL on internal errors. */ +typedef void +admin_cmd_callback_t(const char *reply, const char *error, void *context); + extern struct connect_limit *connect_limit; extern struct penalty *penalty; extern bool anvil_restarted; +void admin_cmd_send(const char *service, pid_t pid, const char *cmd, + admin_cmd_callback_t *callback, void *context); +#define admin_cmd_send(service, pid, cmd, callback, context) \ + admin_cmd_send(service, pid, cmd, \ + (admin_cmd_callback_t *)callback, \ + TRUE ? context : CALLBACK_TYPECHECK(callback, \ + void (*)(const char *, const char *, \ + typeof(context)))) + + #endif diff --git a/src/anvil/main.c b/src/anvil/main.c index c49602c32f..4169027c38 100644 --- a/src/anvil/main.c +++ b/src/anvil/main.c @@ -25,6 +25,19 @@ bool anvil_restarted; static struct io *log_fdpass_io; static struct admin_client_pool *admin_pool; +#undef admin_cmd_send +void admin_cmd_send(const char *service, pid_t pid, const char *cmd, + admin_cmd_callback_t *callback, void *context) +{ + struct anvil_connection *conn = anvil_connection_find(service, pid); + if (conn != NULL) { + anvil_connection_send_cmd(conn, cmd, callback, context); + return; + } + admin_client_pool_send_cmd(admin_pool, service, pid, cmd, + callback, context); +} + static void client_connected(struct master_service_connection *conn) { bool master = conn->listen_fd == MASTER_LISTEN_FD_FIRST;