message.h: Add wrapper around protobufs ugly func names
[cmumble:cmumble.git] / src / message.h
1 #ifndef _MESSAGE_H_
2 #define _MESSAGE_H_
3
4 #include "message_list.h"
5 #include "mumble.pb-c.h"
6
7 enum cmumble_message {
8 #define MUMBLE_MSG(a,b) a,
9         MUMBLE_MSGS
10 #undef MUMBLE_MSG
11 };
12
13 #define PREAMBLE_SIZE 6
14 struct mumble_msg_base {
15         uint8_t preamble[PREAMBLE_SIZE];
16 };
17
18 struct __attribute__ ((__packed__)) mumble_message {
19         struct mumble_msg_base base;
20         ProtobufCMessage msg;
21 };
22
23 #define MUMBLE_MSG(cname, name) \
24         struct __attribute__ ((__packed__)) mumble_##name { \
25                 struct mumble_msg_base base; \
26                 MumbleProto__##cname m; \
27         };
28 MUMBLE_MSGS
29 #undef MUMBLE_MSG
30
31 /* Makro to hide ugly protobuf-c constat names. */
32 #define MUMBLE_REJECT_TYPE(type) MUMBLE_PROTO__REJECT__REJECT_TYPE__##type
33
34
35 struct cmumble;
36
37 void
38 cmumble_send_msg(struct cmumble *cm, ProtobufCMessage *msg);
39
40 int
41 cmumble_recv_msg(struct cmumble *cm);
42
43
44 #define MUMBLE_MSG(cname, name) \
45         static inline void \
46         cmumble_init_##name(struct mumble_##name *msg) \
47         { \
48                 mumble_proto__##name##__init(&msg->m); \
49         } \
50         \
51         static inline void \
52         cmumble_send_##name(struct cmumble *cm, struct mumble_##name *msg) \
53         { \
54                 cmumble_send_msg(cm, &msg->m.base); \
55         }
56 MUMBLE_MSGS
57 #undef MUMBLE_MSG
58
59 #endif /* _MESSAGE_H_ */