summaryrefslogtreecommitdiff
path: root/rcon.c
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-22 10:50:15 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-22 10:50:15 +0200
commit31afd2aaaeb76a12e232eab0fb6a550b73948737 (patch)
tree7125a54d09904eef6c558a682cff0a7976529fad /rcon.c
parent41dc97f5d0dbcfe4399656c9aabb597f6366ca23 (diff)
Make struct cfg global and make the corresponding changes throughout
Diffstat (limited to 'rcon.c')
-rw-r--r--rcon.c125
1 files changed, 62 insertions, 63 deletions
diff --git a/rcon.c b/rcon.c
index dc29364..0588da0 100644
--- a/rcon.c
+++ b/rcon.c
@@ -22,36 +22,6 @@ struct rcon {
struct uring_task_buf tbuf;
};
-static void
-rcon_free(struct uring_task *task)
-{
- struct rcon *rcon = container_of(task, struct rcon, task);
-
- assert_return(task);
-
- debug(DBG_RCON, "task %p, idle %p", task, rcon);
- rcon->server->rcon = NULL;
- xfree(rcon);
-}
-
-void
-rcon_refdump(struct rcon *rcon)
-{
- assert_return_silent(rcon);
-
- uring_task_refdump(&rcon->task);
-}
-
-void
-rcon_delete(struct cfg *cfg, struct server *server)
-{
- assert_return_silent(server->rcon);
-
- debug(DBG_RCON, "closing fd %i", server->rcon->task.fd);
- uring_task_destroy(cfg, &server->rcon->task);
- server->rcon = NULL;
-}
-
static int32_t
read_int(char **pos, size_t *len)
{
@@ -134,12 +104,12 @@ enum rcon_packet_type {
};
static void
-create_packet(struct cfg *cfg, struct rcon *rcon, int32_t reqid,
+create_packet(struct rcon *rcon, int32_t reqid,
enum rcon_packet_type type, const char *msg)
{
char *pos;
- assert_return(cfg && rcon && !empty_str(msg));
+ assert_return(rcon && !empty_str(msg));
/* Body */
pos = &rcon->tbuf.buf[4];
@@ -159,13 +129,13 @@ create_packet(struct cfg *cfg, struct rcon *rcon, int32_t reqid,
}
static int
-packet_complete(struct cfg *cfg, struct uring_task *task, int res)
+packet_complete(struct uring_task *task, int res)
{
char *pos;
size_t len;
int32_t plen;
- assert_return(cfg && task, 0);
+ assert_return(task, 0);
assert_task_alive_or(DBG_RCON, task, return -EINTR);
pos = task->tbuf->buf;
@@ -184,14 +154,14 @@ packet_complete(struct cfg *cfg, struct uring_task *task, int res)
}
static bool
-rcon_read_packet(struct cfg *cfg, struct rcon *rcon, int32_t *id,
+rcon_read_packet(struct rcon *rcon, int32_t *id,
int32_t *type, char **rmsg)
{
char *pos;
size_t len;
int32_t plen;
- assert_return(cfg && rcon && id && type && rmsg, false);
+ assert_return(rcon && id && type && rmsg, false);
pos = rcon->tbuf.buf;
len = rcon->tbuf.len;
@@ -229,14 +199,14 @@ rcon_read_packet(struct cfg *cfg, struct rcon *rcon, int32_t *id,
}
static void
-rcon_stop_reply(struct cfg *cfg, struct uring_task *task, int res)
+rcon_stop_reply(struct uring_task *task, int res)
{
struct rcon *rcon = container_of(task, struct rcon, task);
int32_t id;
int32_t type;
char *msg;
- assert_return(cfg && task);
+ assert_return(task);
assert_task_alive(DBG_RCON, task);
if (res < 0) {
@@ -245,7 +215,7 @@ rcon_stop_reply(struct cfg *cfg, struct uring_task *task, int res)
}
debug(DBG_RCON, "packet complete");
- rcon_read_packet(cfg, rcon, &id, &type, &msg);
+ rcon_read_packet(rcon, &id, &type, &msg);
if (id != 2) {
error("rcon stop failed - reply id (%" PRIi32 ")", id);
@@ -258,36 +228,36 @@ rcon_stop_reply(struct cfg *cfg, struct uring_task *task, int res)
verbose("rcon stop successful (%s)", msg);
out:
- uring_task_put(cfg, &rcon->task);
+ uring_task_put(&rcon->task);
}
static void
-rcon_stop_sent(struct cfg *cfg, struct uring_task *task, int res)
+rcon_stop_sent(struct uring_task *task, int res)
{
struct rcon *rcon = container_of(task, struct rcon, task);
- assert_return(cfg && task);
+ assert_return(task);
assert_task_alive(DBG_RCON, task);
if (res < 0) {
debug(DBG_RCON, "res: %i", res);
- uring_task_put(cfg, &rcon->task);
+ uring_task_put(&rcon->task);
return;
}
debug(DBG_RCON, "stop cmd sent");
- uring_tbuf_read_until(cfg, &rcon->task, packet_complete, rcon_stop_reply);
+ uring_tbuf_read_until(&rcon->task, packet_complete, rcon_stop_reply);
}
static void
-rcon_login_reply(struct cfg *cfg, struct uring_task *task, int res)
+rcon_login_reply(struct uring_task *task, int res)
{
struct rcon *rcon = container_of(task, struct rcon, task);
int32_t id;
int32_t type;
char *msg;
- assert_return(cfg && task);
+ assert_return(task);
assert_task_alive(DBG_RCON, task);
if (res < 0) {
@@ -296,7 +266,7 @@ rcon_login_reply(struct cfg *cfg, struct uring_task *task, int res)
}
debug(DBG_RCON, "packet complete");
- rcon_read_packet(cfg, rcon, &id, &type, &msg);
+ rcon_read_packet(rcon, &id, &type, &msg);
if (id != 1) {
error("rcon login failed - unexpected reply id (%" PRIi32 ")", id);
@@ -310,66 +280,95 @@ rcon_login_reply(struct cfg *cfg, struct uring_task *task, int res)
}
debug(DBG_RCON, "rcon login successful");
- create_packet(cfg, rcon, 2, RCON_PACKET_COMMAND, "stop");
- uring_tbuf_write(cfg, &rcon->task, rcon_stop_sent);
+ create_packet(rcon, 2, RCON_PACKET_COMMAND, "stop");
+ uring_tbuf_write(&rcon->task, rcon_stop_sent);
return;
error:
- uring_task_put(cfg, &rcon->task);
+ uring_task_put(&rcon->task);
}
static void
-rcon_login_sent(struct cfg *cfg, struct uring_task *task, int res)
+rcon_login_sent(struct uring_task *task, int res)
{
struct rcon *rcon = container_of(task, struct rcon, task);
- assert_return(cfg && task);
+ assert_return(task);
assert_task_alive(DBG_RCON, task);
if (res < 0) {
debug(DBG_RCON, "res: %i", res);
- uring_task_put(cfg, &rcon->task);
+ uring_task_put(&rcon->task);
return;
}
debug(DBG_RCON, "login sent");
- uring_tbuf_read_until(cfg, &rcon->task, packet_complete, rcon_login_reply);
+ uring_tbuf_read_until(&rcon->task, packet_complete, rcon_login_reply);
}
static void
-rcon_connected_cb(struct cfg *cfg, struct connection *conn, bool connected)
+rcon_connected_cb(struct connection *conn, bool connected)
{
struct rcon *rcon = container_of(conn, struct rcon, conn);
- assert_return(cfg && conn);
+ assert_return(conn);
assert_task_alive(DBG_RCON, &rcon->task);
if (!connected) {
error("rcon connection to remote server (%s) failed",
rcon->server->name);
- uring_task_put(cfg, &rcon->task);
+ uring_task_put(&rcon->task);
return;
}
- create_packet(cfg, rcon, 1, RCON_PACKET_LOGIN, rcon->server->rcon_password);
- uring_tbuf_write(cfg, &rcon->task, rcon_login_sent);
+ create_packet(rcon, 1, RCON_PACKET_LOGIN, rcon->server->rcon_password);
+ uring_tbuf_write(&rcon->task, rcon_login_sent);
+}
+
+static void
+rcon_free(struct uring_task *task)
+{
+ struct rcon *rcon = container_of(task, struct rcon, task);
+
+ assert_return(task);
+
+ debug(DBG_RCON, "task %p, idle %p", task, rcon);
+ xfree(rcon);
+}
+
+void
+rcon_refdump(struct rcon *rcon)
+{
+ assert_return_silent(rcon);
+
+ uring_task_refdump(&rcon->task);
+}
+
+void
+rcon_delete(struct server *server)
+{
+ assert_return_silent(server->rcon);
+
+ debug(DBG_RCON, "closing fd %i", server->rcon->task.fd);
+ uring_task_destroy(&server->rcon->task);
+ server->rcon = NULL;
}
void
-rcon_init(struct cfg *cfg, struct server *server)
+rcon_init(struct server *server)
{
struct rcon *rcon;
- assert_return(cfg && server && !list_empty(&server->rcons) && !empty_str(server->rcon_password));
+ assert_return(server && !server->rcon && !list_empty(&server->rcons) && !empty_str(server->rcon_password));
rcon = zmalloc(sizeof(*rcon));
if (!rcon)
die("malloc: %m");
- uring_task_init(cfg, &rcon->task, "rcon", &server->task, rcon_free);
+ uring_task_init(&rcon->task, "rcon", &server->task, rcon_free);
uring_task_set_buf(&rcon->task, &rcon->tbuf);
rcon->server = server;
server->rcon = rcon;
- connect_any(cfg, &rcon->task, &server->rcons, &rcon->conn, rcon_connected_cb);
+ connect_any(&rcon->task, &server->rcons, &rcon->conn, rcon_connected_cb);
}