/* SPDX-License-Identifier: GPL-2.0 */ #ifndef foorconprotocolhfoo #define foorconprotocolhfoo #include #include /* clang-format off */ #define RCON_PACKET_LOGIN_FAIL_ID -1 enum rcon_packet_type { RCON_PACKET_LOGIN = 3, RCON_PACKET_LOGIN_RESPONSE = 2, RCON_PACKET_COMMAND = 2, RCON_PACKET_RESPONSE = 0, }; /* clang-format on */ #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_verify_response(int32_t id_sent, int32_t id_recv, enum rcon_packet_type t_sent, enum rcon_packet_type t_recv, const char **error); 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