diff options
author | David Härdeman <david@hardeman.nu> | 2020-06-23 15:19:44 +0200 |
---|---|---|
committer | David Härdeman <david@hardeman.nu> | 2020-06-23 15:19:44 +0200 |
commit | 7a8bee84bd1f41bf349f9077617e20c3560b7c62 (patch) | |
tree | 8877ac5b9699864808e9af7138516ebf4a361519 /rcon-protocol.h | |
parent | a4940279d373dc9b9a5526498e390e31d6a8efec (diff) |
Split out rcon protocol handling to separate file
Diffstat (limited to 'rcon-protocol.h')
-rw-r--r-- | rcon-protocol.h | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/rcon-protocol.h b/rcon-protocol.h new file mode 100644 index 0000000..fd83d79 --- /dev/null +++ b/rcon-protocol.h @@ -0,0 +1,38 @@ +#ifndef foorconprotocolhfoo +#define foorconprotocolhfoo + +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 |