Mumble has a shallow and easy to understand stack. Basically it uses Google's Protocol Buffers [1] with simple prefixing to distinguish the different kinds of packets sent through an TLSv1 encrypted connection. This makes the protocol very easily expandable.
The prefix consists out of the two bytes defining the type of the packet in the payload and 4 bytes stating the length of the payload in bytes followed by the payload itself. The following packet types are available in the current protocol and all but UDPTunnel are simple protobuf messages. If not mentioned otherwise all fields outside the protobuf encoding are big-endian.
Type | Payload |
---|---|
0 | Version |
1 | UDPTunnel |
2 | Authenticate |
3 | Ping |
4 | Reject |
5 | ServerSync |
6 | ChannelRemove |
7 | ChannelState |
8 | UserRemove |
9 | UserState |
10 | BanList |
11 | TextMessage |
12 | PermissionDenied |
13 | ACL |
14 | QueryUsers |
15 | CryptSetup |
16 | ContextActionModify |
17 | ContextAction |
18 | UserList |
19 | VoiceTarget |
20 | PermissionQuery |
21 | CodecVersion |
22 | UserStats |
23 | RequestBlob |
24 | ServerConfig |
25 | SuggestConfig |
For raw representation of each packet type see the attached Mumble.proto [2] file.
Footnotes
[1] | https://github.com/google/protobuf |
[2] | https://raw.github.com/mumble-voip/mumble/master/src/Mumble.proto |