summaryrefslogtreecommitdiff
path: root/cfgdir.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-09 20:51:44 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-09 20:51:44 +0200
commit09f1abfe18258807c412bce88ad459984add0cd3 (patch)
treeccbd07eabfb4c1a08de912d2dd0d09678cca090f /cfgdir.c
parent5fd0055aee5124b9ad6573e5ed363d5bf63bcf80 (diff)
Add an rcon shutdown method
Diffstat (limited to 'cfgdir.c')
-rw-r--r--cfgdir.c30
1 files changed, 28 insertions, 2 deletions
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,
*/
};
@@ -79,6 +79,14 @@ struct cfg_key_value_map scfg_key_map[] = {
.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,
.value_type = CFG_VAL_TYPE_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;