More work toward 1.2.0:
[umurmur.git] / src / messages.c
index 3014f88ca34f19b882f1776b080cf891ec95803e..77a1a1d976a126254013e10a4a0759cb7efb22c0 100644 (file)
@@ -75,6 +75,8 @@ int Msg_messageToNetwork(message_t *msg, uint8_t *buffer)
                        break;
                }
                Msg_addPreamble(buffer, msg->messageType, len);
+               Log_debug("To net: Version->release: %s Version->os: %s",
+                                 msg->payload.version->release, msg->payload.version->os);
                mumble_proto__version__pack(msg->payload.version, bufptr);
                break;
        case UDPTunnel:
@@ -194,6 +196,15 @@ int Msg_messageToNetwork(message_t *msg, uint8_t *buffer)
                Msg_addPreamble(buffer, msg->messageType, len);
                mumble_proto__codec_version__pack(msg->payload.codecVersion, bufptr);
                break;
+       case PermissionQuery:
+               len = mumble_proto__permission_query__get_packed_size(msg->payload.permissionQuery);
+               if (len > MAX_MSGSIZE) {
+                       Log_warn("Too big tx message. Discarding");
+                       break;
+                       }
+               Msg_addPreamble(buffer, msg->messageType, len);
+               mumble_proto__permission_query__pack(msg->payload.permissionQuery, bufptr);
+               break;
 
        default:
                Log_warn("Unsupported message %d", msg->messageType);
@@ -274,6 +285,10 @@ message_t *Msg_create(messageType_t messageType)
                msg->payload.channelState = malloc(sizeof(MumbleProto__ChannelState));
                mumble_proto__channel_state__init(msg->payload.channelState);
                break;
+       case PermissionQuery:
+               msg->payload.permissionQuery = malloc(sizeof(MumbleProto__PermissionQuery));
+               mumble_proto__permission_query__init(msg->payload.permissionQuery);
+               break;
 
        default:
                Log_warn("Msg_create: Unsupported message %d", msg->messageType);
@@ -294,12 +309,17 @@ void Msg_free(message_t *msg)
        if (msg->refcount > 0)
                return;
 
-       /* XXX - add free for locally generated messages too */
        switch (msg->messageType) {
        case Version:
                if (msg->unpacked)
                        mumble_proto__version__free_unpacked(msg->payload.version, NULL);
                else {
+                       if (msg->payload.version->release)
+                               free(msg->payload.version->release);
+                       if (msg->payload.version->os)
+                               free(msg->payload.version->os);
+                       if (msg->payload.version->os_version)
+                               free(msg->payload.version->os_version);
                        free(msg->payload.version);
                }
                break;
@@ -406,6 +426,13 @@ void Msg_free(message_t *msg)
                        free(msg->payload.channelState);
                }
                break;
+       case PermissionQuery:
+               if (msg->unpacked)
+                       mumble_proto__permission_query__free_unpacked(msg->payload.permissionQuery, NULL);
+               else {
+                       free(msg->payload.permissionQuery);
+               }
+               break;
 
        default:
                Log_warn("Msg_free: Unsupported message %d", msg->messageType);
@@ -534,6 +561,13 @@ message_t *Msg_networkToMessage(uint8_t *data, int size)
                msg->payload.codecVersion = mumble_proto__codec_version__unpack(NULL, msgLen, msgData);
                break;
        }
+       case PermissionQuery:
+       {
+               msg = Msg_create(PermissionQuery);
+               msg->unpacked = true;
+               msg->payload.permissionQuery = mumble_proto__permission_query__unpack(NULL, msgLen, msgData);
+               break;
+       }
 
        default:
                Log_warn("Unsupported message %d", messageType);