diff options
-rw-r--r-- | src/cmumble.c | 16 | ||||
-rw-r--r-- | src/message.h | 38 |
2 files changed, 46 insertions, 8 deletions
diff --git a/src/cmumble.c b/src/cmumble.c index ed97ea1..d514ca4 100644 --- a/src/cmumble.c +++ b/src/cmumble.c @@ -198,14 +198,14 @@ static void recv_reject(MumbleProto__Reject *reject, struct cmumble *cm) { switch (reject->type) { - case MUMBLE_PROTO__REJECT__REJECT_TYPE__None: - case MUMBLE_PROTO__REJECT__REJECT_TYPE__WrongVersion: - case MUMBLE_PROTO__REJECT__REJECT_TYPE__InvalidUsername: - case MUMBLE_PROTO__REJECT__REJECT_TYPE__WrongUserPW: - case MUMBLE_PROTO__REJECT__REJECT_TYPE__WrongServerPW: - case MUMBLE_PROTO__REJECT__REJECT_TYPE__UsernameInUse: - case MUMBLE_PROTO__REJECT__REJECT_TYPE__ServerFull: - case MUMBLE_PROTO__REJECT__REJECT_TYPE__NoCertificate: + case MUMBLE_REJECT_TYPE(None): + case MUMBLE_REJECT_TYPE(WrongVersion): + case MUMBLE_REJECT_TYPE(InvalidUsername): + case MUMBLE_REJECT_TYPE(WrongUserPW): + case MUMBLE_REJECT_TYPE(WrongServerPW): + case MUMBLE_REJECT_TYPE(UsernameInUse): + case MUMBLE_REJECT_TYPE(ServerFull): + case MUMBLE_REJECT_TYPE(NoCertificate): g_printerr("Connection rejected: %s\n", reject->reason); break; default: diff --git a/src/message.h b/src/message.h index 0186192..b34bed7 100644 --- a/src/message.h +++ b/src/message.h @@ -10,6 +10,28 @@ enum cmumble_message { #undef MUMBLE_MSG }; +#define PREAMBLE_SIZE 6 +struct mumble_msg_base { + uint8_t preamble[PREAMBLE_SIZE]; +}; + +struct __attribute__ ((__packed__)) mumble_message { + struct mumble_msg_base base; + ProtobufCMessage msg; +}; + +#define MUMBLE_MSG(cname, name) \ + struct __attribute__ ((__packed__)) mumble_##name { \ + struct mumble_msg_base base; \ + MumbleProto__##cname m; \ + }; +MUMBLE_MSGS +#undef MUMBLE_MSG + +/* Makro to hide ugly protobuf-c constat names. */ +#define MUMBLE_REJECT_TYPE(type) MUMBLE_PROTO__REJECT__REJECT_TYPE__##type + + struct cmumble; void @@ -18,4 +40,20 @@ cmumble_send_msg(struct cmumble *cm, ProtobufCMessage *msg); int cmumble_recv_msg(struct cmumble *cm); + +#define MUMBLE_MSG(cname, name) \ + static inline void \ + cmumble_init_##name(struct mumble_##name *msg) \ + { \ + mumble_proto__##name##__init(&msg->m); \ + } \ + \ + static inline void \ + cmumble_send_##name(struct cmumble *cm, struct mumble_##name *msg) \ + { \ + cmumble_send_msg(cm, &msg->m.base); \ + } +MUMBLE_MSGS +#undef MUMBLE_MSG + #endif /* _MESSAGE_H_ */ |