summaryrefslogtreecommitdiff
path: root/minecproxy/main.h
diff options
context:
space:
mode:
authorDavid Härdeman <david@hardeman.nu>2020-06-23 20:56:22 +0200
committerDavid Härdeman <david@hardeman.nu>2020-06-23 20:56:22 +0200
commitea053d96f7e89e053d4af8d39b04c5428760345f (patch)
tree8182ca73675ad3933b0f38cb48a99c69101309b4 /minecproxy/main.h
parent8c27290245b7bcc7cd2f72f3b4a7562294b43bbe (diff)
Big renaming, move some more functionality to shared lib
Diffstat (limited to 'minecproxy/main.h')
-rw-r--r--minecproxy/main.h107
1 files changed, 107 insertions, 0 deletions
diff --git a/minecproxy/main.h b/minecproxy/main.h
new file mode 100644
index 0000000..f1f5df2
--- /dev/null
+++ b/minecproxy/main.h
@@ -0,0 +1,107 @@
+#ifndef foomainhfoo
+#define foomainhfoo
+
+#include <sys/socket.h>
+#include <netinet/ip.h>
+
+struct cfg;
+struct uring_task;
+
+#include "misc.h"
+#include "utils.h"
+
+extern struct cfg *cfg;
+extern bool exiting;
+
+/*
+enum debug_lvl {
+ DBG_ERROR = (0x1 << 1),
+ DBG_INFO = (0x1 << 2),
+ DBG_VERBOSE = (0x1 << 3),
+ DBG_CFG = (0x1 << 4),
+ DBG_REF = (0x1 << 5),
+ DBG_MALLOC = (0x1 << 6),
+ DBG_ANN = (0x1 << 7),
+ DBG_SIG = (0x1 << 8),
+ DBG_UR = (0x1 << 9),
+ DBG_SRV = (0x1 << 10),
+ DBG_PROXY = (0x1 << 11),
+ DBG_RCON = (0x1 << 12),
+ DBG_IDLE = (0x1 << 13),
+ DBG_IGMP = (0x1 << 14),
+ DBG_SYSD = (0x1 << 15),
+ DBG_DNS = (0x1 << 16),
+ DBG_TIMER = (0x1 << 17),
+};
+*/
+
+void dump_tree();
+
+/* To save typing in all the function definitions below */
+typedef void (*utask_cb_t)(struct uring_task *, int res);
+typedef int (*rutask_cb_t)(struct uring_task *, int res);
+
+struct uring_task_buf {
+ char buf[4096];
+ size_t len;
+ size_t done;
+ struct iovec iov;
+ struct msghdr msg;
+};
+
+struct uring_task {
+ const char *name;
+ unsigned refcount;
+ int fd;
+ struct uring_task *parent;
+ void (*free)(struct uring_task *);
+ bool dead;
+ struct uring_task_buf *tbuf;
+
+ /* called once or repeatedly until is_complete_cb is satisfied */
+ utask_cb_t cb;
+
+ /* returns: 0 = not complete; < 0 = error; > 0 = complete */
+ rutask_cb_t is_complete_cb;
+
+ /* called once tbuf processing is done */
+ utask_cb_t final_cb;
+
+ /* used for recvmsg/sendmsg */
+ struct saddr saddr;
+ void *priv;
+};
+
+struct cfg {
+ /* Options */
+ uid_t uid;
+ gid_t gid;
+ const char *cfg_dir;
+ const char *cfg_file;
+ bool do_igmp;
+ char *igmp_iface;
+ bool splice_supported;
+ uint16_t announce_interval;
+ uint16_t proxy_connection_interval;
+ uint16_t proxy_connection_attempts;
+ bool socket_defer;
+ bool socket_freebind;
+ bool socket_keepalive;
+ bool socket_iptos;
+ bool socket_nodelay;
+
+ /* Bookkeeping */
+ struct uring_ev *uring;
+ struct server_cfg_monitor *server_cfg_monitor;
+ struct signal_ev *signal;
+ struct announce *announce;
+ struct ptimer *ptimer;
+ struct igmp *igmp;
+ struct idle *idle;
+ struct sd_bus *sd_bus;
+ bool sd_bus_failed;
+ struct uring_task task;
+ struct list_head servers;
+};
+
+#endif