Update Protobuf-C to 0.14
[umurmur.git] / src / messages.c
index 09ec927378c603f6ae3ca29a115afa985b186242..5931edd9e77d71044f3837f0975f80cc47f487dd 100644 (file)
 
 #define PREAMBLE_SIZE 6
 
-void dumpmsg(uint8_t *data, int size);
 static message_t *Msg_create_nopayload(messageType_t messageType);
 
-void Msg_addPreamble(uint8_t *buffer, uint16_t type, uint32_t len)
-{
-       type = htons(type);
-       len = htonl(len);
-       
-       buffer[0] = (type) & 0xff;
-       buffer[1] = (type >> 8) & 0xff;
+static void Msg_addPreamble(uint8_t *buffer, uint16_t type, uint32_t len)
+{      
+       buffer[1] = (type) & 0xff;
+       buffer[0] = (type >> 8) & 0xff;
        
-       buffer[2] = (len) & 0xff;
-       buffer[3] = (len >> 8) & 0xff;
-       buffer[4] = (len >> 16) & 0xff;
-       buffer[5] = (len >> 24) & 0xff; 
+       buffer[5] = (len) & 0xff;
+       buffer[4] = (len >> 8) & 0xff;
+       buffer[3] = (len >> 16) & 0xff;
+       buffer[2] = (len >> 24) & 0xff; 
 }
 
 static void Msg_getPreamble(uint8_t *buffer, int *type, int *len)
@@ -63,10 +59,10 @@ static void Msg_getPreamble(uint8_t *buffer, int *type, int *len)
        uint16_t msgType;
        uint32_t msgLen;
        
-       msgType = buffer[0] | (buffer[1] << 8);
-       msgLen = buffer[2] | (buffer[3] << 8) | (buffer[4] << 16) | (buffer[5] << 24);
-       *type = (int)ntohs(msgType);
-       *len = (int)ntohl(msgLen);
+       msgType = buffer[1] | (buffer[0] << 8);
+       msgLen = buffer[5] | (buffer[4] << 8) | (buffer[3] << 16) | (buffer[2] << 24);
+       *type = (int)msgType;
+       *len = (int)msgLen;
 }
 
 #define MAX_MSGSIZE (BUFSIZE - PREAMBLE_SIZE)
@@ -232,13 +228,13 @@ int Msg_messageToNetwork(message_t *msg, uint8_t *buffer)
                break;
 
        default:
-               Log_warn("Msg_networkToMessage: Unsupported message %d", msg->messageType);
+               Log_warn("Msg_MessageToNetwork: Unsupported message %d", msg->messageType);
                return 0;
        }
        return len + PREAMBLE_SIZE;
 }
 
-message_t *Msg_create_nopayload(messageType_t messageType)
+static message_t *Msg_create_nopayload(messageType_t messageType)
 {
        message_t *msg = malloc(sizeof(message_t));
 
@@ -436,8 +432,12 @@ void Msg_free(message_t *msg)
                if (msg->unpacked)
                        mumble_proto__channel_state__free_unpacked(msg->payload.channelState, NULL);
                else {
-                       free(msg->payload.channelState->name);
-                       free(msg->payload.channelState->description);
+                       if (msg->payload.channelState->name)
+                               free(msg->payload.channelState->name);
+                       if (msg->payload.channelState->description)
+                               free(msg->payload.channelState->description);
+                       if (msg->payload.channelState->links)
+                               free(msg->payload.channelState->links);
                        free(msg->payload.channelState);
                }
                break;
@@ -484,21 +484,21 @@ void Msg_free(message_t *msg)
        free(msg);
 }
 
-void dumpmsg(uint8_t *data, int size)
+message_t *Msg_CreateVoiceMsg(uint8_t *data, int size)
 {
-       int i, r = 0, offset = 0;
-       char buf[512];
+       message_t *msg = NULL;
        
-       while (r * 8 + i < size) {
-               for (i = 0; i < 8 && r * 8 + i < size; i++) {
-                       offset += sprintf(buf + offset, "%x ", data[r * 8 + i]);
-               }
-               sprintf(buf + offset, "\n");
-               printf(buf);
-               offset = 0;
-               r++;
-               i = 0;
-       } 
+       msg = Msg_create_nopayload(UDPTunnel);
+       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(size);
+       if (msg->payload.UDPTunnel->packet.data == NULL)
+               Log_fatal("Out of memory");
+       memcpy(msg->payload.UDPTunnel->packet.data, data, size);
+       msg->payload.UDPTunnel->packet.len = size;
+       return msg;
 }
 
 message_t *Msg_networkToMessage(uint8_t *data, int size)
@@ -524,16 +524,7 @@ message_t *Msg_networkToMessage(uint8_t *data, int size)
        }
        case UDPTunnel: /* Non-standard handling of tunneled voice data */
        {
-               msg = Msg_create_nopayload(UDPTunnel);
-               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;
+               msg = Msg_CreateVoiceMsg(msgData, msgLen);
                break;
        }
        case Authenticate: