diff options
Diffstat (limited to 'core')
-rw-r--r-- | core/Messenger.c | 28 |
1 files changed, 24 insertions, 4 deletions
diff --git a/core/Messenger.c b/core/Messenger.c index 5a10c1da..bb581a45 100644 --- a/core/Messenger.c +++ b/core/Messenger.c | |||
@@ -355,33 +355,41 @@ static int set_friend_userstatus(int friendnumber, uint8_t * status, uint16_t le | |||
355 | } | 355 | } |
356 | 356 | ||
357 | static void (*friend_request)(uint8_t *, uint8_t *, uint16_t); | 357 | static void (*friend_request)(uint8_t *, uint8_t *, uint16_t); |
358 | static uint8_t friend_request_isset = 0; | ||
358 | 359 | ||
359 | //set the function that will be executed when a friend request is received. | 360 | //set the function that will be executed when a friend request is received. |
360 | void m_callback_friendrequest(void (*function)(uint8_t *, uint8_t *, uint16_t)) | 361 | void m_callback_friendrequest(void (*function)(uint8_t *, uint8_t *, uint16_t)) |
361 | { | 362 | { |
362 | friend_request = function; | 363 | friend_request = function; |
364 | friend_request_isset = 1; | ||
363 | } | 365 | } |
364 | 366 | ||
365 | 367 | ||
366 | static void (*friend_message)(int, uint8_t *, uint16_t); | 368 | static void (*friend_message)(int, uint8_t *, uint16_t); |
369 | static uint8_t friend_message_isset = 0; | ||
367 | 370 | ||
368 | //set the function that will be executed when a message from a friend is received. | 371 | //set the function that will be executed when a message from a friend is received. |
369 | void m_callback_friendmessage(void (*function)(int, uint8_t *, uint16_t)) | 372 | void m_callback_friendmessage(void (*function)(int, uint8_t *, uint16_t)) |
370 | { | 373 | { |
371 | friend_message = function; | 374 | friend_message = function; |
375 | friend_message_isset = 1; | ||
372 | } | 376 | } |
373 | 377 | ||
374 | 378 | ||
375 | static void (*friend_namechange)(int, uint8_t *, uint16_t); | 379 | static void (*friend_namechange)(int, uint8_t *, uint16_t); |
380 | static uint8_t friend_namechange_isset = 0; | ||
376 | void m_callback_namechange(void (*function)(int, uint8_t *, uint16_t)) | 381 | void m_callback_namechange(void (*function)(int, uint8_t *, uint16_t)) |
377 | { | 382 | { |
378 | friend_namechange = function; | 383 | friend_namechange = function; |
384 | friend_namechange_isset = 1; | ||
379 | } | 385 | } |
380 | 386 | ||
381 | static void (*friend_statuschange)(int, uint8_t *, uint16_t); | 387 | static void (*friend_statuschange)(int, uint8_t *, uint16_t); |
388 | static uint8_t friend_statuschange_isset = 0; | ||
382 | void m_callback_userstatus(void (*function)(int, uint8_t *, uint16_t)) | 389 | void m_callback_userstatus(void (*function)(int, uint8_t *, uint16_t)) |
383 | { | 390 | { |
384 | friend_statuschange = function; | 391 | friend_statuschange = function; |
392 | friend_statuschange_isset = 1; | ||
385 | } | 393 | } |
386 | 394 | ||
387 | #define PORT 33445 | 395 | #define PORT 33445 |
@@ -458,7 +466,10 @@ static void doFriends() | |||
458 | switch(temp[0]) { | 466 | switch(temp[0]) { |
459 | case PACKET_ID_NICKNAME: { | 467 | case PACKET_ID_NICKNAME: { |
460 | if (len != MAX_NAME_LENGTH + 1) break; | 468 | if (len != MAX_NAME_LENGTH + 1) break; |
461 | friend_namechange(i, temp + 1, MAX_NAME_LENGTH); // todo: use the actual length | 469 | if(friend_namechange_isset) |
470 | { | ||
471 | friend_namechange(i, temp + 1, MAX_NAME_LENGTH); // todo: use the actual length | ||
472 | } | ||
462 | memcpy(friendlist[i].name, temp + 1, MAX_NAME_LENGTH); | 473 | memcpy(friendlist[i].name, temp + 1, MAX_NAME_LENGTH); |
463 | friendlist[i].name[MAX_NAME_LENGTH - 1] = 0;//make sure the NULL terminator is present. | 474 | friendlist[i].name[MAX_NAME_LENGTH - 1] = 0;//make sure the NULL terminator is present. |
464 | break; | 475 | break; |
@@ -466,13 +477,19 @@ static void doFriends() | |||
466 | case PACKET_ID_USERSTATUS: { | 477 | case PACKET_ID_USERSTATUS: { |
467 | uint8_t *status = calloc(MIN(len - 1, MAX_USERSTATUS_LENGTH), 1); | 478 | uint8_t *status = calloc(MIN(len - 1, MAX_USERSTATUS_LENGTH), 1); |
468 | memcpy(status, temp + 1, MIN(len - 1, MAX_USERSTATUS_LENGTH)); | 479 | memcpy(status, temp + 1, MIN(len - 1, MAX_USERSTATUS_LENGTH)); |
469 | friend_statuschange(i, status, MIN(len - 1, MAX_USERSTATUS_LENGTH)); | 480 | if(friend_statuschange_isset) |
481 | { | ||
482 | friend_statuschange(i, status, MIN(len - 1, MAX_USERSTATUS_LENGTH)); | ||
483 | } | ||
470 | set_friend_userstatus(i, status, MIN(len - 1, MAX_USERSTATUS_LENGTH)); | 484 | set_friend_userstatus(i, status, MIN(len - 1, MAX_USERSTATUS_LENGTH)); |
471 | free(status); | 485 | free(status); |
472 | break; | 486 | break; |
473 | } | 487 | } |
474 | case PACKET_ID_MESSAGE: { | 488 | case PACKET_ID_MESSAGE: { |
475 | (*friend_message)(i, temp + 1, len - 1); | 489 | if(friend_message_isset) |
490 | { | ||
491 | (*friend_message)(i, temp + 1, len - 1); | ||
492 | } | ||
476 | break; | 493 | break; |
477 | } | 494 | } |
478 | } | 495 | } |
@@ -499,7 +516,10 @@ static void doFriendRequest() | |||
499 | int len = handle_friendrequest(public_key, temp); | 516 | int len = handle_friendrequest(public_key, temp); |
500 | if(len >= 0) | 517 | if(len >= 0) |
501 | { | 518 | { |
502 | (*friend_request)(public_key, temp, len); | 519 | if(friend_request_isset) |
520 | { | ||
521 | (*friend_request)(public_key, temp, len); | ||
522 | } | ||
503 | } | 523 | } |
504 | } | 524 | } |
505 | 525 | ||