X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=src%2Fclient.c;h=80cbe3d67802e850d68b7a9d2d570ac3976d8c8f;hb=82bb2989ad3f139f7acb3bf91d471644cbb2a8d1;hp=ae495008ff73bca29b4c2e9249c0dcaae1977f2a;hpb=4b247cf9b38099d033bc4c887ac1901d16235bd6;p=umurmur.git diff --git a/src/client.c b/src/client.c index ae49500..80cbe3d 100644 --- a/src/client.c +++ b/src/client.c @@ -36,6 +36,7 @@ #include #include #include "log.h" +#include "memory.h" #include "list.h" #include "client.h" #include "ssl.h" @@ -115,9 +116,7 @@ void Client_janitor() void Client_codec_add(client_t *client, int codec) { - codec_t *cd = malloc(sizeof(codec_t)); - if (cd == NULL) - Log_fatal("Out of memory"); + codec_t *cd = Memory_safeMalloc(1, sizeof(codec_t)); init_list_entry(&cd->node); cd->codec = codec; list_add_tail(&cd->node, &client->codecs); @@ -157,9 +156,7 @@ void Client_token_add(client_t *client, char *token_string) if (client->tokencount >= MAX_TOKENS) return; - token = malloc(sizeof(token_t)); - if (token == NULL) - Log_fatal("Out of memory"); + token = Memory_safeMalloc(1, sizeof(token_t)); init_list_entry(&token->node); token->token = strdup(token_string); if (token->token == NULL) @@ -227,10 +224,7 @@ void recheckCodecVersions(client_t *connectingClient) } } if (!found) { - cd = malloc(sizeof(codec_t)); - if (!cd) - Log_fatal("Out of memory"); - memset(cd, 0, sizeof(codec_t)); + cd = Memory_safeCalloc(1, sizeof(codec_t)); init_list_entry(&cd->node); cd->codec = codec_itr->codec; cd->count = 1; @@ -323,20 +317,24 @@ int Client_add(int fd, struct sockaddr_storage *remote) { client_t* newclient; message_t *sendmsg; + char* addressString = NULL; if (Ban_isBannedAddr(remote)) { - Log_info("Address %s banned. Disconnecting", Util_addressToString(remote)); + addressString = Util_addressToString(remote); + Log_info("Address %s banned. Disconnecting", addressString); + free(addressString); return -1; } - if ((newclient = calloc(1, sizeof(client_t))) == NULL) - Log_fatal("(%s:%s): Out of memory while allocating %d bytes.", __FILE__, __LINE__, sizeof(client_t)); + newclient = Memory_safeCalloc(1, sizeof(client_t)); newclient->tcpfd = fd; memcpy(&newclient->remote_tcp, remote, sizeof(struct sockaddr_storage)); newclient->ssl = SSLi_newconnection(&newclient->tcpfd, &newclient->SSLready); if (newclient->ssl == NULL) { - Log_warn("SSL negotiation failed with %s on port %d", Util_addressToString(remote), Util_addressToPort(remote)); + addressString = Util_addressToString(remote); + Log_warn("SSL negotiation failed with %s on port %d", addressString, Util_addressToPort(remote)); + free(addressString); free(newclient); return -1; } @@ -670,12 +668,8 @@ void Client_textmessage(client_t *client, char *text) uint32_t *tree_id; message_t *sendmsg = NULL; - message = malloc(strlen(text) + 1); - if (!message) - Log_fatal("Out of memory"); - tree_id = malloc(sizeof(uint32_t)); - if (!tree_id) - Log_fatal("Out of memory"); + message = Memory_safeMalloc(1, strlen(text) + 1); + tree_id = Memory_safeMalloc(1, sizeof(uint32_t)); *tree_id = 0; sendmsg = Msg_create(TextMessage); sendmsg->payload.textMessage->message = message; @@ -834,7 +828,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; } @@ -848,6 +844,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: @@ -862,7 +861,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; } @@ -1017,14 +1018,11 @@ static int Client_send_udp(client_t *client, uint8_t *data, int len) if (Util_clientAddressToPortUDP(client) != 0 && CryptState_isValid(&client->cryptState) && client->bUDP) { #if defined(__LP64__) - buf = mbuf = malloc(len + 4 + 16); + buf = mbuf = Memory_safeMalloc(1, len + 4 + 16); buf += 4; #else - mbuf = buf = malloc(len + 4); + mbuf = buf = Memory_safeMalloc(1, len + 4); #endif - if (mbuf == NULL) - Log_fatal("Out of memory"); - CryptState_encrypt(&client->cryptState, data, buf, len); #if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__APPLE__)