diff options
author | irungentoo <irungentoo@gmail.com> | 2013-07-18 11:47:27 -0400 |
---|---|---|
committer | irungentoo <irungentoo@gmail.com> | 2013-07-18 11:47:27 -0400 |
commit | ad44110fd54d5e0400f6f6749922e1c788d04f7d (patch) | |
tree | adea517a8a16e113e5f381f7ca6ed3028d76cb39 /core/Messenger.c | |
parent | e02620c7bed8764421b9b4c258e594369615da39 (diff) |
Added nicknames and nickname syncing.
Diffstat (limited to 'core/Messenger.c')
-rw-r--r-- | core/Messenger.c | 82 |
1 files changed, 78 insertions, 4 deletions
diff --git a/core/Messenger.c b/core/Messenger.c index 2a846ba3..85b2ac5a 100644 --- a/core/Messenger.c +++ b/core/Messenger.c | |||
@@ -24,6 +24,7 @@ | |||
24 | 24 | ||
25 | #include "Messenger.h" | 25 | #include "Messenger.h" |
26 | 26 | ||
27 | #define MAX_NAME_LENGTH 128 | ||
27 | 28 | ||
28 | typedef struct | 29 | typedef struct |
29 | { | 30 | { |
@@ -32,6 +33,8 @@ typedef struct | |||
32 | int friend_request_id; //id of the friend request corresponding to the current friend request to the current friend. | 33 | int friend_request_id; //id of the friend request corresponding to the current friend request to the current friend. |
33 | uint8_t status;//0 if no friend, 1 if added, 2 if friend request sent, 3 if confirmed friend, 4 if online. | 34 | uint8_t status;//0 if no friend, 1 if added, 2 if friend request sent, 3 if confirmed friend, 4 if online. |
34 | uint8_t info[MAX_DATA_SIZE]; //the data that is sent during the friend requests we do | 35 | uint8_t info[MAX_DATA_SIZE]; //the data that is sent during the friend requests we do |
36 | uint8_t name[MAX_NAME_LENGTH]; | ||
37 | uint8_t name_sent;//0 if we didn't send our name to this friend 1 if we have. | ||
35 | uint16_t info_size; //length of the info | 38 | uint16_t info_size; //length of the info |
36 | }Friend; | 39 | }Friend; |
37 | 40 | ||
@@ -39,6 +42,7 @@ typedef struct | |||
39 | 42 | ||
40 | uint8_t self_public_key[crypto_box_PUBLICKEYBYTES]; | 43 | uint8_t self_public_key[crypto_box_PUBLICKEYBYTES]; |
41 | 44 | ||
45 | static uint8_t self_name[MAX_NAME_LENGTH]; | ||
42 | 46 | ||
43 | #define MAX_NUM_FRIENDS 256 | 47 | #define MAX_NUM_FRIENDS 256 |
44 | 48 | ||
@@ -216,6 +220,63 @@ int m_sendmessage(int friendnumber, uint8_t * message, uint32_t length) | |||
216 | return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, length + 1); | 220 | return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, length + 1); |
217 | } | 221 | } |
218 | 222 | ||
223 | //send a name packet to friendnumber | ||
224 | static int m_sendname(int friendnumber, uint8_t * name) | ||
225 | { | ||
226 | uint8_t temp[MAX_NAME_LENGTH + 1]; | ||
227 | memcpy(temp + 1, name, MAX_NAME_LENGTH); | ||
228 | temp[0] = 48; | ||
229 | return write_cryptpacket(friendlist[friendnumber].crypt_connection_id, temp, MAX_NAME_LENGTH + 1); | ||
230 | } | ||
231 | |||
232 | //set the name of a friend | ||
233 | //return 0 if success | ||
234 | //return -1 if failure | ||
235 | |||
236 | static int setfriendname(int friendnumber, uint8_t * name) | ||
237 | { | ||
238 | if(friendnumber >= numfriends || friendnumber < 0) | ||
239 | { | ||
240 | return -1; | ||
241 | } | ||
242 | memcpy(friendlist[friendnumber].name, name, MAX_NAME_LENGTH); | ||
243 | return 0; | ||
244 | } | ||
245 | |||
246 | |||
247 | //Set our nickname | ||
248 | //name must be a string of maximum MAX_NAME_LENGTH length. | ||
249 | //return 0 if success | ||
250 | //return -1 if failure | ||
251 | int setname(uint8_t * name, uint16_t length) | ||
252 | { | ||
253 | if(length > MAX_NAME_LENGTH) | ||
254 | { | ||
255 | return -1; | ||
256 | } | ||
257 | memcpy(self_name, name, length); | ||
258 | uint32_t i; | ||
259 | for(i = 0; i < numfriends; i++) | ||
260 | { | ||
261 | friendlist[i].name_sent = 0; | ||
262 | } | ||
263 | return 0; | ||
264 | } | ||
265 | |||
266 | //get name of friendnumber | ||
267 | //put it in name | ||
268 | //name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH bytes. | ||
269 | //return 0 if success | ||
270 | //return -1 if failure | ||
271 | int getname(int friendnumber, uint8_t * name) | ||
272 | { | ||
273 | if(friendnumber >= numfriends || friendnumber < 0) | ||
274 | { | ||
275 | return -1; | ||
276 | } | ||
277 | memcpy(name, friendlist[friendnumber].name, MAX_NAME_LENGTH); | ||
278 | return 0; | ||
279 | } | ||
219 | 280 | ||
220 | static void (*friend_request)(uint8_t *, uint8_t *, uint16_t); | 281 | static void (*friend_request)(uint8_t *, uint8_t *, uint16_t); |
221 | 282 | ||
@@ -265,7 +326,7 @@ static void doFriends() | |||
265 | friendlist[i].status = 2; | 326 | friendlist[i].status = 2; |
266 | } | 327 | } |
267 | } | 328 | } |
268 | if(friendlist[i].status == 2 || friendlist[i].status == 3) | 329 | if(friendlist[i].status == 2 || friendlist[i].status == 3) //friend is not online |
269 | { | 330 | { |
270 | check_friendrequest(friendlist[i].friend_request_id);//for now this is used to kill the friend request | 331 | check_friendrequest(friendlist[i].friend_request_id);//for now this is used to kill the friend request |
271 | IP_Port friendip = DHT_getfriendip(friendlist[i].client_id); | 332 | IP_Port friendip = DHT_getfriendip(friendlist[i].client_id); |
@@ -286,12 +347,25 @@ static void doFriends() | |||
286 | break; | 347 | break; |
287 | } | 348 | } |
288 | } | 349 | } |
289 | while(friendlist[i].status == 4) | 350 | while(friendlist[i].status == 4) //friend is online |
290 | { | 351 | { |
352 | if(friendlist[i].name_sent == 0) | ||
353 | { | ||
354 | if(m_sendname(i, self_name)) | ||
355 | { | ||
356 | friendlist[i].name_sent = 1; | ||
357 | } | ||
358 | } | ||
291 | len = read_cryptpacket(friendlist[i].crypt_connection_id, temp); | 359 | len = read_cryptpacket(friendlist[i].crypt_connection_id, temp); |
292 | if(len > 0) | 360 | if(len > 0) |
293 | { | 361 | { |
294 | if(temp[0] == 64) | 362 | if(temp[0] == 48 && len == MAX_NAME_LENGTH + 1)//Username |
363 | { | ||
364 | memcpy(friendlist[i].name, temp + 1, MAX_NAME_LENGTH); | ||
365 | friendlist[i].name[MAX_NAME_LENGTH - 1] = 0;//make sure the NULL terminator is present. | ||
366 | } | ||
367 | else | ||
368 | if(temp[0] == 64)//Chat message | ||
295 | { | 369 | { |
296 | (*friend_message)(i, temp + 1, len - 1); | 370 | (*friend_message)(i, temp + 1, len - 1); |
297 | } | 371 | } |
@@ -446,7 +520,7 @@ int Messenger_load(uint8_t * data, uint32_t length) | |||
446 | uint32_t i; | 520 | uint32_t i; |
447 | for(i = 0; i < num; i++) | 521 | for(i = 0; i < num; i++) |
448 | { | 522 | { |
449 | m_addfriend_norequest(temp[i].client_id); | 523 | setfriendname(m_addfriend_norequest(temp[i].client_id), temp[i].name); |
450 | } | 524 | } |
451 | free(temp); | 525 | free(temp); |
452 | return 0; | 526 | return 0; |