summaryrefslogtreecommitdiff
path: root/shared/rcon-protocol.h
diff options
context:
space:
mode:
Diffstat (limited to 'shared/rcon-protocol.h')
-rw-r--r--shared/rcon-protocol.h41
1 files changed, 41 insertions, 0 deletions
diff --git a/shared/rcon-protocol.h b/shared/rcon-protocol.h
new file mode 100644
index 0000000..35997c4
--- /dev/null
+++ b/shared/rcon-protocol.h
@@ -0,0 +1,41 @@
+#ifndef foorconprotocolhfoo
+#define foorconprotocolhfoo
+
+#include <stdbool.h>
+#include <stdint.h>
+
+enum rcon_packet_type {
+ RCON_PACKET_LOGIN = 3,
+ RCON_PACKET_LOGIN_OK = 2,
+ RCON_PACKET_LOGIN_FAIL = -1,
+ RCON_PACKET_COMMAND = 2,
+ RCON_PACKET_RESPONSE = 0,
+};
+
+#define RCON_INT_LEN 4
+
+#define RCON_END_LEN 2
+
+#define RCON_HDR_LEN 4
+
+/* header + reqid + type + end */
+#define RCON_PKT_MIN_LEN (RCON_HDR_LEN + 2 * RCON_INT_LEN + RCON_END_LEN)
+
+static inline size_t
+rcon_protocol_packet_len(size_t msglen)
+{
+ /* header + reqid + type + msg + end */
+ return (RCON_PKT_MIN_LEN + msglen);
+}
+
+bool rcon_protocol_create_packet(char *buf, size_t len, size_t *rlen,
+ int32_t reqid, enum rcon_packet_type type,
+ const char *msg);
+
+int32_t rcon_protocol_packet_complete(const char *buf, size_t len);
+
+bool rcon_protocol_read_packet(const char *buf, size_t len, int32_t *id,
+ int32_t *type, const char **rmsg,
+ const char **error);
+
+#endif