diff options
Diffstat (limited to 'minecproxy/server-config.c')
-rw-r--r-- | minecproxy/server-config.c | 158 |
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); } - |