X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fclient.c;h=b3b12b75030d3f76821bcaaeb2ef1995156d41e8;hb=3fa329a43141b80ea9ca1271d8a3439e39623942;hp=35fa7f250392e3c314edf000de574c84a98e06e6;hpb=bb5f5ae82bdcb7b5189032940d0b609dc12be70b;p=umurmur.git diff --git a/src/client.c b/src/client.c index 35fa7f2..b3b12b7 100644 --- a/src/client.c +++ b/src/client.c @@ -64,6 +64,7 @@ int iCodecAlpha, iCodecBeta; bool_t bPreferAlpha; extern int* udpsocks; +extern bool_t hasv4; void Client_init() { @@ -167,7 +168,7 @@ void Client_token_add(client_t *client, char *token_string) client->tokencount++; } -bool_t Client_token_match(client_t *client, char *str) +bool_t Client_token_match(client_t *client, char const *str) { token_t *token; struct dlist *itr; @@ -833,7 +834,9 @@ int Client_read_udp(int udpsock) if (memcmp(itraddress, fromaddress, addresslength) == 0) { if (checkDecrypt(itr, encrypted, buffer, len)) { memcpy(itr->key, key, KEY_LENGTH); - Log_info_client(itr, "New UDP connection from %s on port %d", Util_clientAddressToString(itr), fromport); + char* clientAddressString = Util_clientAddressToString(itr); + Log_info_client(itr, "New UDP connection from %s on port %d", clientAddressString, fromport); + free(clientAddressString); memcpy(&itr->remote_udp, &from, sizeof(struct sockaddr_storage)); break; } @@ -847,6 +850,9 @@ int Client_read_udp(int udpsock) itr->bUDP = true; len -= 4; /* Adjust for crypt header */ msgType = (UDPMessageType_t)((buffer[0] >> 5) & 0x7); + + char *clientAddressString = NULL; + switch (msgType) { case UDPVoiceSpeex: case UDPVoiceCELTAlpha: @@ -861,7 +867,9 @@ int Client_read_udp(int udpsock) Client_send_udp(itr, buffer, len); break; default: - Log_debug("Unknown UDP message type from %s port %d", Util_clientAddressToString(itr), fromport); + clientAddressString = Util_clientAddressToString(itr); + Log_debug("Unknown UDP message type from %s port %d", clientAddressString, fromport); + free(clientAddressString); break; } @@ -957,8 +965,10 @@ int Client_voiceMsg(client_t *client, uint8_t *data, int len) if (vt->channels[i].linked && !list_empty(&ch->channel_links)) { struct dlist *ch_itr; list_iterate(ch_itr, &ch->channel_links) { + channellist_t *chl; channel_t *ch_link; - ch_link = list_get_entry(ch_itr, channel_t, link_node); + chl = list_get_entry(ch_itr, channellist_t, node); + ch_link = chl->chan; list_iterate(itr, &ch_link->clients) { client_t *c; c = list_get_entry(itr, client_t, chan_node); @@ -1008,8 +1018,8 @@ out: static int Client_send_udp(client_t *client, uint8_t *data, int len) { uint8_t *buf, *mbuf; - int udpsock = (client->remote_udp.ss_family == AF_INET) ? udpsocks[0] : udpsocks[1]; + int udpsock = (client->remote_udp.ss_family == AF_INET) ? udpsocks[0] : udpsocks[(hasv4) ? 1 : 0]; if (Util_clientAddressToPortUDP(client) != 0 && CryptState_isValid(&client->cryptState) && client->bUDP) {