From b15230583c31799d650584b05f4cfce8cd726aea Mon Sep 17 00:00:00 2001 From: irungentoo Date: Thu, 15 Aug 2013 20:56:22 -0400 Subject: Fixed loading and a small problem with the length of crypto requests. --- core/Messenger.c | 10 +++++++++- core/friend_requests.c | 2 +- core/net_crypto.c | 4 ++-- 3 files changed, 12 insertions(+), 4 deletions(-) (limited to 'core') diff --git a/core/Messenger.c b/core/Messenger.c index bed59d4d..4ed8bc41 100644 --- a/core/Messenger.c +++ b/core/Messenger.c @@ -810,10 +810,18 @@ int Messenger_load(Messenger *m, uint8_t * data, uint32_t length) uint32_t i; for (i = 0; i < num; ++i) { - if(temp[i].status != 0) { + if(temp[i].status >= 3) { int fnum = m_addfriend_norequest(m, temp[i].client_id); setfriendname(m, fnum, temp[i].name); /* set_friend_statusmessage(fnum, temp[i].statusmessage, temp[i].statusmessage_length); */ + } else if (temp[i].status != 0) { + /* TODO: this is not a good way to do this. */ + uint8_t address[FRIEND_ADDRESS_SIZE]; + memcpy(address, temp[i].client_id, crypto_box_PUBLICKEYBYTES); + memcpy(address + crypto_box_PUBLICKEYBYTES, &(temp[i].friendrequest_nospam), sizeof(uint32_t)); + uint16_t checksum = address_checksum(address, FRIEND_ADDRESS_SIZE - sizeof(checksum)); + memcpy(address + crypto_box_PUBLICKEYBYTES + sizeof(uint32_t), &checksum, sizeof(checksum)); + m_addfriend(m, address, temp[i].info, temp[i].info_size); } } free(temp); diff --git a/core/friend_requests.c b/core/friend_requests.c index ae19ebdd..d4f8dd63 100644 --- a/core/friend_requests.c +++ b/core/friend_requests.c @@ -35,7 +35,7 @@ int send_friendrequest(uint8_t * public_key, uint32_t nospam_num, uint8_t * data { if(length - sizeof(nospam_num) > MAX_DATA_SIZE) return -1; - + uint8_t temp[MAX_DATA_SIZE]; memcpy(temp, &nospam_num, sizeof(nospam_num)); memcpy(temp + sizeof(nospam_num), data, length); diff --git a/core/net_crypto.c b/core/net_crypto.c index 376708ab..a05208ef 100644 --- a/core/net_crypto.c +++ b/core/net_crypto.c @@ -228,7 +228,7 @@ int create_request(uint8_t *packet, uint8_t *public_key, uint8_t *data, uint32_t memcpy(temp + 1, data, length); temp[0] = request_id; random_nonce(nonce); - int len = encrypt_data(public_key, self_secret_key, nonce, temp, length, + int len = encrypt_data(public_key, self_secret_key, nonce, temp, length + 1, 1 + crypto_box_PUBLICKEYBYTES * 2 + crypto_box_NONCEBYTES + packet); if (len == -1) return -1; @@ -287,7 +287,7 @@ static int cryptopacket_handle(IP_Port source, uint8_t * packet, uint32_t length if (len == -1 || len == 0) return 1; if (!cryptopackethandlers[number]) return 1; - cryptopackethandlers[number](source, public_key, data, len - 1); + cryptopackethandlers[number](source, public_key, data, len); } else { /* if request is not for us, try routing it. */ if(route_packet(packet + 1, packet, length) == length) -- cgit v1.2.3