Use Client_find_by_session() instead of a few open-coded loops.
[umurmur.git] / src / messages.h
index 4582d6cc56fd9df51de4fea234bb14a2eff32706..0ba277d530c70d5dde9ee80fbdf92862afbe21f9 100644 (file)
@@ -1,5 +1,5 @@
-/* Copyright (C) 2009, Martin Johansson <martin@fatbob.nu>
-   Copyright (C) 2005-2009, Thorvald Natvig <thorvald@natvig.com>
+/* Copyright (C) 2009-2014, Martin Johansson <martin@fatbob.nu>
+   Copyright (C) 2005-2014, Thorvald Natvig <thorvald@natvig.com>
 
    All rights reserved.
 
 #define MESSAGES_H_89768
 
 #include <stdint.h>
+#include <arpa/inet.h>
 #include "Mumble.pb-c.h"
 #include "list.h"
 #include "types.h"
 
-#define MAX_TEXT 256
-#define MESSAGE_STREAM_VERSION 4
+#define PROTVER_MAJOR 1
+#define PROTVER_MINOR 2
+#define PROTVER_PATCH 4
+#define PROTOCOL_VERSION ((PROTVER_MAJOR << 16) | (PROTVER_MINOR << 8) | (PROTVER_PATCH))
+
+#define PERM_NONE 0x0
+#define PERM_WRITE 0x1
+#define PERM_TRAVERSE 0x2
+#define PERM_ENTER 0x4
+#define PERM_SPEAK 0x8
+#define PERM_MUTEDEAFEN 0x10
+#define PERM_MOVE 0x20
+#define PERM_MAKECHANNEL 0x40
+#define PERM_LINKCHANNEL 0x80
+#define PERM_WHISPER 0x100
+#define PERM_TEXTMESSAGE 0x200
+#define PERM_MAKETEMPCHANNEL 0x400
+// Root channel only
+#define PERM_KICK 0x10000
+#define PERM_BAN 0x20000
+#define PERM_REGISTER 0x40000
+#define PERM_SELFREGISTER 0x80000      
+#define PERM_CACHED 0x8000000
+#define PERM_ALL 0xf07ff
+
+#define PERM_DEFAULT (PERM_TRAVERSE | PERM_ENTER | PERM_SPEAK | PERM_WHISPER | PERM_TEXTMESSAGE | PERM_MAKETEMPCHANNEL)
+#define PERM_ADMIN (PERM_DEFAULT | PERM_MUTEDEAFEN | PERM_MOVE | PERM_KICK | PERM_BAN)
 
 typedef enum {
        Version,
@@ -50,7 +76,7 @@ typedef enum {
        ChannelState,
        UserRemove,
        UserState,
-       BanList,
+       BanList, /* 10 */
        TextMessage,
        PermissionDenied,
        ACL,
@@ -60,8 +86,11 @@ typedef enum {
        ContextAction,
        UserList,
        VoiceTarget,
-       PermissionQuery,
+       PermissionQuery, /* 20 */
        CodecVersion,
+       UserStats,
+       RequestBlob,
+       ServerConfig
 } messageType_t;
 
 typedef enum {
@@ -69,6 +98,7 @@ typedef enum {
        UDPPing,
        UDPVoiceSpeex,
        UDPVoiceCELTBeta,
+       UDPVoiceOpus,
 } UDPMessageType_t;
 
 
@@ -83,8 +113,7 @@ typedef union payload {
        struct  _MumbleProto__ChannelState *channelState;
        struct  _MumbleProto__UserRemove *userRemove;
        struct  _MumbleProto__UserState *userState;
-       /* BanEntry not supported */
-       /* BanList not supported */
+       struct  _MumbleProto__BanList *banList; 
        struct  _MumbleProto__TextMessage *textMessage;
        struct  _MumbleProto__PermissionDenied *permissionDenied;
        /* ChanACL not supported */
@@ -97,8 +126,10 @@ typedef union payload {
        struct  _MumbleProto__UserList *userList;
        struct  _MumbleProto__VoiceTarget__Target *voiceTarget_target;
        struct  _MumbleProto__VoiceTarget *voiceTarget;
-       /* PermissionQuery not supported */
+       struct  _MumbleProto__PermissionQuery *permissionQuery;
        struct  _MumbleProto__CodecVersion *codecVersion;
+       struct  _MumbleProto__UserStats *userStats;
+       struct  _MumbleProto__ServerConfig *serverConfig;
 } payload_t;
 
 typedef struct message {
@@ -110,12 +141,18 @@ typedef struct message {
 } message_t;
 
 
-
 int Msg_messageToNetwork(message_t *msg, uint8_t *buffer);
 message_t *Msg_networkToMessage(uint8_t *data, int size);
 void Msg_free(message_t *msg);
 void Msg_inc_ref(message_t *msg);
 
+message_t *Msg_CreateVoiceMsg(uint8_t *data, int size);
 message_t *Msg_create(messageType_t messageType);
+void Msg_banList_addEntry(message_t *msg, int index, uint8_t *address, uint32_t mask,
+                          char *name, char *hash, char *reason, char *start, uint32_t duration);
+void Msg_banList_getEntry(message_t *msg, int index, uint8_t **address, uint32_t *mask,
+                          char **name, char **hash, char **reason, char **start, uint32_t *duration);
+message_t *Msg_banList_create(int n_bans);
+
 
 #endif