summaryrefslogtreecommitdiff
path: root/minecproxy/server-config.c
diff options
context:
space:
mode:
Diffstat (limited to 'minecproxy/server-config.c')
-rw-r--r--minecproxy/server-config.c158
1 files changed, 78 insertions, 80 deletions
diff --git a/minecproxy/server-config.c b/minecproxy/server-config.c
index 92990d3..71463ee 100644
--- a/minecproxy/server-config.c
+++ b/minecproxy/server-config.c
@@ -16,8 +16,8 @@
#include "server-config.h"
#include "server-config-options.h"
-static void
-scfg_dns_cb(struct dns_async *dns, bool (*server_cb)(struct server *, struct saddr *))
+static void scfg_dns_cb(struct dns_async *dns,
+ bool (*server_cb)(struct server *, struct saddr *))
{
struct server *server;
struct sockaddr_in *in4;
@@ -29,8 +29,9 @@ scfg_dns_cb(struct dns_async *dns, bool (*server_cb)(struct server *, struct sad
assert_return(dns && dns->priv && server_cb);
server = dns->priv;
- debug(DBG_DNS, "called, dns: %p, name: %s, server: %p, server->name: %s",
- dns, dns->name, server, server->name);
+ debug(DBG_DNS,
+ "called, dns: %p, name: %s, server: %p, server->name: %s", dns,
+ dns->name, server, server->name);
r = gai_error(&dns->gcb);
if (r == EAI_INPROGRESS) {
@@ -41,8 +42,8 @@ scfg_dns_cb(struct dns_async *dns, bool (*server_cb)(struct server *, struct sad
/* The server must be in the process of going away */
goto out;
} else if (r < 0) {
- error("DNS lookup of %s:%s failed: %s",
- dns->name, dns->port, gai_strerror(r));
+ error("DNS lookup of %s:%s failed: %s", dns->name, dns->port,
+ gai_strerror(r));
goto out;
}
@@ -51,14 +52,16 @@ scfg_dns_cb(struct dns_async *dns, bool (*server_cb)(struct server *, struct sad
for (ai = results; ai; ai = ai->ai_next) {
saddr = zmalloc(sizeof(*saddr));
if (!saddr) {
- error("DNS lookup of %s:%s failed: %m", dns->name, dns->port);
+ error("DNS lookup of %s:%s failed: %m", dns->name,
+ dns->port);
goto out;
}
switch (ai->ai_family) {
case AF_INET:
in4 = (struct sockaddr_in *)ai->ai_addr;
- saddr_set_ipv4(saddr, in4->sin_addr.s_addr, in4->sin_port);
+ saddr_set_ipv4(saddr, in4->sin_addr.s_addr,
+ in4->sin_port);
server_cb(server, saddr);
break;
@@ -84,34 +87,30 @@ out:
server_commit(server);
}
-static void
-scfg_local_dns_cb(struct dns_async *dns)
+static void scfg_local_dns_cb(struct dns_async *dns)
{
assert_return(dns);
scfg_dns_cb(dns, server_add_local);
}
-static void
-scfg_remote_dns_cb(struct dns_async *dns)
+static void scfg_remote_dns_cb(struct dns_async *dns)
{
assert_return(dns);
scfg_dns_cb(dns, server_add_remote);
}
-static void
-scfg_rcon_dns_cb(struct dns_async *dns)
+static void scfg_rcon_dns_cb(struct dns_async *dns)
{
assert_return(dns);
scfg_dns_cb(dns, server_add_rcon);
}
-static bool
-handle_dns(struct server *server, const char *type,
- struct cfg_value *value, dns_cb_t *async_cb,
- bool (*sync_cb)(struct server *, struct saddr *))
+static bool handle_dns(struct server *server, const char *type,
+ struct cfg_value *value, dns_cb_t *async_cb,
+ bool (*sync_cb)(struct server *, struct saddr *))
{
struct saddr *saddr, *tmp;
struct dns_async *dns;
@@ -129,8 +128,8 @@ handle_dns(struct server *server, const char *type,
return true;
case CFG_VAL_TYPE_ASYNC_ADDRS:
- debug(DBG_DNS, "%s: doing async lookup of DNS record: %p",
- type, value->dns_async);
+ debug(DBG_DNS, "%s: doing async lookup of DNS record: %p", type,
+ value->dns_async);
dns = value->dns_async;
dns->cb = async_cb;
@@ -144,8 +143,7 @@ handle_dns(struct server *server, const char *type,
}
}
-static void
-scfg_parse(struct server *server)
+static void scfg_parse(struct server *server)
{
char *pos;
@@ -163,8 +161,8 @@ scfg_parse(struct server *server)
const char *keyname;
struct cfg_value value;
- if (!config_parse_line(server->name, &pos, scfg_key_map,
- &key, &keyname, &value, true))
+ if (!config_parse_line(server->name, &pos, scfg_key_map, &key,
+ &keyname, &value, true))
break;
if (key == SCFG_KEY_INVALID)
@@ -173,13 +171,13 @@ scfg_parse(struct server *server)
debug(DBG_CFG, "%s: key %s", server->name, keyname);
switch (key) {
-
case SCFG_KEY_TYPE:
if (streq(value.str, "proxy")) {
if (!server_set_type(server, SERVER_TYPE_PROXY))
return;
} else if (streq(value.str, "announce")) {
- if (!server_set_type(server, SERVER_TYPE_ANNOUNCE))
+ if (!server_set_type(server,
+ SERVER_TYPE_ANNOUNCE))
return;
}
break;
@@ -213,23 +211,29 @@ scfg_parse(struct server *server)
case SCFG_KEY_STOP_METHOD:
if (streq(value.str, "exec")) {
- if (server_set_stop_method(server, SERVER_STOP_METHOD_EXEC))
+ if (server_set_stop_method(
+ server, SERVER_STOP_METHOD_EXEC))
break;
} else if (streq(value.str, "rcon")) {
- if (server_set_stop_method(server, SERVER_STOP_METHOD_RCON))
+ if (server_set_stop_method(
+ server, SERVER_STOP_METHOD_RCON))
break;
} else if (streq(value.str, "systemd")) {
- if (server_set_stop_method(server, SERVER_STOP_METHOD_SYSTEMD))
+ if (server_set_stop_method(
+ server, SERVER_STOP_METHOD_SYSTEMD))
break;
}
return;
case SCFG_KEY_START_METHOD:
if (streq(value.str, "exec")) {
- if (server_set_start_method(server, SERVER_START_METHOD_EXEC))
+ if (server_set_start_method(
+ server, SERVER_START_METHOD_EXEC))
break;
} else if (streq(value.str, "systemd")) {
- if (server_set_start_method(server, SERVER_START_METHOD_SYSTEMD))
+ if (server_set_start_method(
+ server,
+ SERVER_START_METHOD_SYSTEMD))
break;
}
return;
@@ -267,8 +271,7 @@ scfg_parse(struct server *server)
}
}
-static void
-scfg_read_cb(struct uring_task *task, int res)
+static void scfg_read_cb(struct uring_task *task, int res)
{
struct server *server = container_of(task, struct server, task);
@@ -276,8 +279,8 @@ scfg_read_cb(struct uring_task *task, int res)
assert_task_alive(DBG_CFG, task);
if (res <= 0) {
- error("error reading config file for %s: %s",
- server->name, strerror(-res));
+ error("error reading config file for %s: %s", server->name,
+ strerror(-res));
server_delete(server);
}
@@ -287,8 +290,7 @@ scfg_read_cb(struct uring_task *task, int res)
server_commit(server);
}
-static void
-scfg_open_cb(struct uring_task *task, int res)
+static void scfg_open_cb(struct uring_task *task, int res)
{
struct server *server = container_of(task, struct server, task);
@@ -311,12 +313,10 @@ struct server_cfg_monitor {
char buf[4096] _alignas_(struct inotify_event);
};
-static void
-scfgm_free(struct uring_task *task)
+static void scfgm_free(struct uring_task *task)
{
- struct server_cfg_monitor *scfgm = container_of(task,
- struct server_cfg_monitor,
- task);
+ struct server_cfg_monitor *scfgm =
+ container_of(task, struct server_cfg_monitor, task);
assert_return(task);
@@ -325,8 +325,7 @@ scfgm_free(struct uring_task *task)
cfg->server_cfg_monitor = NULL;
}
-static void
-inotify_event_dump(const struct inotify_event *event)
+static void inotify_event_dump(const struct inotify_event *event)
{
assert_return(event);
@@ -338,42 +337,40 @@ inotify_event_dump(const struct inotify_event *event)
debug(DBG_CFG, " * Mask : %" PRIu32, event->mask);
if (event->mask & IN_ACCESS)
debug(DBG_CFG, "\tIN_ACCESS");
- else if(event->mask & IN_MODIFY)
+ else if (event->mask & IN_MODIFY)
debug(DBG_CFG, "\tIN_MODIFY");
- else if(event->mask & IN_ATTRIB)
+ else if (event->mask & IN_ATTRIB)
debug(DBG_CFG, "\tIN_ATTRIB");
- else if(event->mask & IN_CLOSE_WRITE)
+ else if (event->mask & IN_CLOSE_WRITE)
debug(DBG_CFG, "\tIN_CLOSE_WRITE");
- else if(event->mask & IN_CLOSE_NOWRITE)
+ else if (event->mask & IN_CLOSE_NOWRITE)
debug(DBG_CFG, "\tIN_CLOSE_NOWRITE");
- else if(event->mask & IN_OPEN)
+ else if (event->mask & IN_OPEN)
debug(DBG_CFG, "\tIN_OPEN");
- else if(event->mask & IN_MOVED_FROM)
+ else if (event->mask & IN_MOVED_FROM)
debug(DBG_CFG, "\tIN_MOVED_FROM");
- else if(event->mask & IN_MOVED_TO)
+ else if (event->mask & IN_MOVED_TO)
debug(DBG_CFG, "\tIN_MOVED_TO");
- else if(event->mask & IN_CREATE)
+ else if (event->mask & IN_CREATE)
debug(DBG_CFG, "\tIN_CREATE");
- else if(event->mask & IN_DELETE)
+ else if (event->mask & IN_DELETE)
debug(DBG_CFG, "\tIN_DELETE");
- else if(event->mask & IN_DELETE_SELF)
+ else if (event->mask & IN_DELETE_SELF)
debug(DBG_CFG, "\tIN_DELETE_SELF");
- else if(event->mask & IN_MOVE_SELF)
+ else if (event->mask & IN_MOVE_SELF)
debug(DBG_CFG, "\tIN_MOVE_SELF");
- else if(event->mask & IN_UNMOUNT)
+ else if (event->mask & IN_UNMOUNT)
debug(DBG_CFG, "\tIN_UNMOUNT");
- else if(event->mask & IN_Q_OVERFLOW)
+ else if (event->mask & IN_Q_OVERFLOW)
debug(DBG_CFG, "\tIN_Q_OVERFLOW");
- else if(event->mask & IN_IGNORED)
+ else if (event->mask & IN_IGNORED)
debug(DBG_CFG, "\tIN_IGNORED");
}
-static void
-inotify_cb(struct uring_task *task, int res)
+static void inotify_cb(struct uring_task *task, int res)
{
- struct server_cfg_monitor *scfgm = container_of(task,
- struct server_cfg_monitor,
- task);
+ struct server_cfg_monitor *scfgm =
+ container_of(task, struct server_cfg_monitor, task);
const struct inotify_event *event;
char *ptr;
struct server *server;
@@ -386,13 +383,15 @@ inotify_cb(struct uring_task *task, int res)
return;
}
- for (ptr = scfgm->buf; ptr < scfgm->buf + res; ptr += sizeof(struct inotify_event) + event->len) {
+ for (ptr = scfgm->buf; ptr < scfgm->buf + res;
+ ptr += sizeof(struct inotify_event) + event->len) {
event = (const struct inotify_event *)ptr;
if (debug_enabled(DBG_CFG))
inotify_event_dump(event);
- if (event->mask & (IN_IGNORED | IN_MOVE_SELF | IN_DELETE_SELF | IN_UNMOUNT))
+ if (event->mask &
+ (IN_IGNORED | IN_MOVE_SELF | IN_DELETE_SELF | IN_UNMOUNT))
die("configuration directory gone, exiting");
if (event->mask & IN_Q_OVERFLOW) {
@@ -405,9 +404,11 @@ inotify_cb(struct uring_task *task, int res)
if (event->mask & (IN_MOVED_FROM | IN_DELETE))
server_delete_by_name(event->name);
- else if (event->mask & (IN_MOVED_TO | IN_CREATE | IN_CLOSE_WRITE)) {
+ else if (event->mask &
+ (IN_MOVED_TO | IN_CREATE | IN_CLOSE_WRITE)) {
server = server_new(event->name);
- verbose("New server config file detected: %s", server->name);
+ verbose("New server config file detected: %s",
+ server->name);
uring_openat(&server->task, server->name, scfg_open_cb);
} else
error("inotify: unknown event: 0x%08x", event->mask);
@@ -416,16 +417,14 @@ inotify_cb(struct uring_task *task, int res)
uring_read(&scfgm->task, scfgm->buf, sizeof(scfgm->buf), inotify_cb);
}
-void
-server_cfg_monitor_refdump()
+void server_cfg_monitor_refdump()
{
assert_return_silent(cfg->server_cfg_monitor);
uring_task_refdump(&cfg->server_cfg_monitor->task);
}
-void
-server_cfg_monitor_delete()
+void server_cfg_monitor_delete()
{
assert_return(cfg->server_cfg_monitor);
@@ -434,8 +433,7 @@ server_cfg_monitor_delete()
cfg->server_cfg_monitor = NULL;
}
-void
-server_cfg_monitor_init()
+void server_cfg_monitor_init()
{
int ifd;
int iwd;
@@ -455,15 +453,16 @@ server_cfg_monitor_init()
die("inotify_init1: %m");
/* ln = IN_CREATE, cp/vi/mv = IN_CREATE, IN_OPEN, IN_CLOSE_WRITE */
- iwd = inotify_add_watch(ifd, ".",
- IN_CLOSE_WRITE | IN_DELETE | IN_CREATE |
- IN_DELETE_SELF | IN_MOVE_SELF | IN_MOVED_TO |
- IN_MOVED_FROM | IN_DONT_FOLLOW |
- IN_EXCL_UNLINK | IN_ONLYDIR );
+ iwd = inotify_add_watch(
+ ifd, ".",
+ IN_CLOSE_WRITE | IN_DELETE | IN_CREATE | IN_DELETE_SELF |
+ IN_MOVE_SELF | IN_MOVED_TO | IN_MOVED_FROM |
+ IN_DONT_FOLLOW | IN_EXCL_UNLINK | IN_ONLYDIR);
if (iwd < 0)
die("inotify_add_watch: %m");
- uring_task_init(&scfgm->task, "server-config-monitor", uring_parent(), scfgm_free);
+ uring_task_init(&scfgm->task, "server-config-monitor", uring_parent(),
+ scfgm_free);
uring_task_set_fd(&scfgm->task, ifd);
cfg->server_cfg_monitor = scfgm;
uring_read(&scfgm->task, scfgm->buf, sizeof(scfgm->buf), inotify_cb);
@@ -483,4 +482,3 @@ server_cfg_monitor_init()
closedir(dir);
}
-