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:
- len = mumble_proto__udptunnel__get_packed_size(msg->payload.UDPTunnel);
- if (len > MAX_MSGSIZE) {
+ case UDPTunnel: /* Non-standard handling of tunneled voice traffic. */
+ if (msg->payload.UDPTunnel->packet.len > MAX_MSGSIZE) {
Log_warn("Too big tx message. Discarding");
break;
}
- Msg_addPreamble(buffer, msg->messageType, len);
- mumble_proto__udptunnel__pack(msg->payload.UDPTunnel, bufptr);
+ Msg_addPreamble(buffer, msg->messageType, msg->payload.UDPTunnel->packet.len);
+ memcpy(bufptr, msg->payload.UDPTunnel->packet.data, msg->payload.UDPTunnel->packet.len);
break;
case Authenticate:
len = mumble_proto__authenticate__get_packed_size(msg->payload.authenticate);
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);
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);
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;
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);
msg->payload.version = mumble_proto__version__unpack(NULL, msgLen, msgData);
break;
}
- case UDPTunnel:
+ case UDPTunnel: /* Non-standard handling of tunneled voice data */
{
msg = Msg_create(UDPTunnel);
- msg->unpacked = true;
- msg->payload.UDPTunnel = mumble_proto__udptunnel__unpack(NULL, msgLen, msgData);
+ msg->unpacked = false;
+ msg->payload.UDPTunnel = malloc(sizeof(struct _MumbleProto__UDPTunnel));
+ if (msg->payload.UDPTunnel == NULL)
+ Log_fatal("Out of memory");
+ msg->payload.UDPTunnel->packet.data = malloc(msgLen);
+ if (msg->payload.UDPTunnel->packet.data == NULL)
+ Log_fatal("Out of memory");
+ memcpy(msg->payload.UDPTunnel->packet.data, msgData, msgLen);
+ msg->payload.UDPTunnel->packet.len = msgLen;
break;
}
case Authenticate:
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);