From 09f1abfe18258807c412bce88ad459984add0cd3 Mon Sep 17 00:00:00 2001 From: David Härdeman Date: Tue, 9 Jun 2020 20:51:44 +0200 Subject: Add an rcon shutdown method --- cfgdir.c | 30 ++++++++++++++++++++++++++++-- 1 file changed, 28 insertions(+), 2 deletions(-) (limited to 'cfgdir.c') diff --git a/cfgdir.c b/cfgdir.c index f529cbe..f961011 100644 --- a/cfgdir.c +++ b/cfgdir.c @@ -30,10 +30,10 @@ enum scfg_keys { SCFG_KEY_START_METHOD, SCFG_KEY_STOP_EXEC, SCFG_KEY_START_EXEC, - /* - SCFG_KEY_SYSTEMD_SERVICE, SCFG_KEY_RCON, SCFG_KEY_RCON_PASSWORD, + /* + SCFG_KEY_SYSTEMD_SERVICE, */ }; @@ -78,6 +78,14 @@ struct cfg_key_value_map scfg_key_map[] = { .key_name = "start_exec", .key_value = SCFG_KEY_START_EXEC, .value_type = CFG_VAL_TYPE_STRING, + }, { + .key_name = "rcon", + .key_value = SCFG_KEY_RCON, + .value_type = CFG_VAL_TYPE_ADDRS, + }, { + .key_name = "rcon_password", + .key_value = SCFG_KEY_RCON_PASSWORD, + .value_type = CFG_VAL_TYPE_STRING, }, { .key_name = NULL, .key_value = SCFG_KEY_INVALID, @@ -155,6 +163,9 @@ scfg_parse(struct cfg *cfg, struct server *scfg) if (!strcmp(value.str, "exec")) { if (server_set_stop_method(cfg, scfg, SERVER_STOP_METHOD_EXEC)) break; + } else if (!strcmp(value.str, "rcon")) { + if (server_set_stop_method(cfg, scfg, SERVER_STOP_METHOD_RCON)) + break; } return; @@ -175,6 +186,21 @@ scfg_parse(struct cfg *cfg, struct server *scfg) return; break; + case SCFG_KEY_RCON: { + struct sockaddr_in46 *addr, *tmp; + + list_for_each_entry_safe(addr, tmp, &value.addr_list, list) { + list_del(&addr->list); + server_add_rcon(cfg, scfg, addr); + } + break; + } + + case SCFG_KEY_RCON_PASSWORD: + if (!server_set_rcon_password(cfg, scfg, value.str)) + return; + break; + case SCFG_KEY_INVALID: default: break; -- cgit v1.2.3