summaryrefslogtreecommitdiff
path: root/minecproxy/server.h
diff options
context:
space:
mode:
Diffstat (limited to 'minecproxy/server.h')
-rw-r--r--minecproxy/server.h128
1 files changed, 128 insertions, 0 deletions
diff --git a/minecproxy/server.h b/minecproxy/server.h
new file mode 100644
index 0000000..ff4c28e
--- /dev/null
+++ b/minecproxy/server.h
@@ -0,0 +1,128 @@
+#ifndef fooserverhfoo
+#define fooserverhfoo
+
+enum server_state {
+ SERVER_STATE_INIT = 0,
+ SERVER_STATE_CFG_OK = 1,
+ SERVER_STATE_RUNNING = 2,
+ SERVER_STATE_STOPPED = 3,
+ SERVER_STATE_DEAD = 4,
+};
+
+enum server_type {
+ SERVER_TYPE_UNDEFINED,
+ SERVER_TYPE_ANNOUNCE,
+ SERVER_TYPE_PROXY,
+};
+
+enum server_stop_method {
+ SERVER_STOP_METHOD_UNDEFINED,
+ SERVER_STOP_METHOD_RCON,
+ SERVER_STOP_METHOD_SYSTEMD,
+ SERVER_STOP_METHOD_EXEC,
+};
+
+enum server_start_method {
+ SERVER_START_METHOD_UNDEFINED,
+ SERVER_START_METHOD_SYSTEMD,
+ SERVER_START_METHOD_EXEC,
+};
+
+struct server {
+ enum server_type type;
+ char *name;
+ char *pretty_name;
+ uint16_t announce_port;
+ struct list_head locals;
+ struct list_head remotes;
+ struct list_head proxys;
+ struct list_head rcons;
+ struct list_head dnslookups;
+ enum server_state state;
+
+ enum server_stop_method stop_method;
+ enum server_start_method start_method;
+
+ /* For calling external start/stop executables */
+ char *stop_exec;
+ char *start_exec;
+ struct uring_task exec_task;
+
+ /* For systemd services */
+ char *systemd_service;
+ char *systemd_obj;
+
+ /* For rcon connections */
+ char *rcon_password;
+ struct connection rcon_conn;
+ struct uring_task rcon_task;
+ struct uring_task_buf rcon_tbuf;
+
+ /* For announce messages */
+ struct uring_task ann_task;
+ struct uring_task_buf ann_buf;
+
+ /* For checking idle status */
+ struct uring_task idle_task;
+ struct connection idle_conn;
+ struct uring_task_buf idle_buf;
+ unsigned idle_timeout;
+ unsigned idle_count;
+
+ /* For reading config files */
+ struct uring_task task;
+ struct uring_task_buf tbuf;
+
+ struct list_head list;
+};
+
+void server_refdump(struct server *server);
+
+void server_delete(struct server *server);
+
+void server_delete_by_name(const char *name);
+
+bool server_start(struct server *server);
+
+bool server_stop(struct server *server);
+
+void server_set_active_players(struct server *server, int count);
+
+bool server_idle_check(struct server *server);
+
+bool server_announce(struct server *server, int fd);
+
+bool server_commit(struct server *server);
+
+bool server_add_remote(struct server *server, struct saddr *remote);
+
+bool server_add_local(struct server *server, struct saddr *saddr);
+
+bool server_add_rcon(struct server *server, struct saddr *rcon);
+
+bool server_set_rcon_password(struct server *server, const char *password);
+
+bool server_set_systemd_service(struct server *server, const char *service);
+
+bool server_set_stop_method(struct server *server,
+ enum server_stop_method stop_method);
+
+bool server_set_start_method(struct server *server,
+ enum server_start_method start_method);
+
+bool server_set_stop_exec(struct server *server, const char *cmd);
+
+bool server_set_start_exec(struct server *server, const char *cmd);
+
+bool server_set_idle_timeout(struct server *server, uint16_t timeout);
+
+bool server_set_port(struct server *server, uint16_t port);
+
+bool server_set_type(struct server *server, enum server_type type);
+
+bool server_set_pretty_name(struct server *server, const char *pretty_name);
+
+struct server *server_new(const char *name);
+
+#endif
+