summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--idle.c91
-rw-r--r--main.c3
-rw-r--r--main.h1
3 files changed, 51 insertions, 44 deletions
diff --git a/idle.c b/idle.c
index 006c8d2..6dda006 100644
--- a/idle.c
+++ b/idle.c
@@ -30,7 +30,7 @@ idle_check_free(struct uring_task *task)
{
struct idle *idle = container_of(task, struct idle, idlecheck);
- fprintf(stderr, "%s: called with task 0x%p and idle 0x%p\n", __func__, task, idle);
+ debug(DBG_IDLE, "task %p, idle %p\n", task, idle);
}
static inline void
@@ -126,22 +126,22 @@ idle_check_handshake_complete(struct cfg *cfg, struct uring_task *task, int res)
r = read_varint(&pos, &remain, &mclen);
if (r < 0) {
- fprintf(stderr, "Failed to parse message length\n");
+ error("failed to parse message length\n");
return -EINVAL;
} else if (r == 0) {
return 0;
} else if (mclen < 2) {
- fprintf(stderr, "Short MC message\n");
+ error("short MC message\n");
return -EINVAL;
}
- fprintf(stderr, "MC message len: %" PRIi32 "\n", mclen);
- fprintf(stderr, "Remain: %zu\n", remain);
-
- if (mclen < remain)
+ if (mclen < remain) {
+ debug(DBG_IDLE, "short MC message - len: %" PRIi32 ", remain: %zu\n",
+ mclen, remain);
return 0;
+ }
- fprintf(stderr, "Complete message\n");
+ debug(DBG_IDLE, "Complete message\n");
return 1;
}
@@ -163,7 +163,7 @@ get_player_count(struct cfg *cfg, const char *pos, size_t remain)
online = memmem(pos, remain, ONLINE_NEEDLE, strlen(ONLINE_NEEDLE));
if (!online) {
- fprintf(stderr, "Could not find online count in JSON\n");
+ error("could not find online count in JSON\n");
return -1;
}
@@ -171,13 +171,13 @@ get_player_count(struct cfg *cfg, const char *pos, size_t remain)
end = memchr(online, '}', remain);
if (!end) {
- fprintf(stderr, "Could not parse JSON (no end)\n");
+ error("could not parse JSON (no end)\n");
return -1;
}
*end = '\0';
if (sscanf(online, ONLINE_NEEDLE " : %u", &count) != 1) {
- fprintf(stderr, "Could not parse JSON (online count)\n");
+ error("could not parse JSON (online count)\n");
return -1;
}
@@ -195,7 +195,7 @@ idle_check_handshake_reply(struct cfg *cfg, struct uring_task *task, int res)
int player_count;
int r;
- fprintf(stderr, "%s: received %i bytes\n", __func__, res);
+ debug(DBG_IDLE, "res: %i\n", res);
if (res < 0)
goto out;
@@ -212,15 +212,15 @@ idle_check_handshake_reply(struct cfg *cfg, struct uring_task *task, int res)
r = read_varint(&pos, &remain, &mclen);
if (r <= 0 || mclen < 2 || mclen < remain) {
/* Should not happen since the msg has been checked already */
- fprintf(stderr, "Invalid message\n");
+ error("invalid message\n");
goto out;
}
- fprintf(stderr, "%s: MC message len: %" PRIi32 "\n", __func__, mclen);
- fprintf(stderr, "%s: Remain: %zu\n", __func__, remain);
+ debug(DBG_IDLE, "MC message - len: %" PRIi32 ", remain: %zu\n",
+ mclen, remain);
if (*pos != MC_STATUS_REPLY) {
- fprintf(stderr, "Unknown server reply\n");
+ error("unknown server reply (0x%02hhx)\n", *pos);
goto out;
}
@@ -229,36 +229,40 @@ idle_check_handshake_reply(struct cfg *cfg, struct uring_task *task, int res)
r = read_varint(&pos, &remain, &jsonlen);
if (r <= 0) {
- fprintf(stderr, "Could not read JSON length\n");
+ error("could not read JSON length\n");
goto out;
}
- fprintf(stderr, "MC json len: %" PRIi32 "\n", jsonlen);
- fprintf(stderr, "Remain: %zu\n", remain);
+ debug(DBG_IDLE, "MC - json len: %" PRIi32 ", remain: %zu\n",
+ jsonlen, remain);
if (jsonlen < remain) {
- fprintf(stderr, "Invalid JSON length\n");
+ error("invalid JSON length\n");
goto out;
}
+ /*
fprintf(stderr, "JSON: ");
for (int i = 0; i < jsonlen; i++)
fprintf(stderr, "%c", pos[i]);
fprintf(stderr, "\n");
+ */
player_count = get_player_count(cfg, pos, remain);
- fprintf(stderr, "We have %i players\n", player_count);
-
if (player_count < 0)
goto out;
- else if (player_count > 0)
+
+ debug(DBG_IDLE, "%s: currently %i active players\n",
+ idle->server->name, player_count);
+
+ if (player_count > 0)
idle->server->idle_count = 0;
- else {
+ else if (player_count == 0)
idle->server->idle_count++;
- if (idle->server->idle_count > idle->server->idle_timeout) {
- fprintf(stderr, "Stopping idle server %s\n", idle->server->name);
- server_stop(cfg, idle->server);
- }
+
+ if (idle->server->idle_count > idle->server->idle_timeout) {
+ verbose("stopping idle server %s\n", idle->server->name);
+ server_stop(cfg, idle->server);
}
out:
@@ -271,13 +275,15 @@ idle_check_handshake_sent(struct cfg *cfg, struct uring_task *task, int res)
{
struct idle *idle = container_of(task, struct idle, idlecheck);
- fprintf(stderr, "%s: sent %i bytes\n", __func__, res);
+ debug(DBG_IDLE, "sent %i bytes\n", res);
if (res < 0) {
uring_task_close_fd(cfg, task);
return;
}
- uring_tbuf_read_until(cfg, &idle->idlecheck, idle_check_handshake_complete, idle_check_handshake_reply);
+ uring_tbuf_read_until(cfg, &idle->idlecheck,
+ idle_check_handshake_complete,
+ idle_check_handshake_reply);
}
static void
@@ -291,13 +297,13 @@ idle_check_connected_cb(struct cfg *cfg, struct connection *conn, bool connected
char hostname[INET6_ADDRSTRLEN];
if (!connected) {
- fprintf(stderr, "%s: idle check connection to remote server failed\n",
- idle->server->name);
+ error("idle check connection to remote server (%s) failed\n",
+ idle->server->name);
idle->server->idle_count = 0;
return;
}
- fprintf(stderr, "%s: connected to remote %s\n", __func__, idle->conn.remotestr);
+ debug(DBG_IDLE, "connected to remote %s\n", idle->conn.remotestr);
port = sockaddr_port(&conn->remote);
sockaddr_addr(&conn->remote, hostname, sizeof(hostname));
@@ -317,10 +323,7 @@ idle_check_connected_cb(struct cfg *cfg, struct connection *conn, bool connected
write_cmd(&cmdbuf, buf, pos);
idle->tbuf.len = (cmdbuf - idle->tbuf.buf);
- fprintf(stderr, "Sending MC message (%zu bytes):\n", idle->tbuf.len);
- for (pos = idle->tbuf.buf; pos < cmdbuf; pos++)
- fprintf(stderr, "0x%02hhx ", *pos);
- fprintf(stderr, "\n");
+ debug(DBG_IDLE, "sending MC message (%zu bytes)\n", idle->tbuf.len);
uring_tbuf_write(cfg, &idle->idlecheck, idle_check_handshake_sent);
}
@@ -330,17 +333,17 @@ idle_cb(struct cfg *cfg, struct uring_task *task, int res)
{
struct idle *idle = container_of(task, struct idle, task);
- fprintf(stderr, "%s: ret is %i (ref %u)\n", __func__, res, task->refcount);
-
if (task->dead) {
- fprintf(stderr, "%s: task is dead\n", __func__);
+ debug(DBG_IDLE, "task is dead\n");
return;
}
- if (res != sizeof(idle->value))
+ if (res != sizeof(idle->value)) {
+ error("timerfd_read returned %i\n", res);
perrordie("timerfd_read");
+ }
- fprintf(stderr, "%s: called with value %" PRIu64 "\n", __func__, idle->value);
+ debug(DBG_IDLE, "timer fired (value: %" PRIu64 ")\n", idle->value);
if (!list_empty(&idle->server->proxys))
idle->server->idle_count = 0;
@@ -356,7 +359,7 @@ idle_free(struct uring_task *task)
{
struct idle *idle = container_of(task, struct idle, task);
- fprintf(stderr, "%s: called with task %p and idle %p\n", __func__, task, idle);
+ debug(DBG_IDLE, "task %p, idle %p\n", task, idle);
xfree(idle);
}
@@ -378,7 +381,7 @@ idle_delete(struct cfg *cfg, struct server *server)
if (!idle)
return;
- fprintf(stderr, "%s called, closing fd %i\n", __func__, idle->task.fd);
+ debug(DBG_IDLE, "closing fd %i\n", idle->task.fd);
uring_task_destroy(cfg, &idle->idlecheck);
uring_task_destroy(cfg, &idle->task);
server->idle = NULL;
diff --git a/main.c b/main.c
index e51ab8b..0fa4ea8 100644
--- a/main.c
+++ b/main.c
@@ -110,6 +110,9 @@ const struct {
.name = "rcon",
.val = DBG_RCON
},{
+ .name = "idle",
+ .val = DBG_IDLE
+ },{
.name = NULL,
.val = 0
}
diff --git a/main.h b/main.h
index f557523..20fc231 100644
--- a/main.h
+++ b/main.h
@@ -25,6 +25,7 @@ enum debug_category {
DBG_SRV = (0x1 << 9),
DBG_PROXY = (0x1 << 10),
DBG_RCON = (0x1 << 11),
+ DBG_IDLE = (0x1 << 12),
};
static inline bool