+ }
+ len = msg->payload.UDPTunnel->packet.len;
+ 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);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__authenticate__pack(msg->payload.authenticate, bufptr);
+ break;
+ case Ping:
+ len = mumble_proto__ping__get_packed_size(msg->payload.ping);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__ping__pack(msg->payload.ping, bufptr);
+ break;
+ case Reject:
+ len = mumble_proto__reject__get_packed_size(msg->payload.reject);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__reject__pack(msg->payload.reject, bufptr);
+ break;
+ case ServerSync:
+ len = mumble_proto__server_sync__get_packed_size(msg->payload.serverSync);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__server_sync__pack(msg->payload.serverSync, bufptr);
+ break;
+ case TextMessage:
+ len = mumble_proto__text_message__get_packed_size(msg->payload.textMessage);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__text_message__pack(msg->payload.textMessage, bufptr);
+ break;
+ case PermissionDenied:
+ len = mumble_proto__permission_denied__get_packed_size(msg->payload.permissionDenied);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__permission_denied__pack(msg->payload.permissionDenied, bufptr);
+ break;
+ case CryptSetup:
+ len = mumble_proto__crypt_setup__get_packed_size(msg->payload.cryptSetup);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__crypt_setup__pack(msg->payload.cryptSetup, bufptr);
+ break;
+ case UserList:
+ len = mumble_proto__user_list__get_packed_size(msg->payload.userList);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__user_list__pack(msg->payload.userList, bufptr);
+ break;
+ case UserState:
+ len = mumble_proto__user_state__get_packed_size(msg->payload.userState);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__user_state__pack(msg->payload.userState, bufptr);
+ break;
+ case UserRemove:
+ len = mumble_proto__user_remove__get_packed_size(msg->payload.userRemove);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__user_remove__pack(msg->payload.userRemove, bufptr);
+ break;
+ case ChannelState:
+ len = mumble_proto__channel_state__get_packed_size(msg->payload.channelState);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__channel_state__pack(msg->payload.channelState, bufptr);
+ break;
+ case VoiceTarget:
+ len = mumble_proto__voice_target__get_packed_size(msg->payload.voiceTarget);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__voice_target__pack(msg->payload.voiceTarget, bufptr);
+ break;
+ case CodecVersion:
+ len = mumble_proto__codec_version__get_packed_size(msg->payload.codecVersion);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ 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;
+ case ChannelRemove:
+ len = mumble_proto__channel_remove__get_packed_size(msg->payload.channelRemove);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__channel_remove__pack(msg->payload.channelRemove, bufptr);
+ break;
+ case UserStats:
+ {
+ len = mumble_proto__user_stats__get_packed_size(msg->payload.userStats);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__user_stats__pack(msg->payload.userStats, bufptr);
+ break;
+ }
+ case ServerConfig:
+ len = mumble_proto__server_config__get_packed_size(msg->payload.serverConfig);
+ if (len > MAX_MSGSIZE) {
+ Log_warn("Too big tx message. Discarding");
+ break;
+ }
+ Msg_addPreamble(buffer, msg->messageType, len);
+ mumble_proto__server_config__pack(msg->payload.serverConfig, bufptr);
+ break;