X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fmessages.c;h=b7d245d32d21b704cf72c290d57b60819b31bcdd;hb=37efef0c8c20948fca8bee7c92a299f45ccee2bd;hp=3014f88ca34f19b882f1776b080cf891ec95803e;hpb=ac258369305673f3d17322b845ad58f2b9f64100;p=umurmur.git diff --git a/src/messages.c b/src/messages.c index 3014f88..b7d245d 100644 --- a/src/messages.c +++ b/src/messages.c @@ -75,16 +75,17 @@ 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: - 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); @@ -194,6 +195,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 +284,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 +308,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 +425,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); @@ -450,11 +476,18 @@ message_t *Msg_networkToMessage(uint8_t *data, int size) 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: @@ -534,6 +567,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);