summaryrefslogtreecommitdiff
path: root/core
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2013-08-08 14:39:27 -0400
committerirungentoo <irungentoo@gmail.com>2013-08-08 14:39:27 -0400
commit9634a234379d34aa1c0f823fd48b8145118c44c9 (patch)
tree6f88f21c4daafb33ff70afff7da08d1f235d657e /core
parent249f552e6798c16227196b40ec931ec36fd362c5 (diff)
parent04c974962cd29ca96814b7750598313c3bee85de (diff)
Merge branch 'master' of https://github.com/nurupo/InsertProjectNameHere into nurupo-master
Conflicts: core/Messenger.c
Diffstat (limited to 'core')
-rw-r--r--core/Messenger.c31
-rw-r--r--core/Messenger.h4
2 files changed, 28 insertions, 7 deletions
diff --git a/core/Messenger.c b/core/Messenger.c
index ede8f718..90dfe48d 100644
--- a/core/Messenger.c
+++ b/core/Messenger.c
@@ -55,6 +55,8 @@ static Friend *friendlist;
55static uint32_t numfriends; 55static uint32_t numfriends;
56 56
57 57
58static void set_friend_status(int friendnumber, uint8_t status);
59
58/* 1 if we are online 60/* 1 if we are online
59 0 if we are offline 61 0 if we are offline
60 static uint8_t online; */ 62 static uint8_t online; */
@@ -134,7 +136,7 @@ int m_addfriend(uint8_t *client_id, uint8_t *data, uint16_t length)
134 for (i = 0; i <= numfriends; ++i) { 136 for (i = 0; i <= numfriends; ++i) {
135 if (friendlist[i].status == NOFRIEND) { 137 if (friendlist[i].status == NOFRIEND) {
136 DHT_addfriend(client_id); 138 DHT_addfriend(client_id);
137 friendlist[i].status = FRIEND_ADDED; 139 set_friend_status(i, FRIEND_ADDED);
138 friendlist[i].crypt_connection_id = -1; 140 friendlist[i].crypt_connection_id = -1;
139 friendlist[i].friend_request_id = -1; 141 friendlist[i].friend_request_id = -1;
140 memcpy(friendlist[i].client_id, client_id, CLIENT_ID_SIZE); 142 memcpy(friendlist[i].client_id, client_id, CLIENT_ID_SIZE);
@@ -165,7 +167,7 @@ int m_addfriend_norequest(uint8_t * client_id)
165 for (i = 0; i <= numfriends; ++i) { 167 for (i = 0; i <= numfriends; ++i) {
166 if(friendlist[i].status == NOFRIEND) { 168 if(friendlist[i].status == NOFRIEND) {
167 DHT_addfriend(client_id); 169 DHT_addfriend(client_id);
168 friendlist[i].status = FRIEND_REQUESTED; 170 set_friend_status(i, FRIEND_REQUESTED);
169 friendlist[i].crypt_connection_id = -1; 171 friendlist[i].crypt_connection_id = -1;
170 friendlist[i].friend_request_id = -1; 172 friendlist[i].friend_request_id = -1;
171 memcpy(friendlist[i].client_id, client_id, CLIENT_ID_SIZE); 173 memcpy(friendlist[i].client_id, client_id, CLIENT_ID_SIZE);
@@ -477,6 +479,21 @@ void m_callback_read_receipt(void (*function)(int, uint32_t))
477 read_receipt_isset = 1; 479 read_receipt_isset = 1;
478} 480}
479 481
482static void (*friend_statuschange)(int, uint8_t);
483static uint8_t friend_statuschange_isset = 0;
484void m_callback_friend_status(void (*function)(int, uint8_t))
485{
486 friend_statuschange = function;
487 friend_statuschange_isset = 1;
488}
489
490static void set_friend_status(int friendnumber, uint8_t status)
491{
492 if (friendlist[friendnumber].status != status && friend_statuschange_isset)
493 friend_statuschange(friendnumber, status);
494 friendlist[friendnumber].status = status;
495}
496
480#define PORT 33445 497#define PORT 33445
481/* run this at startup */ 498/* run this at startup */
482int initMessenger(void) 499int initMessenger(void)
@@ -504,9 +521,9 @@ static void doFriends(void)
504 if (friendlist[i].status == FRIEND_ADDED) { 521 if (friendlist[i].status == FRIEND_ADDED) {
505 int fr = send_friendrequest(friendlist[i].client_id, friendlist[i].info, friendlist[i].info_size); 522 int fr = send_friendrequest(friendlist[i].client_id, friendlist[i].info, friendlist[i].info_size);
506 if (fr == 0) /* TODO: This needs to be fixed so that it sends the friend requests a couple of times in case of packet loss */ 523 if (fr == 0) /* TODO: This needs to be fixed so that it sends the friend requests a couple of times in case of packet loss */
507 friendlist[i].status = FRIEND_REQUESTED; 524 set_friend_status(i, FRIEND_REQUESTED);
508 else if (fr > 0) 525 else if (fr > 0)
509 friendlist[i].status = FRIEND_REQUESTED; 526 set_friend_status(i, FRIEND_REQUESTED);
510 } 527 }
511 if (friendlist[i].status == FRIEND_REQUESTED || friendlist[i].status == FRIEND_CONFIRMED) { /* friend is not online */ 528 if (friendlist[i].status == FRIEND_REQUESTED || friendlist[i].status == FRIEND_CONFIRMED) { /* friend is not online */
512 if (friendlist[i].status == FRIEND_REQUESTED) { 529 if (friendlist[i].status == FRIEND_REQUESTED) {
@@ -522,7 +539,7 @@ static void doFriends(void)
522 friendlist[i].crypt_connection_id = crypto_connect(friendlist[i].client_id, friendip); 539 friendlist[i].crypt_connection_id = crypto_connect(friendlist[i].client_id, friendip);
523 break; 540 break;
524 case 3: /* Connection is established */ 541 case 3: /* Connection is established */
525 friendlist[i].status = FRIEND_ONLINE; 542 set_friend_status(i, FRIEND_ONLINE);
526 break; 543 break;
527 case 4: 544 case 4:
528 crypto_kill(friendlist[i].crypt_connection_id); 545 crypto_kill(friendlist[i].crypt_connection_id);
@@ -604,7 +621,7 @@ static void doFriends(void)
604 if (is_cryptoconnected(friendlist[i].crypt_connection_id) == 4) { /* if the connection timed out, kill it */ 621 if (is_cryptoconnected(friendlist[i].crypt_connection_id) == 4) { /* if the connection timed out, kill it */
605 crypto_kill(friendlist[i].crypt_connection_id); 622 crypto_kill(friendlist[i].crypt_connection_id);
606 friendlist[i].crypt_connection_id = -1; 623 friendlist[i].crypt_connection_id = -1;
607 friendlist[i].status = FRIEND_CONFIRMED; 624 set_friend_status(i, FRIEND_CONFIRMED);
608 } 625 }
609 break; 626 break;
610 } 627 }
@@ -625,7 +642,7 @@ static void doInbound(void)
625 friendlist[friend_id].crypt_connection_id = 642 friendlist[friend_id].crypt_connection_id =
626 accept_crypto_inbound(inconnection, public_key, secret_nonce, session_key); 643 accept_crypto_inbound(inconnection, public_key, secret_nonce, session_key);
627 644
628 friendlist[friend_id].status = FRIEND_CONFIRMED; 645 set_friend_status(friend_id, FRIEND_CONFIRMED);
629 } 646 }
630 } 647 }
631} 648}
diff --git a/core/Messenger.h b/core/Messenger.h
index 3a9a56df..3044122b 100644
--- a/core/Messenger.h
+++ b/core/Messenger.h
@@ -201,6 +201,10 @@ void m_callback_userstatus(void (*function)(int, USERSTATUS));
201 in that case, you should discard it. */ 201 in that case, you should discard it. */
202void m_callback_read_receipt(void (*function)(int, uint32_t)); 202void m_callback_read_receipt(void (*function)(int, uint32_t));
203 203
204/* set the callback for friend status changes
205 function(int friendnumber, uint8_t status) */
206void m_callback_friendstatus(void (*function)(int, uint8_t));
207
204/* run this at startup 208/* run this at startup
205 returns 0 if no connection problems 209 returns 0 if no connection problems
206 returns -1 if there are problems */ 210 returns -1 if there are problems */