summaryrefslogtreecommitdiff
path: root/minecproxy/server.c
diff options
context:
space:
mode:
Diffstat (limited to 'minecproxy/server.c')
-rw-r--r--minecproxy/server.c71
1 files changed, 27 insertions, 44 deletions
diff --git a/minecproxy/server.c b/minecproxy/server.c
index b1e9b05..7a992d1 100644
--- a/minecproxy/server.c
+++ b/minecproxy/server.c
@@ -46,9 +46,8 @@ static void server_free(struct uring_task *task)
assert_return(task);
- debug(DBG_SRV, "freeing server %s (%p)", server->name, server);
+ debug(DBG_SRV, "freeing server (%p)", server);
list_del(&server->list);
- xfree(server->name);
xfree(server);
}
@@ -59,7 +58,7 @@ void server_delete(struct server *server)
assert_return(server);
- verbose("Removing server %s", server->name);
+ verbose("Removing server %s", server->scfg.name);
server->state = SERVER_STATE_DEAD;
rcon_delete(server);
@@ -101,7 +100,7 @@ static void server_dump(struct server *server)
assert_return(server);
- verbose("Server %s:", server->name);
+ verbose("Server %s:", server->scfg.name);
verbose(" * Filename: %s", server->scfg.filename);
switch (server->scfg.type) {
case SERVER_TYPE_ANNOUNCE:
@@ -225,7 +224,7 @@ static bool server_check_running(struct server *server)
/* FIXME: other methods, rcon? */
if (server->scfg.systemd_service) {
verbose("%s: checking if systemd service is running",
- server->name);
+ server->scfg.name);
if (systemd_service_running(&server->scfg, &error)) {
server->state = SERVER_STATE_RUNNING;
return true;
@@ -246,12 +245,12 @@ bool server_start(struct server *server)
switch (server->scfg.start_method) {
case SERVER_START_METHOD_EXEC:
verbose("Starting server %s via external cmd",
- server->name);
+ server->scfg.name);
return server_exec(server, server->scfg.start_exec);
case SERVER_START_METHOD_SYSTEMD:
verbose("Starting server %s via systemd (%s)",
- server->name,
+ server->scfg.name,
server->scfg.systemd_service);
if (systemd_service_start(&server->scfg)) {
@@ -276,12 +275,12 @@ bool server_stop(struct server *server)
switch (server->scfg.stop_method) {
case SERVER_STOP_METHOD_EXEC:
verbose("Stopping server %s via external cmd",
- server->name);
+ server->scfg.name);
return server_exec(server, server->scfg.stop_exec);
case SERVER_STOP_METHOD_SYSTEMD:
verbose("Stopping server %s via systemd (%s)",
- server->name,
+ server->scfg.name,
server->scfg.systemd_service);
if (systemd_service_stop(&server->scfg)) {
server->state = SERVER_STATE_STOPPED;
@@ -290,7 +289,7 @@ bool server_stop(struct server *server)
return server_check_running(server);
case SERVER_STOP_METHOD_RCON:
- verbose("Stopping server %s via rcon", server->name);
+ verbose("Stopping server %s via rcon", server->scfg.name);
rcon_stop(server);
return true;
@@ -315,7 +314,7 @@ void server_update_active_players(struct server *server, int count)
assert_task_alive(DBG_IDLE, &server->idle_task);
debug(DBG_IDLE, "%s: currently %i active players",
- server->name, count);
+ server->scfg.name, count);
if (count < 0)
return;
@@ -327,7 +326,7 @@ void server_update_active_players(struct server *server, int count)
server->idle_count++;
if (server->idle_count > server->scfg.idle_timeout) {
- verbose("stopping idle server %s", server->name);
+ verbose("stopping idle server %s", server->scfg.name);
server_stop(server);
}
}
@@ -342,7 +341,7 @@ static void server_idle_connected_cb(struct connection *conn, bool connected)
if (!connected) {
debug(DBG_IDLE,
"idle check connection to remote server (%s) failed",
- server->name);
+ server->scfg.name);
server->idle_count = 0;
server->state = SERVER_STATE_STOPPED;
return;
@@ -390,11 +389,11 @@ static void server_announce_cb(struct uring_task *task, int res)
assert_return(task);
if (res < 0)
- error("%s: failure %i", server->name, res);
+ error("%s: failure %i", server->scfg.name, res);
else if (res == server->ann_buf.len)
- debug(DBG_ANN, "%s: ok (%i)", server->name, res);
+ debug(DBG_ANN, "%s: ok (%i)", server->scfg.name, res);
else
- debug(DBG_ANN, "%s: unexpected result: %i", server->name, res);
+ debug(DBG_ANN, "%s: unexpected result: %i", server->scfg.name, res);
uring_task_set_fd(&server->ann_task, -1);
}
@@ -410,7 +409,7 @@ bool server_announce(struct server *server, int fd)
server->state != SERVER_STATE_RUNNING))
return false;
- debug(DBG_ANN, "announcing server: %s", server->name);
+ debug(DBG_ANN, "announcing server: %s", server->scfg.name);
uring_task_set_fd(&server->ann_task, fd);
uring_tbuf_sendmsg(&server->ann_task, server_announce_cb);
return true;
@@ -422,12 +421,12 @@ bool server_commit(struct server *server)
struct saddr *saddr, *tmp;
int r;
- assert_return(server && server->name, false);
+ assert_return(server && server->scfg.name, false);
assert_task_alive_or(DBG_SRV, &server->task, return false);
if (!list_empty(&server->scfg.dnslookups)) {
debug(DBG_SRV, "%s: called with pending DNS requests",
- server->name);
+ server->scfg.name);
return false;
}
@@ -437,23 +436,23 @@ bool server_commit(struct server *server)
}
if (!list_empty(&server->proxys)) {
- error("%s: proxys not empty?", server->name);
+ error("%s: proxys not empty?", server->scfg.name);
return false;
}
if (!scfg_validate(&server->scfg, &error)) {
error("%s: failed to validate config file (%s)",
- server->name, error);
+ server->scfg.name, error);
server_delete(server);
return false;
}
r = snprintf(server->ann_buf.buf, sizeof(server->ann_buf.buf),
"[MOTD]%s[/MOTD][AD]%" PRIu16 "[/AD]",
- server->scfg.pretty_name ? server->scfg.pretty_name : server->name,
+ server->scfg.pretty_name ? server->scfg.pretty_name : server->scfg.name,
server->scfg.announce_port);
if (r < 1 || r >= sizeof(server->ann_buf.buf)) {
- error("%s: unable to create announce msg: %i\n", server->name,
+ error("%s: unable to create announce msg: %i\n", server->scfg.name,
r);
return false;
}
@@ -469,14 +468,14 @@ bool server_commit(struct server *server)
local = local_new(server, saddr);
if (!local) {
error("%s: failed to create local listener",
- server->name);
+ server->scfg.name);
server_delete(server);
return false;
}
list_add(&local->list, &server->listenings);
if (!local_open(local)) {
error("%s: failed to open listening port",
- server->name);
+ server->scfg.name);
server_delete(server);
return false;
}
@@ -486,19 +485,18 @@ bool server_commit(struct server *server)
server_check_running(server);
- debug(DBG_SRV, "%s: success", server->name);
+ debug(DBG_SRV, "%s: success", server->scfg.name);
return true;
}
struct server *server_new(const char *filename)
{
struct server *server;
- const char *suffix;
assert_return(!empty_str(filename), NULL);
list_for_each_entry(server, &cfg->servers, list) {
- if (!streq(filename, server->name))
+ if (!streq(filename, server->scfg.filename))
continue;
error("attempt to add duplicate server: %s", filename);
return server;
@@ -511,29 +509,14 @@ struct server *server_new(const char *filename)
return NULL;
}
- suffix = strrchr(filename, '.');
- if (!suffix || suffix == filename) {
- error("invalid filename: %s", filename);
- xfree(server);
- return NULL;
- }
-
- server->name = xstrndup(filename, suffix - filename);
- if (!server->name) {
- error("failed to create server name: %s", filename);
- xfree(server);
- return NULL;
- }
-
if (!scfg_init(&server->scfg, filename)) {
- xfree(server->name);
xfree(server);
return NULL;
}
server->state = SERVER_STATE_INIT;
- uring_task_init(&server->task, server->name, uring_parent(),
+ uring_task_init(&server->task, server->scfg.name, uring_parent(),
server_free);
uring_task_set_buf(&server->task, &server->tbuf);