summaryrefslogtreecommitdiff
path: root/core/Messenger.c
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2013-08-17 11:16:08 -0400
committerirungentoo <irungentoo@gmail.com>2013-08-17 11:16:08 -0400
commit7d092c3467fbbcf3639ed2c698659c56b2509c31 (patch)
treec50b9a92b2b434ecd1e0907eb3e3a4a410fa5e34 /core/Messenger.c
parent35376d85aaf04a80ecca6b313c323ee82e08f3df (diff)
Added dynamic memory allocation to crypto connections.
Also fixed some possible bugs in Messenger.c
Diffstat (limited to 'core/Messenger.c')
-rw-r--r--core/Messenger.c32
1 files changed, 20 insertions, 12 deletions
diff --git a/core/Messenger.c b/core/Messenger.c
index 04e4626a..2c9e134b 100644
--- a/core/Messenger.c
+++ b/core/Messenger.c
@@ -42,7 +42,6 @@ int realloc_friendlist(Messenger *m, uint32_t num)
42 if (newfriendlist == NULL) 42 if (newfriendlist == NULL)
43 return -1; 43 return -1;
44 44
45 memset(&newfriendlist[num - 1], 0, sizeof(Friend));
46 m->friendlist = newfriendlist; 45 m->friendlist = newfriendlist;
47 return 0; 46 return 0;
48} 47}
@@ -165,6 +164,8 @@ int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length)
165 if (realloc_friendlist(m, m->numfriends + 1) != 0) 164 if (realloc_friendlist(m, m->numfriends + 1) != 0)
166 return FAERR_NOMEM; 165 return FAERR_NOMEM;
167 166
167 memset(&(m->friendlist[m->numfriends]), 0, sizeof(Friend));
168
168 uint32_t i; 169 uint32_t i;
169 170
170 for (i = 0; i <= m->numfriends; ++i) { 171 for (i = 0; i <= m->numfriends; ++i) {
@@ -184,7 +185,9 @@ int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length)
184 m->friendlist[i].receives_read_receipts = 1; /* default: YES */ 185 m->friendlist[i].receives_read_receipts = 1; /* default: YES */
185 memcpy(&(m->friendlist[i].friendrequest_nospam), address + crypto_box_PUBLICKEYBYTES, sizeof(uint32_t)); 186 memcpy(&(m->friendlist[i].friendrequest_nospam), address + crypto_box_PUBLICKEYBYTES, sizeof(uint32_t));
186 187
187 ++ m->numfriends; 188 if (m->numfriends == i)
189 ++ m->numfriends;
190
188 return i; 191 return i;
189 } 192 }
190 } 193 }
@@ -201,6 +204,8 @@ int m_addfriend_norequest(Messenger *m, uint8_t *client_id)
201 if (realloc_friendlist(m, m->numfriends + 1) != 0) 204 if (realloc_friendlist(m, m->numfriends + 1) != 0)
202 return FAERR_NOMEM; 205 return FAERR_NOMEM;
203 206
207 memset(&(m->friendlist[m->numfriends]), 0, sizeof(Friend));
208
204 uint32_t i; 209 uint32_t i;
205 210
206 for (i = 0; i <= m->numfriends; ++i) { 211 for (i = 0; i <= m->numfriends; ++i) {
@@ -215,7 +220,10 @@ int m_addfriend_norequest(Messenger *m, uint8_t *client_id)
215 m->friendlist[i].userstatus = USERSTATUS_NONE; 220 m->friendlist[i].userstatus = USERSTATUS_NONE;
216 m->friendlist[i].message_id = 0; 221 m->friendlist[i].message_id = 0;
217 m->friendlist[i].receives_read_receipts = 1; /* default: YES */ 222 m->friendlist[i].receives_read_receipts = 1; /* default: YES */
218 ++ m->numfriends; 223
224 if (m->numfriends == i)
225 ++ m->numfriends;
226
219 return i; 227 return i;
220 } 228 }
221 } 229 }
@@ -244,7 +252,7 @@ int m_delfriend(Messenger *m, int friendnumber)
244 252
245 m->numfriends = i; 253 m->numfriends = i;
246 254
247 if (realloc_friendlist(m, m->numfriends + 1) != 0) 255 if (realloc_friendlist(m, m->numfriends) != 0)
248 return FAERR_NOMEM; 256 return FAERR_NOMEM;
249 257
250 return 0; 258 return 0;
@@ -851,14 +859,14 @@ void doMessenger(Messenger *m)
851uint32_t Messenger_size(Messenger *m) 859uint32_t Messenger_size(Messenger *m)
852{ 860{
853 return crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES 861 return crypto_box_PUBLICKEYBYTES + crypto_box_SECRETKEYBYTES
854 + sizeof(uint32_t) // nospam 862 + sizeof(uint32_t) // nospam
855 + sizeof(uint32_t) // DHT size 863 + sizeof(uint32_t) // DHT size
856 + DHT_size() // DHT itself 864 + DHT_size() // DHT itself
857 + sizeof(uint32_t) // Friendlist size 865 + sizeof(uint32_t) // Friendlist size
858 + sizeof(Friend) * m->numfriends // Friendlist itself 866 + sizeof(Friend) * m->numfriends // Friendlist itself
859 + sizeof(uint16_t) // Own nickname length 867 + sizeof(uint16_t) // Own nickname length
860 + m->name_length // Own nickname 868 + m->name_length // Own nickname
861 ; 869 ;
862} 870}
863 871
864/* save the messenger in data of size Messenger_size() */ 872/* save the messenger in data of size Messenger_size() */