summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorirungentoo <irungentoo@gmail.com>2014-02-21 11:38:04 -0500
committerirungentoo <irungentoo@gmail.com>2014-02-21 11:38:04 -0500
commit554afe11d7c3e286b6f286405a1a1857b9f55c81 (patch)
tree29f08d8ae8138dc3aed856bc162d87ecec9b0950
parent388b1229b97f06ebfad1bb839a06bbeefe8cc2d1 (diff)
Some api changes.
-rw-r--r--testing/nTox.c2
-rw-r--r--toxcore/Messenger.c174
-rw-r--r--toxcore/Messenger.h163
-rw-r--r--toxcore/tox.c115
-rw-r--r--toxcore/tox.h197
5 files changed, 334 insertions, 317 deletions
diff --git a/testing/nTox.c b/testing/nTox.c
index 8f7dc7ea..343db236 100644
--- a/testing/nTox.c
+++ b/testing/nTox.c
@@ -1243,7 +1243,7 @@ int main(int argc, char *argv[])
1243 1243
1244 new_lines("[i] change username with /n"); 1244 new_lines("[i] change username with /n");
1245 uint8_t name[TOX_MAX_NAME_LENGTH + 1]; 1245 uint8_t name[TOX_MAX_NAME_LENGTH + 1];
1246 uint16_t namelen = tox_get_self_name(m, name, sizeof(name)); 1246 uint16_t namelen = tox_get_self_name(m, name);
1247 name[namelen] = 0; 1247 name[namelen] = 0;
1248 1248
1249 if (namelen > 0) { 1249 if (namelen > 0) {
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c
index 69bc845a..9f75f89f 100644
--- a/toxcore/Messenger.c
+++ b/toxcore/Messenger.c
@@ -34,16 +34,16 @@
34#define MIN(a,b) (((a)<(b))?(a):(b)) 34#define MIN(a,b) (((a)<(b))?(a):(b))
35 35
36 36
37static void set_friend_status(Messenger *m, int friendnumber, uint8_t status); 37static void set_friend_status(Messenger *m, int32_t friendnumber, uint8_t status);
38static int write_cryptpacket_id(Messenger *m, int friendnumber, uint8_t packet_id, uint8_t *data, uint32_t length); 38static int write_cryptpacket_id(Messenger *m, int32_t friendnumber, uint8_t packet_id, uint8_t *data, uint32_t length);
39 39
40// friend_not_valid determines if the friendnumber passed is valid in the Messenger object 40// friend_not_valid determines if the friendnumber passed is valid in the Messenger object
41static uint8_t friend_not_valid(Messenger *m, int friendnumber) 41static uint8_t friend_not_valid(Messenger *m, int32_t friendnumber)
42{ 42{
43 return (unsigned int)friendnumber >= m->numfriends; 43 return (unsigned int)friendnumber >= m->numfriends;
44} 44}
45 45
46static int add_online_friend(Messenger *m, int friendnumber) 46static int add_online_friend(Messenger *m, int32_t friendnumber)
47{ 47{
48 if (friend_not_valid(m, friendnumber)) 48 if (friend_not_valid(m, friendnumber))
49 return -1; 49 return -1;
@@ -74,7 +74,7 @@ static int add_online_friend(Messenger *m, int friendnumber)
74} 74}
75 75
76 76
77static int remove_online_friend(Messenger *m, int friendnumber) 77static int remove_online_friend(Messenger *m, int32_t friendnumber)
78{ 78{
79 uint32_t i; 79 uint32_t i;
80 Online_Friend *temp; 80 Online_Friend *temp;
@@ -132,7 +132,7 @@ int realloc_friendlist(Messenger *m, uint32_t num)
132/* return the friend id associated to that public key. 132/* return the friend id associated to that public key.
133 * return -1 if no such friend. 133 * return -1 if no such friend.
134 */ 134 */
135int getfriend_id(Messenger *m, uint8_t *client_id) 135int32_t getfriend_id(Messenger *m, uint8_t *client_id)
136{ 136{
137 uint32_t i; 137 uint32_t i;
138 138
@@ -151,13 +151,13 @@ int getfriend_id(Messenger *m, uint8_t *client_id)
151 * return 0 if success. 151 * return 0 if success.
152 * return -1 if failure. 152 * return -1 if failure.
153 */ 153 */
154int getclient_id(Messenger *m, int friend_id, uint8_t *client_id) 154int getclient_id(Messenger *m, int32_t friendnumber, uint8_t *client_id)
155{ 155{
156 if (friend_not_valid(m, friend_id)) 156 if (friend_not_valid(m, friendnumber))
157 return -1; 157 return -1;
158 158
159 if (m->friendlist[friend_id].status > 0) { 159 if (m->friendlist[friendnumber].status > 0) {
160 memcpy(client_id, m->friendlist[friend_id].client_id, CLIENT_ID_SIZE); 160 memcpy(client_id, m->friendlist[friendnumber].client_id, CLIENT_ID_SIZE);
161 return 0; 161 return 0;
162 } 162 }
163 163
@@ -210,7 +210,7 @@ void getaddress(Messenger *m, uint8_t *address)
210 * (the nospam for that friend was set to the new one). 210 * (the nospam for that friend was set to the new one).
211 * return FAERR_NOMEM if increasing the friend list size fails. 211 * return FAERR_NOMEM if increasing the friend list size fails.
212 */ 212 */
213int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length) 213int32_t m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length)
214{ 214{
215 if (length >= (MAX_DATA_SIZE - crypto_box_PUBLICKEYBYTES 215 if (length >= (MAX_DATA_SIZE - crypto_box_PUBLICKEYBYTES
216 - crypto_box_NONCEBYTES - crypto_box_BOXZEROBYTES 216 - crypto_box_NONCEBYTES - crypto_box_BOXZEROBYTES
@@ -231,7 +231,7 @@ int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length)
231 if (id_equal(client_id, m->net_crypto->self_public_key)) 231 if (id_equal(client_id, m->net_crypto->self_public_key))
232 return FAERR_OWNKEY; 232 return FAERR_OWNKEY;
233 233
234 int friend_id = getfriend_id(m, client_id); 234 int32_t friend_id = getfriend_id(m, client_id);
235 235
236 if (friend_id != -1) { 236 if (friend_id != -1) {
237 uint32_t nospam; 237 uint32_t nospam;
@@ -250,7 +250,7 @@ int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length)
250 250
251 memset(&(m->friendlist[m->numfriends]), 0, sizeof(Friend)); 251 memset(&(m->friendlist[m->numfriends]), 0, sizeof(Friend));
252 252
253 int onion_friendnum = onion_addfriend(m->onion_c, client_id); 253 int32_t onion_friendnum = onion_addfriend(m->onion_c, client_id);
254 254
255 if (onion_friendnum == -1) 255 if (onion_friendnum == -1)
256 return FAERR_UNKNOWN; 256 return FAERR_UNKNOWN;
@@ -285,7 +285,7 @@ int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length)
285 return FAERR_UNKNOWN; 285 return FAERR_UNKNOWN;
286} 286}
287 287
288int m_addfriend_norequest(Messenger *m, uint8_t *client_id) 288int32_t m_addfriend_norequest(Messenger *m, uint8_t *client_id)
289{ 289{
290 if (getfriend_id(m, client_id) != -1) 290 if (getfriend_id(m, client_id) != -1)
291 return -1; 291 return -1;
@@ -299,7 +299,7 @@ int m_addfriend_norequest(Messenger *m, uint8_t *client_id)
299 299
300 memset(&(m->friendlist[m->numfriends]), 0, sizeof(Friend)); 300 memset(&(m->friendlist[m->numfriends]), 0, sizeof(Friend));
301 301
302 int onion_friendnum = onion_addfriend(m->onion_c, client_id); 302 int32_t onion_friendnum = onion_addfriend(m->onion_c, client_id);
303 303
304 if (onion_friendnum == -1) 304 if (onion_friendnum == -1)
305 return FAERR_UNKNOWN; 305 return FAERR_UNKNOWN;
@@ -335,7 +335,7 @@ int m_addfriend_norequest(Messenger *m, uint8_t *client_id)
335 * return 0 if success. 335 * return 0 if success.
336 * return -1 if failure. 336 * return -1 if failure.
337 */ 337 */
338int m_delfriend(Messenger *m, int friendnumber) 338int m_delfriend(Messenger *m, int32_t friendnumber)
339{ 339{
340 if (friend_not_valid(m, friendnumber)) 340 if (friend_not_valid(m, friendnumber))
341 return -1; 341 return -1;
@@ -362,7 +362,7 @@ int m_delfriend(Messenger *m, int friendnumber)
362 return 0; 362 return 0;
363} 363}
364 364
365int m_get_friend_connectionstatus(Messenger *m, int friendnumber) 365int m_get_friend_connectionstatus(Messenger *m, int32_t friendnumber)
366{ 366{
367 if (friend_not_valid(m, friendnumber)) 367 if (friend_not_valid(m, friendnumber))
368 return -1; 368 return -1;
@@ -370,7 +370,7 @@ int m_get_friend_connectionstatus(Messenger *m, int friendnumber)
370 return m->friendlist[friendnumber].status == FRIEND_ONLINE; 370 return m->friendlist[friendnumber].status == FRIEND_ONLINE;
371} 371}
372 372
373int m_friend_exists(Messenger *m, int friendnumber) 373int m_friend_exists(Messenger *m, int32_t friendnumber)
374{ 374{
375 if (friend_not_valid(m, friendnumber)) 375 if (friend_not_valid(m, friendnumber))
376 return 0; 376 return 0;
@@ -383,7 +383,7 @@ int m_friend_exists(Messenger *m, int friendnumber)
383 * return the message id if packet was successfully put into the send queue. 383 * return the message id if packet was successfully put into the send queue.
384 * return 0 if it was not. 384 * return 0 if it was not.
385 */ 385 */
386uint32_t m_sendmessage(Messenger *m, int friendnumber, uint8_t *message, uint32_t length) 386uint32_t m_sendmessage(Messenger *m, int32_t friendnumber, uint8_t *message, uint32_t length)
387{ 387{
388 if (friend_not_valid(m, friendnumber)) 388 if (friend_not_valid(m, friendnumber))
389 return 0; 389 return 0;
@@ -400,7 +400,7 @@ uint32_t m_sendmessage(Messenger *m, int friendnumber, uint8_t *message, uint32_
400 return 0; 400 return 0;
401} 401}
402 402
403uint32_t m_sendmessage_withid(Messenger *m, int friendnumber, uint32_t theid, uint8_t *message, uint32_t length) 403uint32_t m_sendmessage_withid(Messenger *m, int32_t friendnumber, uint32_t theid, uint8_t *message, uint32_t length)
404{ 404{
405 if (length >= (MAX_DATA_SIZE - sizeof(theid))) 405 if (length >= (MAX_DATA_SIZE - sizeof(theid)))
406 return 0; 406 return 0;
@@ -417,7 +417,7 @@ uint32_t m_sendmessage_withid(Messenger *m, int friendnumber, uint32_t theid, ui
417 * return the message id if packet was successfully put into the send queue. 417 * return the message id if packet was successfully put into the send queue.
418 * return 0 if it was not. 418 * return 0 if it was not.
419 */ 419 */
420uint32_t m_sendaction(Messenger *m, int friendnumber, uint8_t *action, uint32_t length) 420uint32_t m_sendaction(Messenger *m, int32_t friendnumber, uint8_t *action, uint32_t length)
421{ 421{
422 if (friend_not_valid(m, friendnumber)) 422 if (friend_not_valid(m, friendnumber))
423 return 0; 423 return 0;
@@ -434,7 +434,7 @@ uint32_t m_sendaction(Messenger *m, int friendnumber, uint8_t *action, uint32_t
434 return 0; 434 return 0;
435} 435}
436 436
437uint32_t m_sendaction_withid(Messenger *m, int friendnumber, uint32_t theid, uint8_t *action, uint32_t length) 437uint32_t m_sendaction_withid(Messenger *m, int32_t friendnumber, uint32_t theid, uint8_t *action, uint32_t length)
438{ 438{
439 if (length >= (MAX_DATA_SIZE - sizeof(theid))) 439 if (length >= (MAX_DATA_SIZE - sizeof(theid)))
440 return 0; 440 return 0;
@@ -449,7 +449,7 @@ uint32_t m_sendaction_withid(Messenger *m, int friendnumber, uint32_t theid, uin
449/* Send a name packet to friendnumber. 449/* Send a name packet to friendnumber.
450 * length is the length with the NULL terminator. 450 * length is the length with the NULL terminator.
451 */ 451 */
452static int m_sendname(Messenger *m, int friendnumber, uint8_t *name, uint16_t length) 452static int m_sendname(Messenger *m, int32_t friendnumber, uint8_t *name, uint16_t length)
453{ 453{
454 if (length > MAX_NAME_LENGTH || length == 0) 454 if (length > MAX_NAME_LENGTH || length == 0)
455 return 0; 455 return 0;
@@ -462,7 +462,7 @@ static int m_sendname(Messenger *m, int friendnumber, uint8_t *name, uint16_t le
462 * return 0 if success. 462 * return 0 if success.
463 * return -1 if failure. 463 * return -1 if failure.
464 */ 464 */
465int setfriendname(Messenger *m, int friendnumber, uint8_t *name, uint16_t length) 465int setfriendname(Messenger *m, int32_t friendnumber, uint8_t *name, uint16_t length)
466{ 466{
467 if (friend_not_valid(m, friendnumber)) 467 if (friend_not_valid(m, friendnumber))
468 return -1; 468 return -1;
@@ -507,18 +507,15 @@ int setname(Messenger *m, uint8_t *name, uint16_t length)
507 * 507 *
508 * return the length of the name. 508 * return the length of the name.
509 */ 509 */
510uint16_t getself_name(Messenger *m, uint8_t *name, uint16_t nlen) 510uint16_t getself_name(Messenger *m, uint8_t *name)
511{ 511{
512 uint16_t len; 512 if (name == NULL) {
513
514 if (name == NULL || nlen == 0) {
515 return 0; 513 return 0;
516 } 514 }
517 515
518 len = MIN(nlen, m->name_length); 516 memcpy(name, m->name, m->name_length);
519 memcpy(name, m->name, len);
520 517
521 return len; 518 return m->name_length;
522} 519}
523 520
524/* Get name of friendnumber and put it in name. 521/* Get name of friendnumber and put it in name.
@@ -527,7 +524,7 @@ uint16_t getself_name(Messenger *m, uint8_t *name, uint16_t nlen)
527 * return length of name if success. 524 * return length of name if success.
528 * return -1 if failure. 525 * return -1 if failure.
529 */ 526 */
530int getname(Messenger *m, int friendnumber, uint8_t *name) 527int getname(Messenger *m, int32_t friendnumber, uint8_t *name)
531{ 528{
532 if (friend_not_valid(m, friendnumber)) 529 if (friend_not_valid(m, friendnumber))
533 return -1; 530 return -1;
@@ -570,7 +567,7 @@ int m_set_userstatus(Messenger *m, USERSTATUS status)
570/* return the size of friendnumber's user status. 567/* return the size of friendnumber's user status.
571 * Guaranteed to be at most MAX_STATUSMESSAGE_LENGTH. 568 * Guaranteed to be at most MAX_STATUSMESSAGE_LENGTH.
572 */ 569 */
573int m_get_statusmessage_size(Messenger *m, int friendnumber) 570int m_get_statusmessage_size(Messenger *m, int32_t friendnumber)
574{ 571{
575 if (friend_not_valid(m, friendnumber)) 572 if (friend_not_valid(m, friendnumber))
576 return -1; 573 return -1;
@@ -581,7 +578,7 @@ int m_get_statusmessage_size(Messenger *m, int friendnumber)
581/* Copy the user status of friendnumber into buf, truncating if needed to maxlen 578/* Copy the user status of friendnumber into buf, truncating if needed to maxlen
582 * bytes, use m_get_statusmessage_size to find out how much you need to allocate. 579 * bytes, use m_get_statusmessage_size to find out how much you need to allocate.
583 */ 580 */
584int m_copy_statusmessage(Messenger *m, int friendnumber, uint8_t *buf, uint32_t maxlen) 581int m_copy_statusmessage(Messenger *m, int32_t friendnumber, uint8_t *buf, uint32_t maxlen)
585{ 582{
586 if (friend_not_valid(m, friendnumber)) 583 if (friend_not_valid(m, friendnumber))
587 return -1; 584 return -1;
@@ -598,7 +595,7 @@ int m_copy_self_statusmessage(Messenger *m, uint8_t *buf, uint32_t maxlen)
598 return MIN(maxlen, m->statusmessage_length); 595 return MIN(maxlen, m->statusmessage_length);
599} 596}
600 597
601USERSTATUS m_get_userstatus(Messenger *m, int friendnumber) 598USERSTATUS m_get_userstatus(Messenger *m, int32_t friendnumber)
602{ 599{
603 if (friend_not_valid(m, friendnumber)) 600 if (friend_not_valid(m, friendnumber))
604 return USERSTATUS_INVALID; 601 return USERSTATUS_INVALID;
@@ -617,7 +614,7 @@ USERSTATUS m_get_self_userstatus(Messenger *m)
617 return m->userstatus; 614 return m->userstatus;
618} 615}
619 616
620int m_set_usertyping(Messenger *m, int friendnumber, uint8_t is_typing) 617int m_set_usertyping(Messenger *m, int32_t friendnumber, uint8_t is_typing)
621{ 618{
622 if (is_typing != 0 && is_typing != 1) { 619 if (is_typing != 0 && is_typing != 1) {
623 return -1; 620 return -1;
@@ -632,7 +629,7 @@ int m_set_usertyping(Messenger *m, int friendnumber, uint8_t is_typing)
632 return 0; 629 return 0;
633} 630}
634 631
635int m_get_istyping(Messenger *m, int friendnumber) 632int m_get_istyping(Messenger *m, int32_t friendnumber)
636{ 633{
637 if (friend_not_valid(m, friendnumber)) 634 if (friend_not_valid(m, friendnumber))
638 return -1; 635 return -1;
@@ -640,24 +637,24 @@ int m_get_istyping(Messenger *m, int friendnumber)
640 return m->friendlist[friendnumber].is_typing; 637 return m->friendlist[friendnumber].is_typing;
641} 638}
642 639
643static int send_statusmessage(Messenger *m, int friendnumber, uint8_t *status, uint16_t length) 640static int send_statusmessage(Messenger *m, int32_t friendnumber, uint8_t *status, uint16_t length)
644{ 641{
645 return write_cryptpacket_id(m, friendnumber, PACKET_ID_STATUSMESSAGE, status, length); 642 return write_cryptpacket_id(m, friendnumber, PACKET_ID_STATUSMESSAGE, status, length);
646} 643}
647 644
648static int send_userstatus(Messenger *m, int friendnumber, USERSTATUS status) 645static int send_userstatus(Messenger *m, int32_t friendnumber, USERSTATUS status)
649{ 646{
650 uint8_t stat = status; 647 uint8_t stat = status;
651 return write_cryptpacket_id(m, friendnumber, PACKET_ID_USERSTATUS, &stat, sizeof(stat)); 648 return write_cryptpacket_id(m, friendnumber, PACKET_ID_USERSTATUS, &stat, sizeof(stat));
652} 649}
653 650
654static int send_user_istyping(Messenger *m, int friendnumber, uint8_t is_typing) 651static int send_user_istyping(Messenger *m, int32_t friendnumber, uint8_t is_typing)
655{ 652{
656 uint8_t typing = is_typing; 653 uint8_t typing = is_typing;
657 return write_cryptpacket_id(m, friendnumber, PACKET_ID_TYPING, &typing, sizeof(typing)); 654 return write_cryptpacket_id(m, friendnumber, PACKET_ID_TYPING, &typing, sizeof(typing));
658} 655}
659 656
660static int send_ping(Messenger *m, int friendnumber) 657static int send_ping(Messenger *m, int32_t friendnumber)
661{ 658{
662 int ret = write_cryptpacket_id(m, friendnumber, PACKET_ID_PING, 0, 0); 659 int ret = write_cryptpacket_id(m, friendnumber, PACKET_ID_PING, 0, 0);
663 660
@@ -667,7 +664,7 @@ static int send_ping(Messenger *m, int friendnumber)
667 return ret; 664 return ret;
668} 665}
669 666
670static int set_friend_statusmessage(Messenger *m, int friendnumber, uint8_t *status, uint16_t length) 667static int set_friend_statusmessage(Messenger *m, int32_t friendnumber, uint8_t *status, uint16_t length)
671{ 668{
672 if (friend_not_valid(m, friendnumber)) 669 if (friend_not_valid(m, friendnumber))
673 return -1; 670 return -1;
@@ -680,18 +677,18 @@ static int set_friend_statusmessage(Messenger *m, int friendnumber, uint8_t *sta
680 return 0; 677 return 0;
681} 678}
682 679
683static void set_friend_userstatus(Messenger *m, int friendnumber, USERSTATUS status) 680static void set_friend_userstatus(Messenger *m, int32_t friendnumber, USERSTATUS status)
684{ 681{
685 m->friendlist[friendnumber].userstatus = status; 682 m->friendlist[friendnumber].userstatus = status;
686} 683}
687 684
688static void set_friend_typing(Messenger *m, int friendnumber, uint8_t is_typing) 685static void set_friend_typing(Messenger *m, int32_t friendnumber, uint8_t is_typing)
689{ 686{
690 m->friendlist[friendnumber].is_typing = is_typing; 687 m->friendlist[friendnumber].is_typing = is_typing;
691} 688}
692 689
693/* Sets whether we send read receipts for friendnumber. */ 690/* Sets whether we send read receipts for friendnumber. */
694void m_set_sends_receipts(Messenger *m, int friendnumber, int yesno) 691void m_set_sends_receipts(Messenger *m, int32_t friendnumber, int yesno)
695{ 692{
696 if (yesno != 0 && yesno != 1) 693 if (yesno != 0 && yesno != 1)
697 return; 694 return;
@@ -710,66 +707,67 @@ void m_callback_friendrequest(Messenger *m, void (*function)(uint8_t *, uint8_t
710} 707}
711 708
712/* Set the function that will be executed when a message from a friend is received. */ 709/* Set the function that will be executed when a message from a friend is received. */
713void m_callback_friendmessage(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), 710void m_callback_friendmessage(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
714 void *userdata) 711 void *userdata)
715{ 712{
716 m->friend_message = function; 713 m->friend_message = function;
717 m->friend_message_userdata = userdata; 714 m->friend_message_userdata = userdata;
718} 715}
719 716
720void m_callback_action(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), void *userdata) 717void m_callback_action(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
718 void *userdata)
721{ 719{
722 m->friend_action = function; 720 m->friend_action = function;
723 m->friend_action_userdata = userdata; 721 m->friend_action_userdata = userdata;
724} 722}
725 723
726void m_callback_namechange(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), 724void m_callback_namechange(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
727 void *userdata) 725 void *userdata)
728{ 726{
729 m->friend_namechange = function; 727 m->friend_namechange = function;
730 m->friend_namechange_userdata = userdata; 728 m->friend_namechange_userdata = userdata;
731} 729}
732 730
733void m_callback_statusmessage(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), 731void m_callback_statusmessage(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
734 void *userdata) 732 void *userdata)
735{ 733{
736 m->friend_statusmessagechange = function; 734 m->friend_statusmessagechange = function;
737 m->friend_statuschange_userdata = userdata; 735 m->friend_statuschange_userdata = userdata;
738} 736}
739 737
740void m_callback_userstatus(Messenger *m, void (*function)(Messenger *m, int, USERSTATUS, void *), void *userdata) 738void m_callback_userstatus(Messenger *m, void (*function)(Messenger *m, int32_t, USERSTATUS, void *), void *userdata)
741{ 739{
742 m->friend_userstatuschange = function; 740 m->friend_userstatuschange = function;
743 m->friend_userstatuschange_userdata = userdata; 741 m->friend_userstatuschange_userdata = userdata;
744} 742}
745 743
746void m_callback_typingchange(Messenger *m, void(*function)(Messenger *m, int, int, void *), void *userdata) 744void m_callback_typingchange(Messenger *m, void(*function)(Messenger *m, int32_t, int, void *), void *userdata)
747{ 745{
748 m->friend_typingchange = function; 746 m->friend_typingchange = function;
749 m->friend_typingchange_userdata = userdata; 747 m->friend_typingchange_userdata = userdata;
750} 748}
751 749
752void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, int, uint32_t, void *), void *userdata) 750void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, int32_t, uint32_t, void *), void *userdata)
753{ 751{
754 m->read_receipt = function; 752 m->read_receipt = function;
755 m->read_receipt_userdata = userdata; 753 m->read_receipt_userdata = userdata;
756} 754}
757 755
758void m_callback_connectionstatus(Messenger *m, void (*function)(Messenger *m, int, uint8_t, void *), void *userdata) 756void m_callback_connectionstatus(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, void *), void *userdata)
759{ 757{
760 m->friend_connectionstatuschange = function; 758 m->friend_connectionstatuschange = function;
761 m->friend_connectionstatuschange_userdata = userdata; 759 m->friend_connectionstatuschange_userdata = userdata;
762} 760}
763 761
764void m_callback_connectionstatus_internal_av(Messenger *m, void (*function)(Messenger *m, int, uint8_t, void *), 762void m_callback_connectionstatus_internal_av(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, void *),
765 void *userdata) 763 void *userdata)
766{ 764{
767 m->friend_connectionstatuschange_internal = function; 765 m->friend_connectionstatuschange_internal = function;
768 m->friend_connectionstatuschange_internal_userdata = userdata; 766 m->friend_connectionstatuschange_internal_userdata = userdata;
769} 767}
770 768
771static void break_files(Messenger *m, int friendnumber); 769static void break_files(Messenger *m, int32_t friendnumber);
772static void check_friend_connectionstatus(Messenger *m, int friendnumber, uint8_t status) 770static void check_friend_connectionstatus(Messenger *m, int32_t friendnumber, uint8_t status)
773{ 771{
774 if (status == NOFRIEND) 772 if (status == NOFRIEND)
775 return; 773 return;
@@ -796,13 +794,13 @@ static void check_friend_connectionstatus(Messenger *m, int friendnumber, uint8_
796 } 794 }
797} 795}
798 796
799void set_friend_status(Messenger *m, int friendnumber, uint8_t status) 797void set_friend_status(Messenger *m, int32_t friendnumber, uint8_t status)
800{ 798{
801 check_friend_connectionstatus(m, friendnumber, status); 799 check_friend_connectionstatus(m, friendnumber, status);
802 m->friendlist[friendnumber].status = status; 800 m->friendlist[friendnumber].status = status;
803} 801}
804 802
805int write_cryptpacket_id(Messenger *m, int friendnumber, uint8_t packet_id, uint8_t *data, uint32_t length) 803int write_cryptpacket_id(Messenger *m, int32_t friendnumber, uint8_t packet_id, uint8_t *data, uint32_t length)
806{ 804{
807 if (friend_not_valid(m, friendnumber)) 805 if (friend_not_valid(m, friendnumber))
808 return 0; 806 return 0;
@@ -842,7 +840,7 @@ static uint8_t groupnumber_not_valid(Messenger *m, int groupnumber)
842/* returns valid ip port of connected friend on success 840/* returns valid ip port of connected friend on success
843 * returns zeroed out IP_Port on failure 841 * returns zeroed out IP_Port on failure
844 */ 842 */
845IP_Port get_friend_ipport(Messenger *m, int friendnumber) 843IP_Port get_friend_ipport(Messenger *m, int32_t friendnumber)
846{ 844{
847 IP_Port zero; 845 IP_Port zero;
848 memset(&zero, 0, sizeof(zero)); 846 memset(&zero, 0, sizeof(zero));
@@ -876,9 +874,9 @@ static int group_num(Messenger *m, uint8_t *group_public_key)
876 874
877/* Set the callback for group invites. 875/* Set the callback for group invites.
878 * 876 *
879 * Function(Messenger *m, int friendnumber, uint8_t *group_public_key, void *userdata) 877 * Function(Messenger *m, int32_t friendnumber, uint8_t *group_public_key, void *userdata)
880 */ 878 */
881void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, void *), void *userdata) 879void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, void *), void *userdata)
882{ 880{
883 m->group_invite = function; 881 m->group_invite = function;
884 m->group_invite_userdata = userdata; 882 m->group_invite_userdata = userdata;
@@ -1081,7 +1079,7 @@ int m_group_peername(Messenger *m, int groupnumber, int peernumber, uint8_t *nam
1081 1079
1082/* Store the fact that we invited a specific friend. 1080/* Store the fact that we invited a specific friend.
1083 */ 1081 */
1084static void group_store_friendinvite(Messenger *m, int friendnumber, int groupnumber) 1082static void group_store_friendinvite(Messenger *m, int32_t friendnumber, int groupnumber)
1085{ 1083{
1086 /* Add 1 to the groupchat number because 0 (default value in invited_groups) is a valid groupchat number */ 1084 /* Add 1 to the groupchat number because 0 (default value in invited_groups) is a valid groupchat number */
1087 m->friendlist[friendnumber].invited_groups[m->friendlist[friendnumber].invited_groups_num % MAX_INVITED_GROUPS] = 1085 m->friendlist[friendnumber].invited_groups[m->friendlist[friendnumber].invited_groups_num % MAX_INVITED_GROUPS] =
@@ -1092,7 +1090,7 @@ static void group_store_friendinvite(Messenger *m, int friendnumber, int groupnu
1092/* return 1 if that friend was invited to the group 1090/* return 1 if that friend was invited to the group
1093 * return 0 if the friend was not or error. 1091 * return 0 if the friend was not or error.
1094 */ 1092 */
1095static uint8_t group_invited(Messenger *m, int friendnumber, int groupnumber) 1093static uint8_t group_invited(Messenger *m, int32_t friendnumber, int groupnumber)
1096{ 1094{
1097 1095
1098 uint32_t i; 1096 uint32_t i;
@@ -1114,7 +1112,7 @@ static uint8_t group_invited(Messenger *m, int friendnumber, int groupnumber)
1114 * return 0 on success 1112 * return 0 on success
1115 * return -1 on failure 1113 * return -1 on failure
1116 */ 1114 */
1117int invite_friend(Messenger *m, int friendnumber, int groupnumber) 1115int invite_friend(Messenger *m, int32_t friendnumber, int groupnumber)
1118{ 1116{
1119 if (friend_not_valid(m, friendnumber) || (unsigned int)groupnumber >= m->numchats) 1117 if (friend_not_valid(m, friendnumber) || (unsigned int)groupnumber >= m->numchats)
1120 return -1; 1118 return -1;
@@ -1140,7 +1138,7 @@ int invite_friend(Messenger *m, int friendnumber, int groupnumber)
1140 * returns group number on success 1138 * returns group number on success
1141 * returns -1 on failure. 1139 * returns -1 on failure.
1142 */ 1140 */
1143int join_groupchat(Messenger *m, int friendnumber, uint8_t *friend_group_public_key) 1141int join_groupchat(Messenger *m, int32_t friendnumber, uint8_t *friend_group_public_key)
1144{ 1142{
1145 if (friend_not_valid(m, friendnumber)) 1143 if (friend_not_valid(m, friendnumber))
1146 return -1; 1144 return -1;
@@ -1257,9 +1255,10 @@ static void do_allgroupchats(Messenger *m)
1257 1255
1258/* Set the callback for file send requests. 1256/* Set the callback for file send requests.
1259 * 1257 *
1260 * Function(Tox *tox, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length, void *userdata) 1258 * Function(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length, void *userdata)
1261 */ 1259 */
1262void callback_file_sendrequest(Messenger *m, void (*function)(Messenger *m, int, uint8_t, uint64_t, uint8_t *, uint16_t, 1260void callback_file_sendrequest(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, uint64_t, uint8_t *,
1261 uint16_t,
1263 void *), void *userdata) 1262 void *), void *userdata)
1264{ 1263{
1265 m->file_sendrequest = function; 1264 m->file_sendrequest = function;
@@ -1268,10 +1267,10 @@ void callback_file_sendrequest(Messenger *m, void (*function)(Messenger *m, int,
1268 1267
1269/* Set the callback for file control requests. 1268/* Set the callback for file control requests.
1270 * 1269 *
1271 * Function(Tox *tox, int friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t control_type, uint8_t *data, uint16_t length, void *userdata) 1270 * Function(Tox *tox, int32_t friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t control_type, uint8_t *data, uint16_t length, void *userdata)
1272 * 1271 *
1273 */ 1272 */
1274void callback_file_control(Messenger *m, void (*function)(Messenger *m, int, uint8_t, uint8_t, uint8_t, uint8_t *, 1273void callback_file_control(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, uint8_t, uint8_t, uint8_t *,
1275 uint16_t, 1274 uint16_t,
1276 void *), void *userdata) 1275 void *), void *userdata)
1277{ 1276{
@@ -1281,10 +1280,11 @@ void callback_file_control(Messenger *m, void (*function)(Messenger *m, int, uin
1281 1280
1282/* Set the callback for file data. 1281/* Set the callback for file data.
1283 * 1282 *
1284 * Function(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata) 1283 * Function(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata)
1285 * 1284 *
1286 */ 1285 */
1287void callback_file_data(Messenger *m, void (*function)(Messenger *m, int, uint8_t, uint8_t *, uint16_t length, void *), 1286void callback_file_data(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, uint8_t *, uint16_t length,
1287 void *),
1288 void *userdata) 1288 void *userdata)
1289{ 1289{
1290 m->file_filedata = function; 1290 m->file_filedata = function;
@@ -1298,7 +1298,7 @@ void callback_file_data(Messenger *m, void (*function)(Messenger *m, int, uint8_
1298 * return 1 on success 1298 * return 1 on success
1299 * return 0 on failure 1299 * return 0 on failure
1300 */ 1300 */
1301int file_sendrequest(Messenger *m, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, 1301int file_sendrequest(Messenger *m, int32_t friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename,
1302 uint16_t filename_length) 1302 uint16_t filename_length)
1303{ 1303{
1304 if (friend_not_valid(m, friendnumber)) 1304 if (friend_not_valid(m, friendnumber))
@@ -1321,7 +1321,7 @@ int file_sendrequest(Messenger *m, int friendnumber, uint8_t filenumber, uint64_
1321 * return file number on success 1321 * return file number on success
1322 * return -1 on failure 1322 * return -1 on failure
1323 */ 1323 */
1324int new_filesender(Messenger *m, int friendnumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length) 1324int new_filesender(Messenger *m, int32_t friendnumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length)
1325{ 1325{
1326 if (friend_not_valid(m, friendnumber)) 1326 if (friend_not_valid(m, friendnumber))
1327 return -1; 1327 return -1;
@@ -1351,7 +1351,7 @@ int new_filesender(Messenger *m, int friendnumber, uint64_t filesize, uint8_t *f
1351 * return 0 on success 1351 * return 0 on success
1352 * return -1 on failure 1352 * return -1 on failure
1353 */ 1353 */
1354int file_control(Messenger *m, int friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t message_id, 1354int file_control(Messenger *m, int32_t friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t message_id,
1355 uint8_t *data, uint16_t length) 1355 uint8_t *data, uint16_t length)
1356{ 1356{
1357 if (length > MAX_DATA_SIZE - 3) 1357 if (length > MAX_DATA_SIZE - 3)
@@ -1439,7 +1439,7 @@ int file_control(Messenger *m, int friendnumber, uint8_t send_receive, uint8_t f
1439 * return 0 on success 1439 * return 0 on success
1440 * return -1 on failure 1440 * return -1 on failure
1441 */ 1441 */
1442int file_data(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length) 1442int file_data(Messenger *m, int32_t friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length)
1443{ 1443{
1444 if (length > MAX_DATA_SIZE - 1) 1444 if (length > MAX_DATA_SIZE - 1)
1445 return -1; 1445 return -1;
@@ -1474,7 +1474,7 @@ int file_data(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t *data,
1474 * return number of bytes remaining to be sent/received on success 1474 * return number of bytes remaining to be sent/received on success
1475 * return 0 on failure 1475 * return 0 on failure
1476 */ 1476 */
1477uint64_t file_dataremaining(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t send_receive) 1477uint64_t file_dataremaining(Messenger *m, int32_t friendnumber, uint8_t filenumber, uint8_t send_receive)
1478{ 1478{
1479 if (friend_not_valid(m, friendnumber)) 1479 if (friend_not_valid(m, friendnumber))
1480 return 0; 1480 return 0;
@@ -1497,7 +1497,7 @@ uint64_t file_dataremaining(Messenger *m, int friendnumber, uint8_t filenumber,
1497/* Run this when the friend disconnects. 1497/* Run this when the friend disconnects.
1498 * Sets all current file transfers to broken. 1498 * Sets all current file transfers to broken.
1499 */ 1499 */
1500static void break_files(Messenger *m, int friendnumber) 1500static void break_files(Messenger *m, int32_t friendnumber)
1501{ 1501{
1502 uint32_t i; 1502 uint32_t i;
1503 1503
@@ -1510,7 +1510,7 @@ static void break_files(Messenger *m, int friendnumber)
1510 } 1510 }
1511} 1511}
1512 1512
1513static int handle_filecontrol(Messenger *m, int friendnumber, uint8_t receive_send, uint8_t filenumber, 1513static int handle_filecontrol(Messenger *m, int32_t friendnumber, uint8_t receive_send, uint8_t filenumber,
1514 uint8_t message_id, uint8_t *data, 1514 uint8_t message_id, uint8_t *data,
1515 uint16_t length) 1515 uint16_t length)
1516{ 1516{
@@ -1600,7 +1600,7 @@ static int handle_filecontrol(Messenger *m, int friendnumber, uint8_t receive_se
1600 * 1600 *
1601 * Function(Messenger *m, int friendnumber, uint8_t *data, uint16_t length, void *userdata) 1601 * Function(Messenger *m, int friendnumber, uint8_t *data, uint16_t length, void *userdata)
1602 */ 1602 */
1603void m_callback_msi_packet(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), 1603void m_callback_msi_packet(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
1604 void *userdata) 1604 void *userdata)
1605{ 1605{
1606 m->msi_packet = function; 1606 m->msi_packet = function;
@@ -1612,12 +1612,12 @@ void m_callback_msi_packet(Messenger *m, void (*function)(Messenger *m, int, uin
1612 * return 1 on success 1612 * return 1 on success
1613 * return 0 on failure 1613 * return 0 on failure
1614 */ 1614 */
1615int m_msi_packet(Messenger *m, int friendnumber, uint8_t *data, uint16_t length) 1615int m_msi_packet(Messenger *m, int32_t friendnumber, uint8_t *data, uint16_t length)
1616{ 1616{
1617 return write_cryptpacket_id(m, friendnumber, PACKET_ID_MSI, data, length); 1617 return write_cryptpacket_id(m, friendnumber, PACKET_ID_MSI, data, length);
1618} 1618}
1619 1619
1620static int friendnum_from_ip_port(Messenger *m, IP_Port ip_port) 1620static int32_t friendnum_from_ip_port(Messenger *m, IP_Port ip_port)
1621{ 1621{
1622 uint32_t i; 1622 uint32_t i;
1623 1623
@@ -1632,7 +1632,7 @@ static int friendnum_from_ip_port(Messenger *m, IP_Port ip_port)
1632static int handle_custom_user_packet(void *object, IP_Port source, uint8_t *packet, uint32_t length) 1632static int handle_custom_user_packet(void *object, IP_Port source, uint8_t *packet, uint32_t length)
1633{ 1633{
1634 Messenger *m = object; 1634 Messenger *m = object;
1635 int friend_num = friendnum_from_ip_port(m, source); 1635 int32_t friend_num = friendnum_from_ip_port(m, source);
1636 1636
1637 if (friend_num == -1) 1637 if (friend_num == -1)
1638 return 1; 1638 return 1;
@@ -1645,7 +1645,7 @@ static int handle_custom_user_packet(void *object, IP_Port source, uint8_t *pack
1645} 1645}
1646 1646
1647 1647
1648int custom_user_packet_registerhandler(Messenger *m, int friendnumber, uint8_t byte, packet_handler_callback cb, 1648int custom_user_packet_registerhandler(Messenger *m, int32_t friendnumber, uint8_t byte, packet_handler_callback cb,
1649 void *object) 1649 void *object)
1650{ 1650{
1651 if (friend_not_valid(m, friendnumber)) 1651 if (friend_not_valid(m, friendnumber))
@@ -1660,7 +1660,7 @@ int custom_user_packet_registerhandler(Messenger *m, int friendnumber, uint8_t b
1660 return 0; 1660 return 0;
1661} 1661}
1662 1662
1663int send_custom_user_packet(Messenger *m, int friendnumber, uint8_t *data, uint32_t length) 1663int send_custom_user_packet(Messenger *m, int32_t friendnumber, uint8_t *data, uint32_t length)
1664{ 1664{
1665 IP_Port ip_port = get_friend_ipport(m, friendnumber); 1665 IP_Port ip_port = get_friend_ipport(m, friendnumber);
1666 1666
@@ -2573,7 +2573,7 @@ uint32_t get_num_online_friends(Messenger *m)
2573 * Otherwise, returns the number of elements copied. 2573 * Otherwise, returns the number of elements copied.
2574 * If the array was too small, the contents 2574 * If the array was too small, the contents
2575 * of out_list will be truncated to list_size. */ 2575 * of out_list will be truncated to list_size. */
2576uint32_t copy_friendlist(Messenger *m, int *out_list, uint32_t list_size) 2576uint32_t copy_friendlist(Messenger *m, int32_t *out_list, uint32_t list_size)
2577{ 2577{
2578 if (!out_list) 2578 if (!out_list)
2579 return 0; 2579 return 0;
@@ -2605,7 +2605,7 @@ uint32_t copy_friendlist(Messenger *m, int *out_list, uint32_t list_size)
2605 * retun 0 if success. 2605 * retun 0 if success.
2606 * return -1 if failure. 2606 * return -1 if failure.
2607 */ 2607 */
2608int get_friendlist(Messenger *m, int **out_list, uint32_t *out_list_length) 2608int get_friendlist(Messenger *m, int32_t **out_list, uint32_t *out_list_length)
2609{ 2609{
2610 uint32_t i; 2610 uint32_t i;
2611 2611
@@ -2616,7 +2616,7 @@ int get_friendlist(Messenger *m, int **out_list, uint32_t *out_list_length)
2616 return 0; 2616 return 0;
2617 } 2617 }
2618 2618
2619 *out_list = malloc(m->numfriends * sizeof(int)); 2619 *out_list = malloc(m->numfriends * sizeof(int32_t));
2620 2620
2621 if (*out_list == NULL) { 2621 if (*out_list == NULL) {
2622 return -1; 2622 return -1;
diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h
index e6851800..8474bbe7 100644
--- a/toxcore/Messenger.h
+++ b/toxcore/Messenger.h
@@ -198,28 +198,28 @@ typedef struct Messenger {
198 198
199 uint64_t last_LANdiscovery; 199 uint64_t last_LANdiscovery;
200 200
201 void (*friend_message)(struct Messenger *m, int, uint8_t *, uint16_t, void *); 201 void (*friend_message)(struct Messenger *m, int32_t, uint8_t *, uint16_t, void *);
202 void *friend_message_userdata; 202 void *friend_message_userdata;
203 void (*friend_action)(struct Messenger *m, int, uint8_t *, uint16_t, void *); 203 void (*friend_action)(struct Messenger *m, int32_t, uint8_t *, uint16_t, void *);
204 void *friend_action_userdata; 204 void *friend_action_userdata;
205 void (*friend_namechange)(struct Messenger *m, int, uint8_t *, uint16_t, void *); 205 void (*friend_namechange)(struct Messenger *m, int32_t, uint8_t *, uint16_t, void *);
206 void *friend_namechange_userdata; 206 void *friend_namechange_userdata;
207 void (*friend_statusmessagechange)(struct Messenger *m, int, uint8_t *, uint16_t, void *); 207 void (*friend_statusmessagechange)(struct Messenger *m, int32_t, uint8_t *, uint16_t, void *);
208 void *friend_statusmessagechange_userdata; 208 void *friend_statusmessagechange_userdata;
209 void (*friend_userstatuschange)(struct Messenger *m, int, USERSTATUS, void *); 209 void (*friend_userstatuschange)(struct Messenger *m, int32_t, USERSTATUS, void *);
210 void *friend_userstatuschange_userdata; 210 void *friend_userstatuschange_userdata;
211 void (*friend_typingchange)(struct Messenger *m, int, int, void *); 211 void (*friend_typingchange)(struct Messenger *m, int32_t, int, void *);
212 void *friend_typingchange_userdata; 212 void *friend_typingchange_userdata;
213 void (*read_receipt)(struct Messenger *m, int, uint32_t, void *); 213 void (*read_receipt)(struct Messenger *m, int32_t, uint32_t, void *);
214 void *read_receipt_userdata; 214 void *read_receipt_userdata;
215 void (*friend_statuschange)(struct Messenger *m, int, uint8_t, void *); 215 void (*friend_statuschange)(struct Messenger *m, int32_t, uint8_t, void *);
216 void *friend_statuschange_userdata; 216 void *friend_statuschange_userdata;
217 void (*friend_connectionstatuschange)(struct Messenger *m, int, uint8_t, void *); 217 void (*friend_connectionstatuschange)(struct Messenger *m, int32_t, uint8_t, void *);
218 void *friend_connectionstatuschange_userdata; 218 void *friend_connectionstatuschange_userdata;
219 void (*friend_connectionstatuschange_internal)(struct Messenger *m, int, uint8_t, void *); 219 void (*friend_connectionstatuschange_internal)(struct Messenger *m, int32_t, uint8_t, void *);
220 void *friend_connectionstatuschange_internal_userdata; 220 void *friend_connectionstatuschange_internal_userdata;
221 221
222 void (*group_invite)(struct Messenger *m, int, uint8_t *, void *); 222 void (*group_invite)(struct Messenger *m, int32_t, uint8_t *, void *);
223 void *group_invite_userdata; 223 void *group_invite_userdata;
224 void (*group_message)(struct Messenger *m, int, int, uint8_t *, uint16_t, void *); 224 void (*group_message)(struct Messenger *m, int, int, uint8_t *, uint16_t, void *);
225 void *group_message_userdata; 225 void *group_message_userdata;
@@ -228,14 +228,14 @@ typedef struct Messenger {
228 void (*group_namelistchange)(struct Messenger *m, int, int, uint8_t, void *); 228 void (*group_namelistchange)(struct Messenger *m, int, int, uint8_t, void *);
229 void *group_namelistchange_userdata; 229 void *group_namelistchange_userdata;
230 230
231 void (*file_sendrequest)(struct Messenger *m, int, uint8_t, uint64_t, uint8_t *, uint16_t, void *); 231 void (*file_sendrequest)(struct Messenger *m, int32_t, uint8_t, uint64_t, uint8_t *, uint16_t, void *);
232 void *file_sendrequest_userdata; 232 void *file_sendrequest_userdata;
233 void (*file_filecontrol)(struct Messenger *m, int, uint8_t, uint8_t, uint8_t, uint8_t *, uint16_t, void *); 233 void (*file_filecontrol)(struct Messenger *m, int32_t, uint8_t, uint8_t, uint8_t, uint8_t *, uint16_t, void *);
234 void *file_filecontrol_userdata; 234 void *file_filecontrol_userdata;
235 void (*file_filedata)(struct Messenger *m, int, uint8_t, uint8_t *, uint16_t length, void *); 235 void (*file_filedata)(struct Messenger *m, int32_t, uint8_t, uint8_t *, uint16_t length, void *);
236 void *file_filedata_userdata; 236 void *file_filedata_userdata;
237 237
238 void (*msi_packet)(struct Messenger *m, int, uint8_t *, uint16_t, void *); 238 void (*msi_packet)(struct Messenger *m, int32_t, uint8_t *, uint16_t, void *);
239 void *msi_packet_userdata; 239 void *msi_packet_userdata;
240 240
241} Messenger; 241} Messenger;
@@ -262,19 +262,19 @@ void getaddress(Messenger *m, uint8_t *address);
262 * (the nospam for that friend was set to the new one). 262 * (the nospam for that friend was set to the new one).
263 * return -8 if increasing the friend list size fails. 263 * return -8 if increasing the friend list size fails.
264 */ 264 */
265int m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length); 265int32_t m_addfriend(Messenger *m, uint8_t *address, uint8_t *data, uint16_t length);
266 266
267 267
268/* Add a friend without sending a friendrequest. 268/* Add a friend without sending a friendrequest.
269 * return the friend number if success. 269 * return the friend number if success.
270 * return -1 if failure. 270 * return -1 if failure.
271 */ 271 */
272int m_addfriend_norequest(Messenger *m, uint8_t *client_id); 272int32_t m_addfriend_norequest(Messenger *m, uint8_t *client_id);
273 273
274/* return the friend id associated to that client id. 274/* return the friend number associated to that client id.
275 * return -1 if no such friend. 275 * return -1 if no such friend.
276 */ 276 */
277int getfriend_id(Messenger *m, uint8_t *client_id); 277int32_t getfriend_id(Messenger *m, uint8_t *client_id);
278 278
279/* Copies the public key associated to that friend id into client_id buffer. 279/* Copies the public key associated to that friend id into client_id buffer.
280 * Make sure that client_id is of size CLIENT_ID_SIZE. 280 * Make sure that client_id is of size CLIENT_ID_SIZE.
@@ -282,10 +282,14 @@ int getfriend_id(Messenger *m, uint8_t *client_id);
282 * return 0 if success 282 * return 0 if success
283 * return -1 if failure 283 * return -1 if failure
284 */ 284 */
285int getclient_id(Messenger *m, int friend_id, uint8_t *client_id); 285int getclient_id(Messenger *m, int32_t friendnumber, uint8_t *client_id);
286 286
287/* Remove a friend. */ 287/* Remove a friend.
288int m_delfriend(Messenger *m, int friendnumber); 288 *
289 * return 0 if success
290 * return -1 if failure
291 */
292int m_delfriend(Messenger *m, int32_t friendnumber);
289 293
290/* Checks friend's connecting status. 294/* Checks friend's connecting status.
291 * 295 *
@@ -293,14 +297,14 @@ int m_delfriend(Messenger *m, int friendnumber);
293 * return 0 if friend is not connected to us (Offline). 297 * return 0 if friend is not connected to us (Offline).
294 * return -1 on failure. 298 * return -1 on failure.
295 */ 299 */
296int m_get_friend_connectionstatus(Messenger *m, int friendnumber); 300int m_get_friend_connectionstatus(Messenger *m, int32_t friendnumber);
297 301
298/* Checks if there exists a friend with given friendnumber. 302/* Checks if there exists a friend with given friendnumber.
299 * 303 *
300 * return 1 if friend exists. 304 * return 1 if friend exists.
301 * return 0 if friend doesn't exist. 305 * return 0 if friend doesn't exist.
302 */ 306 */
303int m_friend_exists(Messenger *m, int friendnumber); 307int m_friend_exists(Messenger *m, int32_t friendnumber);
304 308
305/* Send a text chat message to an online friend. 309/* Send a text chat message to an online friend.
306 * 310 *
@@ -312,8 +316,8 @@ int m_friend_exists(Messenger *m, int friendnumber);
312 * m_sendmessage_withid will send a message with the id of your choosing, 316 * m_sendmessage_withid will send a message with the id of your choosing,
313 * however we can generate an id for you by calling plain m_sendmessage. 317 * however we can generate an id for you by calling plain m_sendmessage.
314 */ 318 */
315uint32_t m_sendmessage(Messenger *m, int friendnumber, uint8_t *message, uint32_t length); 319uint32_t m_sendmessage(Messenger *m, int32_t friendnumber, uint8_t *message, uint32_t length);
316uint32_t m_sendmessage_withid(Messenger *m, int friendnumber, uint32_t theid, uint8_t *message, uint32_t length); 320uint32_t m_sendmessage_withid(Messenger *m, int32_t friendnumber, uint32_t theid, uint8_t *message, uint32_t length);
317 321
318/* Send an action to an online friend. 322/* Send an action to an online friend.
319 * 323 *
@@ -325,8 +329,8 @@ uint32_t m_sendmessage_withid(Messenger *m, int friendnumber, uint32_t theid, ui
325 * m_sendaction_withid will send an action message with the id of your choosing, 329 * m_sendaction_withid will send an action message with the id of your choosing,
326 * however we can generate an id for you by calling plain m_sendaction. 330 * however we can generate an id for you by calling plain m_sendaction.
327 */ 331 */
328uint32_t m_sendaction(Messenger *m, int friendnumber, uint8_t *action, uint32_t length); 332uint32_t m_sendaction(Messenger *m, int32_t friendnumber, uint8_t *action, uint32_t length);
329uint32_t m_sendaction_withid(Messenger *m, int friendnumber, uint32_t theid, uint8_t *action, uint32_t length); 333uint32_t m_sendaction_withid(Messenger *m, int32_t friendnumber, uint32_t theid, uint8_t *action, uint32_t length);
330 334
331/* Set the name and name_length of a friend. 335/* Set the name and name_length of a friend.
332 * name must be a string of maximum MAX_NAME_LENGTH length. 336 * name must be a string of maximum MAX_NAME_LENGTH length.
@@ -336,7 +340,7 @@ uint32_t m_sendaction_withid(Messenger *m, int friendnumber, uint32_t theid, uin
336 * return 0 if success. 340 * return 0 if success.
337 * return -1 if failure. 341 * return -1 if failure.
338 */ 342 */
339int setfriendname(Messenger *m, int friendnumber, uint8_t *name, uint16_t length); 343int setfriendname(Messenger *m, int32_t friendnumber, uint8_t *name, uint16_t length);
340 344
341/* Set our nickname. 345/* Set our nickname.
342 * name must be a string of maximum MAX_NAME_LENGTH length. 346 * name must be a string of maximum MAX_NAME_LENGTH length.
@@ -351,13 +355,12 @@ int setname(Messenger *m, uint8_t *name, uint16_t length);
351/* 355/*
352 * Get your nickname. 356 * Get your nickname.
353 * m - The messanger context to use. 357 * m - The messanger context to use.
354 * name - Pointer to a string for the name. 358 * name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH bytes.
355 * nlen - The length of the string buffer.
356 * 359 *
357 * return length of the name. 360 * return length of the name.
358 * return 0 on error. 361 * return 0 on error.
359 */ 362 */
360uint16_t getself_name(Messenger *m, uint8_t *name, uint16_t nlen); 363uint16_t getself_name(Messenger *m, uint8_t *name);
361 364
362/* Get name of friendnumber and put it in name. 365/* Get name of friendnumber and put it in name.
363 * name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH (128) bytes. 366 * name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH (128) bytes.
@@ -365,12 +368,12 @@ uint16_t getself_name(Messenger *m, uint8_t *name, uint16_t nlen);
365 * return length of name if success. 368 * return length of name if success.
366 * return -1 if failure. 369 * return -1 if failure.
367 */ 370 */
368int getname(Messenger *m, int friendnumber, uint8_t *name); 371int getname(Messenger *m, int32_t friendnumber, uint8_t *name);
369 372
370/* returns valid ip port of connected friend on success 373/* returns valid ip port of connected friend on success
371 * returns zeroed out IP_Port on failure 374 * returns zeroed out IP_Port on failure
372 */ 375 */
373IP_Port get_friend_ipport(Messenger *m, int friendnumber); 376IP_Port get_friend_ipport(Messenger *m, int32_t friendnumber);
374 377
375/* Set our user status. 378/* Set our user status.
376 * You are responsible for freeing status after. 379 * You are responsible for freeing status after.
@@ -384,7 +387,7 @@ int m_set_userstatus(Messenger *m, USERSTATUS status);
384/* return the length of friendnumber's status message, including null. 387/* return the length of friendnumber's status message, including null.
385 * Pass it into malloc. 388 * Pass it into malloc.
386 */ 389 */
387int m_get_statusmessage_size(Messenger *m, int friendnumber); 390int m_get_statusmessage_size(Messenger *m, int32_t friendnumber);
388 391
389/* Copy friendnumber's status message into buf, truncating if size is over maxlen. 392/* Copy friendnumber's status message into buf, truncating if size is over maxlen.
390 * Get the size you need to allocate from m_get_statusmessage_size. 393 * Get the size you need to allocate from m_get_statusmessage_size.
@@ -393,7 +396,7 @@ int m_get_statusmessage_size(Messenger *m, int friendnumber);
393 * returns the length of the copied data on success 396 * returns the length of the copied data on success
394 * retruns -1 on failure. 397 * retruns -1 on failure.
395 */ 398 */
396int m_copy_statusmessage(Messenger *m, int friendnumber, uint8_t *buf, uint32_t maxlen); 399int m_copy_statusmessage(Messenger *m, int32_t friendnumber, uint8_t *buf, uint32_t maxlen);
397int m_copy_self_statusmessage(Messenger *m, uint8_t *buf, uint32_t maxlen); 400int m_copy_self_statusmessage(Messenger *m, uint8_t *buf, uint32_t maxlen);
398 401
399/* return one of USERSTATUS values. 402/* return one of USERSTATUS values.
@@ -401,7 +404,7 @@ int m_copy_self_statusmessage(Messenger *m, uint8_t *buf, uint32_t maxlen);
401 * As above, the self variant will return our own USERSTATUS. 404 * As above, the self variant will return our own USERSTATUS.
402 * If friendnumber is invalid, this shall return USERSTATUS_INVALID. 405 * If friendnumber is invalid, this shall return USERSTATUS_INVALID.
403 */ 406 */
404USERSTATUS m_get_userstatus(Messenger *m, int friendnumber); 407USERSTATUS m_get_userstatus(Messenger *m, int32_t friendnumber);
405USERSTATUS m_get_self_userstatus(Messenger *m); 408USERSTATUS m_get_self_userstatus(Messenger *m);
406 409
407/* Set our typing status for a friend. 410/* Set our typing status for a friend.
@@ -410,19 +413,19 @@ USERSTATUS m_get_self_userstatus(Messenger *m);
410 * returns 0 on success. 413 * returns 0 on success.
411 * returns -1 on failure. 414 * returns -1 on failure.
412 */ 415 */
413int m_set_usertyping(Messenger *m, int friendnumber, uint8_t is_typing); 416int m_set_usertyping(Messenger *m, int32_t friendnumber, uint8_t is_typing);
414 417
415/* Get the typing status of a friend. 418/* Get the typing status of a friend.
416 * 419 *
417 * returns 0 if friend is not typing. 420 * returns 0 if friend is not typing.
418 * returns 1 if friend is typing. 421 * returns 1 if friend is typing.
419 */ 422 */
420int m_get_istyping(Messenger *m, int friendnumber); 423int m_get_istyping(Messenger *m, int32_t friendnumber);
421 424
422/* Sets whether we send read receipts for friendnumber. 425/* Sets whether we send read receipts for friendnumber.
423 * This function is not lazy, and it will fail if yesno is not (0 or 1). 426 * This function is not lazy, and it will fail if yesno is not (0 or 1).
424 */ 427 */
425void m_set_sends_receipts(Messenger *m, int friendnumber, int yesno); 428void m_set_sends_receipts(Messenger *m, int32_t friendnumber, int yesno);
426 429
427/* Set the function that will be executed when a friend request is received. 430/* Set the function that will be executed when a friend request is received.
428 * Function format is function(uint8_t * public_key, uint8_t * data, uint16_t length) 431 * Function format is function(uint8_t * public_key, uint8_t * data, uint16_t length)
@@ -430,43 +433,44 @@ void m_set_sends_receipts(Messenger *m, int friendnumber, int yesno);
430void m_callback_friendrequest(Messenger *m, void (*function)(uint8_t *, uint8_t *, uint16_t, void *), void *userdata); 433void m_callback_friendrequest(Messenger *m, void (*function)(uint8_t *, uint8_t *, uint16_t, void *), void *userdata);
431 434
432/* Set the function that will be executed when a message from a friend is received. 435/* Set the function that will be executed when a message from a friend is received.
433 * Function format is: function(int friendnumber, uint8_t * message, uint32_t length) 436 * Function format is: function(int32_t friendnumber, uint8_t * message, uint32_t length)
434 */ 437 */
435void m_callback_friendmessage(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), 438void m_callback_friendmessage(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
436 void *userdata); 439 void *userdata);
437 440
438/* Set the function that will be executed when an action from a friend is received. 441/* Set the function that will be executed when an action from a friend is received.
439 * Function format is: function(int friendnumber, uint8_t * action, uint32_t length) 442 * Function format is: function(int32_t friendnumber, uint8_t * action, uint32_t length)
440 */ 443 */
441void m_callback_action(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), void *userdata); 444void m_callback_action(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
445 void *userdata);
442 446
443/* Set the callback for name changes. 447/* Set the callback for name changes.
444 * Function(int friendnumber, uint8_t *newname, uint16_t length) 448 * Function(int32_t friendnumber, uint8_t *newname, uint16_t length)
445 * You are not responsible for freeing newname. 449 * You are not responsible for freeing newname.
446 */ 450 */
447void m_callback_namechange(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), 451void m_callback_namechange(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
448 void *userdata); 452 void *userdata);
449 453
450/* Set the callback for status message changes. 454/* Set the callback for status message changes.
451 * Function(int friendnumber, uint8_t *newstatus, uint16_t length) 455 * Function(int32_t friendnumber, uint8_t *newstatus, uint16_t length)
452 * 456 *
453 * You are not responsible for freeing newstatus 457 * You are not responsible for freeing newstatus
454 */ 458 */
455void m_callback_statusmessage(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), 459void m_callback_statusmessage(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
456 void *userdata); 460 void *userdata);
457 461
458/* Set the callback for status type changes. 462/* Set the callback for status type changes.
459 * Function(int friendnumber, USERSTATUS kind) 463 * Function(int32_t friendnumber, USERSTATUS kind)
460 */ 464 */
461void m_callback_userstatus(Messenger *m, void (*function)(Messenger *m, int, USERSTATUS, void *), void *userdata); 465void m_callback_userstatus(Messenger *m, void (*function)(Messenger *m, int32_t, USERSTATUS, void *), void *userdata);
462 466
463/* Set the callback for typing changes. 467/* Set the callback for typing changes.
464 * Function(int friendnumber, int is_typing) 468 * Function(int32_t friendnumber, int is_typing)
465 */ 469 */
466void m_callback_typingchange(Messenger *m, void(*function)(Messenger *m, int, int, void *), void *userdata); 470void m_callback_typingchange(Messenger *m, void(*function)(Messenger *m, int32_t, int, void *), void *userdata);
467 471
468/* Set the callback for read receipts. 472/* Set the callback for read receipts.
469 * Function(int friendnumber, uint32_t receipt) 473 * Function(int32_t friendnumber, uint32_t receipt)
470 * 474 *
471 * If you are keeping a record of returns from m_sendmessage, 475 * If you are keeping a record of returns from m_sendmessage,
472 * receipt might be one of those values, meaning the message 476 * receipt might be one of those values, meaning the message
@@ -474,10 +478,10 @@ void m_callback_typingchange(Messenger *m, void(*function)(Messenger *m, int, in
474 * Since core doesn't track ids for you, receipt may not correspond to any message. 478 * Since core doesn't track ids for you, receipt may not correspond to any message.
475 * In that case, you should discard it. 479 * In that case, you should discard it.
476 */ 480 */
477void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, int, uint32_t, void *), void *userdata); 481void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, int32_t, uint32_t, void *), void *userdata);
478 482
479/* Set the callback for connection status changes. 483/* Set the callback for connection status changes.
480 * function(int friendnumber, uint8_t status) 484 * function(int32_t friendnumber, uint8_t status)
481 * 485 *
482 * Status: 486 * Status:
483 * 0 -- friend went offline after being previously online. 487 * 0 -- friend went offline after being previously online.
@@ -487,18 +491,19 @@ void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, int, u
487 * being previously online" part. 491 * being previously online" part.
488 * It's assumed that when adding friends, their connection status is offline. 492 * It's assumed that when adding friends, their connection status is offline.
489 */ 493 */
490void m_callback_connectionstatus(Messenger *m, void (*function)(Messenger *m, int, uint8_t, void *), void *userdata); 494void m_callback_connectionstatus(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, void *),
495 void *userdata);
491/* Same as previous but for internal A/V core usage only */ 496/* Same as previous but for internal A/V core usage only */
492void m_callback_connectionstatus_internal_av(Messenger *m, void (*function)(Messenger *m, int, uint8_t, void *), 497void m_callback_connectionstatus_internal_av(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, void *),
493 void *userdata); 498 void *userdata);
494 499
495/**********GROUP CHATS************/ 500/**********GROUP CHATS************/
496 501
497/* Set the callback for group invites. 502/* Set the callback for group invites.
498 * 503 *
499 * Function(Messenger *m, int friendnumber, uint8_t *group_public_key, void *userdata) 504 * Function(Messenger *m, int32_t friendnumber, uint8_t *group_public_key, void *userdata)
500 */ 505 */
501void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, void *), void *userdata); 506void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, void *), void *userdata);
502 507
503/* Set the callback for group messages. 508/* Set the callback for group messages.
504 * 509 *
@@ -548,14 +553,14 @@ int m_group_peername(Messenger *m, int groupnumber, int peernumber, uint8_t *nam
548 * return 0 on success 553 * return 0 on success
549 * return -1 on failure 554 * return -1 on failure
550 */ 555 */
551int invite_friend(Messenger *m, int friendnumber, int groupnumber); 556int invite_friend(Messenger *m, int32_t friendnumber, int groupnumber);
552 557
553/* Join a group (you need to have been invited first.) 558/* Join a group (you need to have been invited first.)
554 * 559 *
555 * returns group number on success 560 * returns group number on success
556 * returns -1 on failure. 561 * returns -1 on failure.
557 */ 562 */
558int join_groupchat(Messenger *m, int friendnumber, uint8_t *friend_group_public_key); 563int join_groupchat(Messenger *m, int32_t friendnumber, uint8_t *friend_group_public_key);
559 564
560/* send a group message 565/* send a group message
561 * return 0 on success 566 * return 0 on success
@@ -589,25 +594,27 @@ int group_names(Messenger *m, int groupnumber, uint8_t names[][MAX_NICK_BYTES],
589 594
590/* Set the callback for file send requests. 595/* Set the callback for file send requests.
591 * 596 *
592 * Function(Tox *tox, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length, void *userdata) 597 * Function(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length, void *userdata)
593 */ 598 */
594void callback_file_sendrequest(Messenger *m, void (*function)(Messenger *m, int, uint8_t, uint64_t, uint8_t *, uint16_t, 599void callback_file_sendrequest(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, uint64_t, uint8_t *,
600 uint16_t,
595 void *), void *userdata); 601 void *), void *userdata);
596 602
597/* Set the callback for file control requests. 603/* Set the callback for file control requests.
598 * 604 *
599 * Function(Tox *tox, int friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t control_type, uint8_t *data, uint16_t length, void *userdata) 605 * Function(Tox *tox, int32_t friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t control_type, uint8_t *data, uint16_t length, void *userdata)
600 * 606 *
601 */ 607 */
602void callback_file_control(Messenger *m, void (*function)(Messenger *m, int, uint8_t, uint8_t, uint8_t, uint8_t *, 608void callback_file_control(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, uint8_t, uint8_t, uint8_t *,
603 uint16_t, void *), void *userdata); 609 uint16_t, void *), void *userdata);
604 610
605/* Set the callback for file data. 611/* Set the callback for file data.
606 * 612 *
607 * Function(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata) 613 * Function(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata)
608 * 614 *
609 */ 615 */
610void callback_file_data(Messenger *m, void (*function)(Messenger *m, int, uint8_t, uint8_t *, uint16_t length, void *), 616void callback_file_data(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t, uint8_t *, uint16_t length,
617 void *),
611 void *userdata); 618 void *userdata);
612 619
613/* Send a file send request. 620/* Send a file send request.
@@ -615,7 +622,7 @@ void callback_file_data(Messenger *m, void (*function)(Messenger *m, int, uint8_
615 * return 1 on success 622 * return 1 on success
616 * return 0 on failure 623 * return 0 on failure
617 */ 624 */
618int file_sendrequest(Messenger *m, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, 625int file_sendrequest(Messenger *m, int32_t friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename,
619 uint16_t filename_length); 626 uint16_t filename_length);
620 627
621/* Send a file send request. 628/* Send a file send request.
@@ -623,7 +630,7 @@ int file_sendrequest(Messenger *m, int friendnumber, uint8_t filenumber, uint64_
623 * return file number on success 630 * return file number on success
624 * return -1 on failure 631 * return -1 on failure
625 */ 632 */
626int new_filesender(Messenger *m, int friendnumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length); 633int new_filesender(Messenger *m, int32_t friendnumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length);
627 634
628/* Send a file control request. 635/* Send a file control request.
629 * send_receive is 0 if we want the control packet to target a sending file, 1 if it targets a receiving file. 636 * send_receive is 0 if we want the control packet to target a sending file, 1 if it targets a receiving file.
@@ -631,7 +638,7 @@ int new_filesender(Messenger *m, int friendnumber, uint64_t filesize, uint8_t *f
631 * return 1 on success 638 * return 1 on success
632 * return 0 on failure 639 * return 0 on failure
633 */ 640 */
634int file_control(Messenger *m, int friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t message_id, 641int file_control(Messenger *m, int32_t friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t message_id,
635 uint8_t *data, uint16_t length); 642 uint8_t *data, uint16_t length);
636 643
637/* Send file data. 644/* Send file data.
@@ -639,7 +646,7 @@ int file_control(Messenger *m, int friendnumber, uint8_t send_receive, uint8_t f
639 * return 1 on success 646 * return 1 on success
640 * return 0 on failure 647 * return 0 on failure
641 */ 648 */
642int file_data(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length); 649int file_data(Messenger *m, int32_t friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length);
643 650
644/* Give the number of bytes left to be sent/received. 651/* Give the number of bytes left to be sent/received.
645 * 652 *
@@ -648,15 +655,15 @@ int file_data(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t *data,
648 * return number of bytes remaining to be sent/received on success 655 * return number of bytes remaining to be sent/received on success
649 * return 0 on failure 656 * return 0 on failure
650 */ 657 */
651uint64_t file_dataremaining(Messenger *m, int friendnumber, uint8_t filenumber, uint8_t send_receive); 658uint64_t file_dataremaining(Messenger *m, int32_t friendnumber, uint8_t filenumber, uint8_t send_receive);
652 659
653/*************** A/V related ******************/ 660/*************** A/V related ******************/
654 661
655/* Set the callback for msi packets. 662/* Set the callback for msi packets.
656 * 663 *
657 * Function(Messenger *m, int friendnumber, uint8_t *data, uint16_t length, void *userdata) 664 * Function(Messenger *m, int32_t friendnumber, uint8_t *data, uint16_t length, void *userdata)
658 */ 665 */
659void m_callback_msi_packet(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), 666void m_callback_msi_packet(Messenger *m, void (*function)(Messenger *m, int32_t, uint8_t *, uint16_t, void *),
660 void *userdata); 667 void *userdata);
661 668
662/* Send an msi packet. 669/* Send an msi packet.
@@ -664,7 +671,7 @@ void m_callback_msi_packet(Messenger *m, void (*function)(Messenger *m, int, uin
664 * return 1 on success 671 * return 1 on success
665 * return 0 on failure 672 * return 0 on failure
666 */ 673 */
667int m_msi_packet(Messenger *m, int friendnumber, uint8_t *data, uint16_t length); 674int m_msi_packet(Messenger *m, int32_t friendnumber, uint8_t *data, uint16_t length);
668 675
669/**********************************************/ 676/**********************************************/
670 677
@@ -673,7 +680,7 @@ int m_msi_packet(Messenger *m, int friendnumber, uint8_t *data, uint16_t length)
673 * return -1 on failure. 680 * return -1 on failure.
674 * return 0 on success. 681 * return 0 on success.
675 */ 682 */
676int custom_user_packet_registerhandler(Messenger *m, int friendnumber, uint8_t byte, packet_handler_callback cb, 683int custom_user_packet_registerhandler(Messenger *m, int32_t friendnumber, uint8_t byte, packet_handler_callback cb,
677 void *object); 684 void *object);
678 685
679/* High level function to send custom user packets. 686/* High level function to send custom user packets.
@@ -681,7 +688,7 @@ int custom_user_packet_registerhandler(Messenger *m, int friendnumber, uint8_t b
681 * return -1 on failure. 688 * return -1 on failure.
682 * return number of bytes sent on success. 689 * return number of bytes sent on success.
683 */ 690 */
684int send_custom_user_packet(Messenger *m, int friendnumber, uint8_t *data, uint32_t length); 691int send_custom_user_packet(Messenger *m, int32_t friendnumber, uint8_t *data, uint32_t length);
685 692
686/**********************************************/ 693/**********************************************/
687/* Run this at startup. 694/* Run this at startup.
@@ -747,7 +754,7 @@ uint32_t get_num_online_friends(Messenger *m);
747 * Otherwise, returns the number of elements copied. 754 * Otherwise, returns the number of elements copied.
748 * If the array was too small, the contents 755 * If the array was too small, the contents
749 * of out_list will be truncated to list_size. */ 756 * of out_list will be truncated to list_size. */
750uint32_t copy_friendlist(Messenger *m, int *out_list, uint32_t list_size); 757uint32_t copy_friendlist(Messenger *m, int32_t *out_list, uint32_t list_size);
751 758
752/* Allocate and return a list of valid friend id's. List must be freed by the 759/* Allocate and return a list of valid friend id's. List must be freed by the
753 * caller. 760 * caller.
diff --git a/toxcore/tox.c b/toxcore/tox.c
index 0115e827..ae824697 100644
--- a/toxcore/tox.c
+++ b/toxcore/tox.c
@@ -60,7 +60,7 @@ void tox_get_address(Tox *tox, uint8_t *address)
60 * (the nospam for that friend was set to the new one). 60 * (the nospam for that friend was set to the new one).
61 * return FAERR_NOMEM if increasing the friend list size fails. 61 * return FAERR_NOMEM if increasing the friend list size fails.
62 */ 62 */
63int tox_add_friend(Tox *tox, uint8_t *address, uint8_t *data, uint16_t length) 63int32_t tox_add_friend(Tox *tox, uint8_t *address, uint8_t *data, uint16_t length)
64{ 64{
65 Messenger *m = tox; 65 Messenger *m = tox;
66 return m_addfriend(m, address, data, length); 66 return m_addfriend(m, address, data, length);
@@ -71,16 +71,16 @@ int tox_add_friend(Tox *tox, uint8_t *address, uint8_t *data, uint16_t length)
71 * return the friend number if success. 71 * return the friend number if success.
72 * return -1 if failure. 72 * return -1 if failure.
73 */ 73 */
74int tox_add_friend_norequest(Tox *tox, uint8_t *client_id) 74int32_t tox_add_friend_norequest(Tox *tox, uint8_t *client_id)
75{ 75{
76 Messenger *m = tox; 76 Messenger *m = tox;
77 return m_addfriend_norequest(m, client_id); 77 return m_addfriend_norequest(m, client_id);
78} 78}
79 79
80/* return the friend id associated to that client id. 80/* return the friend number associated to that client id.
81 * return -1 if no such friend. 81 * return -1 if no such friend.
82 */ 82 */
83int tox_get_friend_id(Tox *tox, uint8_t *client_id) 83int32_t tox_get_friend_number(Tox *tox, uint8_t *client_id)
84{ 84{
85 Messenger *m = tox; 85 Messenger *m = tox;
86 return getfriend_id(m, client_id); 86 return getfriend_id(m, client_id);
@@ -92,14 +92,14 @@ int tox_get_friend_id(Tox *tox, uint8_t *client_id)
92 * return 0 if success. 92 * return 0 if success.
93 * return -1 if failure. 93 * return -1 if failure.
94 */ 94 */
95int tox_get_client_id(Tox *tox, int friend_id, uint8_t *client_id) 95int tox_get_client_id(Tox *tox, int32_t friendnumber, uint8_t *client_id)
96{ 96{
97 Messenger *m = tox; 97 Messenger *m = tox;
98 return getclient_id(m, friend_id, client_id); 98 return getclient_id(m, friendnumber, client_id);
99} 99}
100 100
101/* Remove a friend. */ 101/* Remove a friend. */
102int tox_del_friend(Tox *tox, int friendnumber) 102int tox_del_friend(Tox *tox, int32_t friendnumber)
103{ 103{
104 Messenger *m = tox; 104 Messenger *m = tox;
105 return m_delfriend(m, friendnumber); 105 return m_delfriend(m, friendnumber);
@@ -111,7 +111,7 @@ int tox_del_friend(Tox *tox, int friendnumber)
111 * return 0 if friend is not connected to us (Offline). 111 * return 0 if friend is not connected to us (Offline).
112 * return -1 on failure. 112 * return -1 on failure.
113 */ 113 */
114int tox_get_friend_connection_status(Tox *tox, int friendnumber) 114int tox_get_friend_connection_status(Tox *tox, int32_t friendnumber)
115{ 115{
116 Messenger *m = tox; 116 Messenger *m = tox;
117 return m_get_friend_connectionstatus(m, friendnumber); 117 return m_get_friend_connectionstatus(m, friendnumber);
@@ -122,7 +122,7 @@ int tox_get_friend_connection_status(Tox *tox, int friendnumber)
122 * return 1 if friend exists. 122 * return 1 if friend exists.
123 * return 0 if friend doesn't exist. 123 * return 0 if friend doesn't exist.
124 */ 124 */
125int tox_friend_exists(Tox *tox, int friendnumber) 125int tox_friend_exists(Tox *tox, int32_t friendnumber)
126{ 126{
127 Messenger *m = tox; 127 Messenger *m = tox;
128 return m_friend_exists(m, friendnumber); 128 return m_friend_exists(m, friendnumber);
@@ -137,13 +137,13 @@ int tox_friend_exists(Tox *tox, int friendnumber)
137 * m_sendmessage_withid will send a message with the id of your choosing, 137 * m_sendmessage_withid will send a message with the id of your choosing,
138 * however we can generate an id for you by calling plain m_sendmessage. 138 * however we can generate an id for you by calling plain m_sendmessage.
139 */ 139 */
140uint32_t tox_send_message(Tox *tox, int friendnumber, uint8_t *message, uint32_t length) 140uint32_t tox_send_message(Tox *tox, int32_t friendnumber, uint8_t *message, uint32_t length)
141{ 141{
142 Messenger *m = tox; 142 Messenger *m = tox;
143 return m_sendmessage(m, friendnumber, message, length); 143 return m_sendmessage(m, friendnumber, message, length);
144} 144}
145 145
146uint32_t tox_send_message_withid(Tox *tox, int friendnumber, uint32_t theid, uint8_t *message, uint32_t length) 146uint32_t tox_send_message_withid(Tox *tox, int32_t friendnumber, uint32_t theid, uint8_t *message, uint32_t length)
147{ 147{
148 Messenger *m = tox; 148 Messenger *m = tox;
149 return m_sendmessage_withid(m, friendnumber, theid, message, length); 149 return m_sendmessage_withid(m, friendnumber, theid, message, length);
@@ -159,13 +159,13 @@ uint32_t tox_send_message_withid(Tox *tox, int friendnumber, uint32_t theid, uin
159 * m_sendaction_withid will send an action message with the id of your choosing, 159 * m_sendaction_withid will send an action message with the id of your choosing,
160 * however we can generate an id for you by calling plain m_sendaction. 160 * however we can generate an id for you by calling plain m_sendaction.
161 */ 161 */
162uint32_t tox_send_action(Tox *tox, int friendnumber, uint8_t *action, uint32_t length) 162uint32_t tox_send_action(Tox *tox, int32_t friendnumber, uint8_t *action, uint32_t length)
163{ 163{
164 Messenger *m = tox; 164 Messenger *m = tox;
165 return m_sendaction(m, friendnumber, action, length); 165 return m_sendaction(m, friendnumber, action, length);
166} 166}
167 167
168uint32_t tox_send_action_withid(Tox *tox, int friendnumber, uint32_t theid, uint8_t *action, uint32_t length) 168uint32_t tox_send_action_withid(Tox *tox, int32_t friendnumber, uint32_t theid, uint8_t *action, uint32_t length)
169{ 169{
170 Messenger *m = tox; 170 Messenger *m = tox;
171 return m_sendaction_withid(m, friendnumber, theid, action, length); 171 return m_sendaction_withid(m, friendnumber, theid, action, length);
@@ -187,16 +187,15 @@ int tox_set_name(Tox *tox, uint8_t *name, uint16_t length)
187 187
188/* Get your nickname. 188/* Get your nickname.
189 * m - The messanger context to use. 189 * m - The messanger context to use.
190 * name - Pointer to a string for the name. 190 * name - Pointer to a string for the name. (must be at least MAX_NAME_LENGTH)
191 * nlen - The length of the string buffer.
192 * 191 *
193 * return length of the name. 192 * return length of the name.
194 * return 0 on error. 193 * return 0 on error.
195 */ 194 */
196uint16_t tox_get_self_name(Tox *tox, uint8_t *name, uint16_t nlen) 195uint16_t tox_get_self_name(Tox *tox, uint8_t *name)
197{ 196{
198 Messenger *m = tox; 197 Messenger *m = tox;
199 return getself_name(m, name, nlen); 198 return getself_name(m, name);
200} 199}
201 200
202/* Get name of friendnumber and put it in name. 201/* Get name of friendnumber and put it in name.
@@ -205,7 +204,7 @@ uint16_t tox_get_self_name(Tox *tox, uint8_t *name, uint16_t nlen)
205 * return length of name (with the NULL terminator) if success. 204 * return length of name (with the NULL terminator) if success.
206 * return -1 if failure. 205 * return -1 if failure.
207 */ 206 */
208int tox_get_name(Tox *tox, int friendnumber, uint8_t *name) 207int tox_get_name(Tox *tox, int32_t friendnumber, uint8_t *name)
209{ 208{
210 Messenger *m = tox; 209 Messenger *m = tox;
211 return getname(m, friendnumber, name); 210 return getname(m, friendnumber, name);
@@ -225,13 +224,13 @@ int tox_set_status_message(Tox *tox, uint8_t *status, uint16_t length)
225int tox_set_user_status(Tox *tox, TOX_USERSTATUS status) 224int tox_set_user_status(Tox *tox, TOX_USERSTATUS status)
226{ 225{
227 Messenger *m = tox; 226 Messenger *m = tox;
228 return m_set_userstatus(m, (USERSTATUS)status); 227 return m_set_userstatus(m, status);
229} 228}
230 229
231/* return the length of friendnumber's status message, including null. 230/* return the length of friendnumber's status message, including null.
232 * Pass it into malloc. 231 * Pass it into malloc.
233 */ 232 */
234int tox_get_status_message_size(Tox *tox, int friendnumber) 233int tox_get_status_message_size(Tox *tox, int32_t friendnumber)
235{ 234{
236 Messenger *m = tox; 235 Messenger *m = tox;
237 return m_get_statusmessage_size(m, friendnumber); 236 return m_get_statusmessage_size(m, friendnumber);
@@ -241,7 +240,7 @@ int tox_get_status_message_size(Tox *tox, int friendnumber)
241 * Get the size you need to allocate from m_get_statusmessage_size. 240 * Get the size you need to allocate from m_get_statusmessage_size.
242 * The self variant will copy our own status message. 241 * The self variant will copy our own status message.
243 */ 242 */
244int tox_get_status_message(Tox *tox, int friendnumber, uint8_t *buf, uint32_t maxlen) 243int tox_get_status_message(Tox *tox, int32_t friendnumber, uint8_t *buf, uint32_t maxlen)
245{ 244{
246 Messenger *m = tox; 245 Messenger *m = tox;
247 return m_copy_statusmessage(m, friendnumber, buf, maxlen); 246 return m_copy_statusmessage(m, friendnumber, buf, maxlen);
@@ -258,7 +257,7 @@ int tox_get_self_status_message(Tox *tox, uint8_t *buf, uint32_t maxlen)
258 * As above, the self variant will return our own USERSTATUS. 257 * As above, the self variant will return our own USERSTATUS.
259 * If friendnumber is invalid, this shall return USERSTATUS_INVALID. 258 * If friendnumber is invalid, this shall return USERSTATUS_INVALID.
260 */ 259 */
261TOX_USERSTATUS tox_get_user_status(Tox *tox, int friendnumber) 260TOX_USERSTATUS tox_get_user_status(Tox *tox, int32_t friendnumber)
262{ 261{
263 Messenger *m = tox; 262 Messenger *m = tox;
264 return (TOX_USERSTATUS)m_get_userstatus(m, friendnumber); 263 return (TOX_USERSTATUS)m_get_userstatus(m, friendnumber);
@@ -276,7 +275,7 @@ TOX_USERSTATUS tox_get_self_user_status(Tox *tox)
276 * returns 0 on success. 275 * returns 0 on success.
277 * returns -1 on failure. 276 * returns -1 on failure.
278 */ 277 */
279int tox_set_user_is_typing(Tox *tox, int friendnumber, uint8_t is_typing) 278int tox_set_user_is_typing(Tox *tox, int32_t friendnumber, uint8_t is_typing)
280{ 279{
281 Messenger *m = tox; 280 Messenger *m = tox;
282 return m_set_usertyping(m, friendnumber, is_typing); 281 return m_set_usertyping(m, friendnumber, is_typing);
@@ -287,7 +286,7 @@ int tox_set_user_is_typing(Tox *tox, int friendnumber, uint8_t is_typing)
287 * returns 0 if friend is not typing. 286 * returns 0 if friend is not typing.
288 * returns 1 if friend is typing. 287 * returns 1 if friend is typing.
289 */ 288 */
290int tox_get_is_typing(Tox *tox, int friendnumber) 289int tox_get_is_typing(Tox *tox, int32_t friendnumber)
291{ 290{
292 Messenger *m = tox; 291 Messenger *m = tox;
293 return m_get_istyping(m, friendnumber); 292 return m_get_istyping(m, friendnumber);
@@ -297,7 +296,7 @@ int tox_get_is_typing(Tox *tox, int friendnumber)
297/* Sets whether we send read receipts for friendnumber. 296/* Sets whether we send read receipts for friendnumber.
298 * This function is not lazy, and it will fail if yesno is not (0 or 1). 297 * This function is not lazy, and it will fail if yesno is not (0 or 1).
299 */ 298 */
300void tox_set_sends_receipts(Tox *tox, int friendnumber, int yesno) 299void tox_set_sends_receipts(Tox *tox, int32_t friendnumber, int yesno)
301{ 300{
302 Messenger *m = tox; 301 Messenger *m = tox;
303 m_set_sends_receipts(m, friendnumber, yesno); 302 m_set_sends_receipts(m, friendnumber, yesno);
@@ -324,7 +323,7 @@ uint32_t tox_get_num_online_friends(Tox *tox)
324 * Otherwise, returns the number of elements copied. 323 * Otherwise, returns the number of elements copied.
325 * If the array was too small, the contents 324 * If the array was too small, the contents
326 * of out_list will be truncated to list_size. */ 325 * of out_list will be truncated to list_size. */
327uint32_t tox_get_friendlist(Tox *tox, int *out_list, uint32_t list_size) 326uint32_t tox_get_friendlist(Tox *tox, int32_t *out_list, uint32_t list_size)
328{ 327{
329 Messenger *m = tox; 328 Messenger *m = tox;
330 return copy_friendlist(m, out_list, list_size); 329 return copy_friendlist(m, out_list, list_size);
@@ -341,9 +340,9 @@ void tox_callback_friend_request(Tox *tox, void (*function)(uint8_t *, uint8_t *
341 340
342 341
343/* Set the function that will be executed when a message from a friend is received. 342/* Set the function that will be executed when a message from a friend is received.
344 * Function format is: function(int friendnumber, uint8_t * message, uint32_t length) 343 * Function format is: function(int32_t friendnumber, uint8_t * message, uint32_t length)
345 */ 344 */
346void tox_callback_friend_message(Tox *tox, void (*function)(Messenger *tox, int, uint8_t *, uint16_t, void *), 345void tox_callback_friend_message(Tox *tox, void (*function)(Messenger *tox, int32_t, uint8_t *, uint16_t, void *),
347 void *userdata) 346 void *userdata)
348{ 347{
349 Messenger *m = tox; 348 Messenger *m = tox;
@@ -351,9 +350,9 @@ void tox_callback_friend_message(Tox *tox, void (*function)(Messenger *tox, int,
351} 350}
352 351
353/* Set the function that will be executed when an action from a friend is received. 352/* Set the function that will be executed when an action from a friend is received.
354 * function format is: function(int friendnumber, uint8_t * action, uint32_t length) 353 * function format is: function(int32_t friendnumber, uint8_t * action, uint32_t length)
355 */ 354 */
356void tox_callback_friend_action(Tox *tox, void (*function)(Messenger *tox, int, uint8_t *, uint16_t, void *), 355void tox_callback_friend_action(Tox *tox, void (*function)(Messenger *tox, int32_t, uint8_t *, uint16_t, void *),
357 void *userdata) 356 void *userdata)
358{ 357{
359 Messenger *m = tox; 358 Messenger *m = tox;
@@ -361,10 +360,10 @@ void tox_callback_friend_action(Tox *tox, void (*function)(Messenger *tox, int,
361} 360}
362 361
363/* Set the callback for name changes. 362/* Set the callback for name changes.
364 * function(int friendnumber, uint8_t *newname, uint16_t length) 363 * function(int32_t friendnumber, uint8_t *newname, uint16_t length)
365 * You are not responsible for freeing newname. 364 * You are not responsible for freeing newname.
366 */ 365 */
367void tox_callback_name_change(Tox *tox, void (*function)(Messenger *tox, int, uint8_t *, uint16_t, void *), 366void tox_callback_name_change(Tox *tox, void (*function)(Messenger *tox, int32_t, uint8_t *, uint16_t, void *),
368 void *userdata) 367 void *userdata)
369{ 368{
370 Messenger *m = tox; 369 Messenger *m = tox;
@@ -372,10 +371,10 @@ void tox_callback_name_change(Tox *tox, void (*function)(Messenger *tox, int, ui
372} 371}
373 372
374/* Set the callback for status message changes. 373/* Set the callback for status message changes.
375 * function(int friendnumber, uint8_t *newstatus, uint16_t length) 374 * function(int32_t friendnumber, uint8_t *newstatus, uint16_t length)
376 * You are not responsible for freeing newstatus. 375 * You are not responsible for freeing newstatus.
377 */ 376 */
378void tox_callback_status_message(Tox *tox, void (*function)(Messenger *tox, int, uint8_t *, uint16_t, void *), 377void tox_callback_status_message(Tox *tox, void (*function)(Messenger *tox, int32_t, uint8_t *, uint16_t, void *),
379 void *userdata) 378 void *userdata)
380{ 379{
381 Messenger *m = tox; 380 Messenger *m = tox;
@@ -383,25 +382,26 @@ void tox_callback_status_message(Tox *tox, void (*function)(Messenger *tox, int,
383} 382}
384 383
385/* Set the callback for status type changes. 384/* Set the callback for status type changes.
386 * function(int friendnumber, USERSTATUS kind) 385 * function(int32_t friendnumber, USERSTATUS kind)
387 */ 386 */
388void tox_callback_user_status(Tox *tox, void (*function)(Messenger *tox, int, TOX_USERSTATUS, void *), void *userdata) 387void tox_callback_user_status(Tox *tox, void (*function)(Messenger *tox, int32_t, TOX_USERSTATUS, void *),
388 void *userdata)
389{ 389{
390 Messenger *m = tox; 390 Messenger *m = tox;
391 m_callback_userstatus(m, function, userdata); 391 m_callback_userstatus(m, function, userdata);
392} 392}
393 393
394/* Set the callback for typing changes. 394/* Set the callback for typing changes.
395 * function (int friendnumber, int is_typing) 395 * function (int32_t friendnumber, int is_typing)
396 */ 396 */
397void tox_callback_typing_change(Tox *tox, void (*function)(Messenger *tox, int, int, void *), void *userdata) 397void tox_callback_typing_change(Tox *tox, void (*function)(Messenger *tox, int32_t, int, void *), void *userdata)
398{ 398{
399 Messenger *m = tox; 399 Messenger *m = tox;
400 m_callback_typingchange(m, function, userdata); 400 m_callback_typingchange(m, function, userdata);
401} 401}
402 402
403/* Set the callback for read receipts. 403/* Set the callback for read receipts.
404 * function(int friendnumber, uint32_t receipt) 404 * function(int32_t friendnumber, uint32_t receipt)
405 * 405 *
406 * If you are keeping a record of returns from m_sendmessage; 406 * If you are keeping a record of returns from m_sendmessage;
407 * receipt might be one of those values, meaning the message 407 * receipt might be one of those values, meaning the message
@@ -409,14 +409,14 @@ void tox_callback_typing_change(Tox *tox, void (*function)(Messenger *tox, int,
409 * Since core doesn't track ids for you, receipt may not correspond to any message. 409 * Since core doesn't track ids for you, receipt may not correspond to any message.
410 * in that case, you should discard it. 410 * in that case, you should discard it.
411 */ 411 */
412void tox_callback_read_receipt(Tox *tox, void (*function)(Messenger *tox, int, uint32_t, void *), void *userdata) 412void tox_callback_read_receipt(Tox *tox, void (*function)(Messenger *tox, int32_t, uint32_t, void *), void *userdata)
413{ 413{
414 Messenger *m = tox; 414 Messenger *m = tox;
415 m_callback_read_receipt(m, function, userdata); 415 m_callback_read_receipt(m, function, userdata);
416} 416}
417 417
418/* Set the callback for connection status changes. 418/* Set the callback for connection status changes.
419 * function(int friendnumber, uint8_t status) 419 * function(int32_t friendnumber, uint8_t status)
420 * 420 *
421 * Status: 421 * Status:
422 * 0 -- friend went offline after being previously online 422 * 0 -- friend went offline after being previously online
@@ -426,7 +426,8 @@ void tox_callback_read_receipt(Tox *tox, void (*function)(Messenger *tox, int, u
426 * being previously online" part. It's assumed that when adding friends, 426 * being previously online" part. It's assumed that when adding friends,
427 * their connection status is offline. 427 * their connection status is offline.
428 */ 428 */
429void tox_callback_connection_status(Tox *tox, void (*function)(Messenger *tox, int, uint8_t, void *), void *userdata) 429void tox_callback_connection_status(Tox *tox, void (*function)(Messenger *tox, int32_t, uint8_t, void *),
430 void *userdata)
430{ 431{
431 Messenger *m = tox; 432 Messenger *m = tox;
432 m_callback_connectionstatus(m, function, userdata); 433 m_callback_connectionstatus(m, function, userdata);
@@ -436,9 +437,9 @@ void tox_callback_connection_status(Tox *tox, void (*function)(Messenger *tox, i
436 437
437/* Set the callback for group invites. 438/* Set the callback for group invites.
438 * 439 *
439 * Function(Tox *tox, int friendnumber, uint8_t *group_public_key, void *userdata) 440 * Function(Tox *tox, int32_t friendnumber, uint8_t *group_public_key, void *userdata)
440 */ 441 */
441void tox_callback_group_invite(Tox *tox, void (*function)(Messenger *tox, int, uint8_t *, void *), void *userdata) 442void tox_callback_group_invite(Tox *tox, void (*function)(Messenger *tox, int32_t, uint8_t *, void *), void *userdata)
442{ 443{
443 Messenger *m = tox; 444 Messenger *m = tox;
444 m_callback_group_invite(m, function, userdata); 445 m_callback_group_invite(m, function, userdata);
@@ -513,7 +514,7 @@ int tox_group_peername(Tox *tox, int groupnumber, int peernumber, uint8_t *name)
513 * return 0 on success 514 * return 0 on success
514 * return -1 on failure 515 * return -1 on failure
515 */ 516 */
516int tox_invite_friend(Tox *tox, int friendnumber, int groupnumber) 517int tox_invite_friend(Tox *tox, int32_t friendnumber, int groupnumber)
517{ 518{
518 Messenger *m = tox; 519 Messenger *m = tox;
519 return invite_friend(m, friendnumber, groupnumber); 520 return invite_friend(m, friendnumber, groupnumber);
@@ -523,7 +524,7 @@ int tox_invite_friend(Tox *tox, int friendnumber, int groupnumber)
523 * returns group number on success 524 * returns group number on success
524 * returns -1 on failure. 525 * returns -1 on failure.
525 */ 526 */
526int tox_join_groupchat(Tox *tox, int friendnumber, uint8_t *friend_group_public_key) 527int tox_join_groupchat(Tox *tox, int32_t friendnumber, uint8_t *friend_group_public_key)
527{ 528{
528 Messenger *m = tox; 529 Messenger *m = tox;
529 return join_groupchat(m, friendnumber, friend_group_public_key); 530 return join_groupchat(m, friendnumber, friend_group_public_key);
@@ -598,9 +599,9 @@ uint32_t tox_get_chatlist(Tox *tox, int *out_list, uint32_t list_size)
598 599
599/* Set the callback for file send requests. 600/* Set the callback for file send requests.
600 * 601 *
601 * Function(Tox *tox, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length, void *userdata) 602 * Function(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length, void *userdata)
602 */ 603 */
603void tox_callback_file_send_request(Tox *tox, void (*function)(Messenger *tox, int, uint8_t, uint64_t, uint8_t *, 604void tox_callback_file_send_request(Tox *tox, void (*function)(Messenger *tox, int32_t, uint8_t, uint64_t, uint8_t *,
604 uint16_t, 605 uint16_t,
605 void *), void *userdata) 606 void *), void *userdata)
606{ 607{
@@ -609,10 +610,10 @@ void tox_callback_file_send_request(Tox *tox, void (*function)(Messenger *tox, i
609} 610}
610/* Set the callback for file control requests. 611/* Set the callback for file control requests.
611 * 612 *
612 * Function(Tox *tox, int friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t control_type, uint8_t *data, uint16_t length, void *userdata) 613 * Function(Tox *tox, int32_t friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t control_type, uint8_t *data, uint16_t length, void *userdata)
613 * 614 *
614 */ 615 */
615void tox_callback_file_control(Tox *tox, void (*function)(Messenger *tox, int, uint8_t, uint8_t, uint8_t, uint8_t *, 616void tox_callback_file_control(Tox *tox, void (*function)(Messenger *tox, int32_t, uint8_t, uint8_t, uint8_t, uint8_t *,
616 uint16_t, void *), void *userdata) 617 uint16_t, void *), void *userdata)
617{ 618{
618 Messenger *m = tox; 619 Messenger *m = tox;
@@ -620,10 +621,10 @@ void tox_callback_file_control(Tox *tox, void (*function)(Messenger *tox, int, u
620} 621}
621/* Set the callback for file data. 622/* Set the callback for file data.
622 * 623 *
623 * Function(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata) 624 * Function(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata)
624 * 625 *
625 */ 626 */
626void tox_callback_file_data(Tox *tox, void (*function)(Messenger *tox, int, uint8_t, uint8_t *, uint16_t length, 627void tox_callback_file_data(Tox *tox, void (*function)(Messenger *tox, int32_t, uint8_t, uint8_t *, uint16_t length,
627 void *), 628 void *),
628 void *userdata) 629 void *userdata)
629 630
@@ -636,7 +637,7 @@ void tox_callback_file_data(Tox *tox, void (*function)(Messenger *tox, int, uint
636 * return file number on success 637 * return file number on success
637 * return -1 on failure 638 * return -1 on failure
638 */ 639 */
639int tox_new_file_sender(Tox *tox, int friendnumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length) 640int tox_new_file_sender(Tox *tox, int32_t friendnumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length)
640{ 641{
641 Messenger *m = tox; 642 Messenger *m = tox;
642 return new_filesender(m, friendnumber, filesize, filename, filename_length); 643 return new_filesender(m, friendnumber, filesize, filename, filename_length);
@@ -647,7 +648,7 @@ int tox_new_file_sender(Tox *tox, int friendnumber, uint64_t filesize, uint8_t *
647 * return 0 on success 648 * return 0 on success
648 * return -1 on failure 649 * return -1 on failure
649 */ 650 */
650int tox_file_send_control(Tox *tox, int friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t message_id, 651int tox_file_send_control(Tox *tox, int32_t friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t message_id,
651 uint8_t *data, uint16_t length) 652 uint8_t *data, uint16_t length)
652{ 653{
653 Messenger *m = tox; 654 Messenger *m = tox;
@@ -658,7 +659,7 @@ int tox_file_send_control(Tox *tox, int friendnumber, uint8_t send_receive, uint
658 * return 0 on success 659 * return 0 on success
659 * return -1 on failure 660 * return -1 on failure
660 */ 661 */
661int tox_file_send_data(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length) 662int tox_file_send_data(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length)
662{ 663{
663 Messenger *m = tox; 664 Messenger *m = tox;
664 return file_data(m, friendnumber, filenumber, data, length); 665 return file_data(m, friendnumber, filenumber, data, length);
@@ -669,7 +670,7 @@ int tox_file_send_data(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t *
669 * return size on success 670 * return size on success
670 * return -1 on failure (currently will never return -1) 671 * return -1 on failure (currently will never return -1)
671 */ 672 */
672int tox_file_data_size(Tox *tox, int friendnumber) 673int tox_file_data_size(Tox *tox, int32_t friendnumber)
673{ 674{
674 return MAX_DATA_SIZE - crypto_box_MACBYTES - 3; 675 return MAX_DATA_SIZE - crypto_box_MACBYTES - 3;
675} 676}
@@ -681,7 +682,7 @@ int tox_file_data_size(Tox *tox, int friendnumber)
681 * return number of bytes remaining to be sent/received on success 682 * return number of bytes remaining to be sent/received on success
682 * return 0 on failure 683 * return 0 on failure
683 */ 684 */
684uint64_t tox_file_data_remaining(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t send_receive) 685uint64_t tox_file_data_remaining(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint8_t send_receive)
685{ 686{
686 Messenger *m = tox; 687 Messenger *m = tox;
687 return file_dataremaining(m, friendnumber, filenumber, send_receive); 688 return file_dataremaining(m, friendnumber, filenumber, send_receive);
diff --git a/toxcore/tox.h b/toxcore/tox.h
index 1db5c46e..348ef6e5 100644
--- a/toxcore/tox.h
+++ b/toxcore/tox.h
@@ -36,8 +36,6 @@
36#include <windows.h> 36#include <windows.h>
37#include <ws2tcpip.h> 37#include <ws2tcpip.h>
38 38
39/* sa_family_t is the sockaddr_in / sockaddr_in6 family field */
40typedef short sa_family_t;
41 39
42#ifndef true 40#ifndef true
43#define true 1 41#define true 1
@@ -58,7 +56,7 @@ extern "C" {
58#endif 56#endif
59 57
60#define TOX_MAX_NAME_LENGTH 128 58#define TOX_MAX_NAME_LENGTH 128
61#define TOX_MAX_STATUSMESSAGE_LENGTH 128 59#define TOX_MAX_STATUSMESSAGE_LENGTH 1007
62#define TOX_CLIENT_ID_SIZE 32 60#define TOX_CLIENT_ID_SIZE 32
63 61
64#define TOX_FRIEND_ADDRESS_SIZE (TOX_CLIENT_ID_SIZE + sizeof(uint32_t) + sizeof(uint16_t)) 62#define TOX_FRIEND_ADDRESS_SIZE (TOX_CLIENT_ID_SIZE + sizeof(uint32_t) + sizeof(uint16_t))
@@ -67,37 +65,8 @@ extern "C" {
67#define TOX_PORTRANGE_TO 33545 65#define TOX_PORTRANGE_TO 33545
68#define TOX_PORT_DEFAULT TOX_PORTRANGE_FROM 66#define TOX_PORT_DEFAULT TOX_PORTRANGE_FROM
69 67
70typedef union {
71 uint8_t c[4];
72 uint16_t s[2];
73 uint32_t i;
74} tox_IP4;
75
76typedef union {
77 uint8_t uint8[16];
78 uint16_t uint16[8];
79 uint32_t uint32[4];
80 struct in6_addr in6_addr;
81} tox_IP6;
82
83typedef struct {
84 sa_family_t family;
85 union {
86 tox_IP4 ip4;
87 tox_IP6 ip6;
88 };
89} tox_IP;
90
91/* will replace IP_Port as soon as the complete infrastructure is in place
92 * removed the unused union and padding also */
93typedef struct {
94 tox_IP ip;
95 uint16_t port;
96} tox_IP_Port;
97
98#define TOX_ENABLE_IPV6_DEFAULT 1 68#define TOX_ENABLE_IPV6_DEFAULT 1
99 69
100
101/* Errors for m_addfriend 70/* Errors for m_addfriend
102 * FAERR - Friend Add Error 71 * FAERR - Friend Add Error
103 */ 72 */
@@ -132,6 +101,8 @@ typedef struct Tox Tox;
132 * 101 *
133 * The length when passing those strings to the core includes that NULL character. 102 * The length when passing those strings to the core includes that NULL character.
134 * 103 *
104 * The length of all strings returned by the core include the NULL character.
105 *
135 * If you send non NULL terminated strings Tox will force NULL terminates them when it receives them. 106 * If you send non NULL terminated strings Tox will force NULL terminates them when it receives them.
136 */ 107 */
137 108
@@ -156,28 +127,32 @@ void tox_get_address(Tox *tox, uint8_t *address);
156 * (the nospam for that friend was set to the new one). 127 * (the nospam for that friend was set to the new one).
157 * return TOX_FAERR_NOMEM if increasing the friend list size fails. 128 * return TOX_FAERR_NOMEM if increasing the friend list size fails.
158 */ 129 */
159int tox_add_friend(Tox *tox, uint8_t *address, uint8_t *data, uint16_t length); 130int32_t tox_add_friend(Tox *tox, uint8_t *address, uint8_t *data, uint16_t length);
160 131
161 132
162/* Add a friend without sending a friendrequest. 133/* Add a friend without sending a friendrequest.
163 * return the friend number if success. 134 * return the friend number if success.
164 * return -1 if failure. 135 * return -1 if failure.
165 */ 136 */
166int tox_add_friend_norequest(Tox *tox, uint8_t *client_id); 137int32_t tox_add_friend_norequest(Tox *tox, uint8_t *client_id);
167 138
168/* return the friend id associated to that client id. 139/* return the friend number associated to that client id.
169 return -1 if no such friend */ 140 return -1 if no such friend */
170int tox_get_friend_id(Tox *tox, uint8_t *client_id); 141int32_t tox_get_friend_number(Tox *tox, uint8_t *client_id);
171 142
172/* Copies the public key associated to that friend id into client_id buffer. 143/* Copies the public key associated to that friend id into client_id buffer.
173 * Make sure that client_id is of size CLIENT_ID_SIZE. 144 * Make sure that client_id is of size CLIENT_ID_SIZE.
174 * return 0 if success. 145 * return 0 if success.
175 * return -1 if failure. 146 * return -1 if failure.
176 */ 147 */
177int tox_get_client_id(Tox *tox, int friend_id, uint8_t *client_id); 148int tox_get_client_id(Tox *tox, int32_t friendnumber, uint8_t *client_id);
178 149
179/* Remove a friend. */ 150/* Remove a friend.
180int tox_del_friend(Tox *tox, int friendnumber); 151 *
152 * return 0 if success.
153 * return -1 if failure.
154 */
155int tox_del_friend(Tox *tox, int32_t friendnumber);
181 156
182/* Checks friend's connecting status. 157/* Checks friend's connecting status.
183 * 158 *
@@ -185,14 +160,14 @@ int tox_del_friend(Tox *tox, int friendnumber);
185 * return 0 if friend is not connected to us (Offline). 160 * return 0 if friend is not connected to us (Offline).
186 * return -1 on failure. 161 * return -1 on failure.
187 */ 162 */
188int tox_get_friend_connection_status(Tox *tox, int friendnumber); 163int tox_get_friend_connection_status(Tox *tox, int32_t friendnumber);
189 164
190/* Checks if there exists a friend with given friendnumber. 165/* Checks if there exists a friend with given friendnumber.
191 * 166 *
192 * return 1 if friend exists. 167 * return 1 if friend exists.
193 * return 0 if friend doesn't exist. 168 * return 0 if friend doesn't exist.
194 */ 169 */
195int tox_friend_exists(Tox *tox, int friendnumber); 170int tox_friend_exists(Tox *tox, int32_t friendnumber);
196 171
197/* Send a text chat message to an online friend. 172/* Send a text chat message to an online friend.
198 * 173 *
@@ -204,8 +179,8 @@ int tox_friend_exists(Tox *tox, int friendnumber);
204 * m_sendmessage_withid will send a message with the id of your choosing, 179 * m_sendmessage_withid will send a message with the id of your choosing,
205 * however we can generate an id for you by calling plain m_sendmessage. 180 * however we can generate an id for you by calling plain m_sendmessage.
206 */ 181 */
207uint32_t tox_send_message(Tox *tox, int friendnumber, uint8_t *message, uint32_t length); 182uint32_t tox_send_message(Tox *tox, int32_t friendnumber, uint8_t *message, uint32_t length);
208uint32_t tox_send_message_withid(Tox *tox, int friendnumber, uint32_t theid, uint8_t *message, uint32_t length); 183uint32_t tox_send_message_withid(Tox *tox, int32_t friendnumber, uint32_t theid, uint8_t *message, uint32_t length);
209 184
210/* Send an action to an online friend. 185/* Send an action to an online friend.
211 * 186 *
@@ -217,8 +192,8 @@ uint32_t tox_send_message_withid(Tox *tox, int friendnumber, uint32_t theid, uin
217 * m_sendaction_withid will send an action message with the id of your choosing, 192 * m_sendaction_withid will send an action message with the id of your choosing,
218 * however we can generate an id for you by calling plain m_sendaction. 193 * however we can generate an id for you by calling plain m_sendaction.
219 */ 194 */
220uint32_t tox_send_action(Tox *tox, int friendnumber, uint8_t *action, uint32_t length); 195uint32_t tox_send_action(Tox *tox, int32_t friendnumber, uint8_t *action, uint32_t length);
221uint32_t tox_send_action_withid(Tox *tox, int friendnumber, uint32_t theid, uint8_t *action, uint32_t length); 196uint32_t tox_send_action_withid(Tox *tox, int32_t friendnumber, uint32_t theid, uint8_t *action, uint32_t length);
222 197
223/* Set our nickname. 198/* Set our nickname.
224 * name must be a string of maximum MAX_NAME_LENGTH length. 199 * name must be a string of maximum MAX_NAME_LENGTH length.
@@ -233,35 +208,36 @@ int tox_set_name(Tox *tox, uint8_t *name, uint16_t length);
233/* 208/*
234 * Get your nickname. 209 * Get your nickname.
235 * m - The messanger context to use. 210 * m - The messanger context to use.
236 * name - Pointer to a string for the name. 211 * name - needs to be a valid memory location with a size of at least MAX_NAME_LENGTH (128) bytes.
237 * nlen - The length of the string buffer.
238 * 212 *
239 * return length of name. 213 * return length of name.
240 * return 0 on error. 214 * return 0 on error.
241 */ 215 */
242uint16_t tox_get_self_name(Tox *tox, uint8_t *name, uint16_t nlen); 216uint16_t tox_get_self_name(Tox *tox, uint8_t *name);
243 217
244/* Get name of friendnumber and put it in name. 218/* Get name of friendnumber and put it in name.
245 * name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH (128) bytes. 219 * name needs to be a valid memory location with a size of at least MAX_NAME_LENGTH (128) bytes.
246 * 220 *
247 * return length of name (with the NULL terminator) if success. 221 * return length of name if success.
248 * return -1 if failure. 222 * return -1 if failure.
249 */ 223 */
250int tox_get_name(Tox *tox, int friendnumber, uint8_t *name); 224int tox_get_name(Tox *tox, int32_t friendnumber, uint8_t *name);
251 225
252/* Set our user status. 226/* Set our user status.
253 * You are responsible for freeing status after. 227 * You are responsible for freeing status after.
254 * 228 *
229 * userstatus must be one of TOX_USERSTATUS values.
230 *
255 * returns 0 on success. 231 * returns 0 on success.
256 * returns -1 on failure. 232 * returns -1 on failure.
257 */ 233 */
258int tox_set_status_message(Tox *tox, uint8_t *status, uint16_t length); 234int tox_set_status_message(Tox *tox, uint8_t *status, uint16_t length);
259int tox_set_user_status(Tox *tox, TOX_USERSTATUS status); 235int tox_set_user_status(Tox *tox, TOX_USERSTATUS userstatus);
260 236
261/* return the length of friendnumber's status message, including null. 237/* return the length of friendnumber's status message.
262 * Pass it into malloc 238 * Pass it into malloc
263 */ 239 */
264int tox_get_status_message_size(Tox *tox, int friendnumber); 240int tox_get_status_message_size(Tox *tox, int32_t friendnumber);
265 241
266/* Copy friendnumber's status message into buf, truncating if size is over maxlen. 242/* Copy friendnumber's status message into buf, truncating if size is over maxlen.
267 * Get the size you need to allocate from m_get_statusmessage_size. 243 * Get the size you need to allocate from m_get_statusmessage_size.
@@ -270,15 +246,15 @@ int tox_get_status_message_size(Tox *tox, int friendnumber);
270 * returns the length of the copied data on success 246 * returns the length of the copied data on success
271 * retruns -1 on failure. 247 * retruns -1 on failure.
272 */ 248 */
273int tox_get_status_message(Tox *tox, int friendnumber, uint8_t *buf, uint32_t maxlen); 249int tox_get_status_message(Tox *tox, int32_t friendnumber, uint8_t *buf, uint32_t maxlen);
274int tox_get_self_status_message(Tox *tox, uint8_t *buf, uint32_t maxlen); 250int tox_get_self_status_message(Tox *tox, uint8_t *buf, uint32_t maxlen);
275 251
276/* return one of USERSTATUS values. 252/* return one of TOX_USERSTATUS values.
277 * Values unknown to your application should be represented as USERSTATUS_NONE. 253 * Values unknown to your application should be represented as TOX_USERSTATUS_NONE.
278 * As above, the self variant will return our own USERSTATUS. 254 * As above, the self variant will return our own TOX_USERSTATUS.
279 * If friendnumber is invalid, this shall return USERSTATUS_INVALID. 255 * If friendnumber is invalid, this shall return TOX_USERSTATUS_INVALID.
280 */ 256 */
281TOX_USERSTATUS tox_get_user_status(Tox *tox, int friendnumber); 257TOX_USERSTATUS tox_get_user_status(Tox *tox, int32_t friendnumber);
282TOX_USERSTATUS tox_get_self_user_status(Tox *tox); 258TOX_USERSTATUS tox_get_self_user_status(Tox *tox);
283 259
284/* Set our typing status for a friend. 260/* Set our typing status for a friend.
@@ -287,19 +263,19 @@ TOX_USERSTATUS tox_get_self_user_status(Tox *tox);
287 * returns 0 on success. 263 * returns 0 on success.
288 * returns -1 on failure. 264 * returns -1 on failure.
289 */ 265 */
290int tox_set_user_is_typing(Tox *tox, int friendnumber, uint8_t is_typing); 266int tox_set_user_is_typing(Tox *tox, int32_t friendnumber, uint8_t is_typing);
291 267
292/* Get the typing status of a friend. 268/* Get the typing status of a friend.
293 * 269 *
294 * returns 0 if friend is not typing. 270 * returns 0 if friend is not typing.
295 * returns 1 if friend is typing. 271 * returns 1 if friend is typing.
296 */ 272 */
297int tox_get_is_typing(Tox *tox, int friendnumber); 273int tox_get_is_typing(Tox *tox, int32_t friendnumber);
298 274
299/* Sets whether we send read receipts for friendnumber. 275/* Sets whether we send read receipts for friendnumber.
300 * This function is not lazy, and it will fail if yesno is not (0 or 1). 276 * This function is not lazy, and it will fail if yesno is not (0 or 1).
301 */ 277 */
302void tox_set_sends_receipts(Tox *tox, int friendnumber, int yesno); 278void tox_set_sends_receipts(Tox *tox, int32_t friendnumber, int yesno);
303 279
304/* Return the number of friends in the instance m. 280/* Return the number of friends in the instance m.
305 * You should use this to determine how much memory to allocate 281 * You should use this to determine how much memory to allocate
@@ -314,7 +290,7 @@ uint32_t tox_get_num_online_friends(Tox *tox);
314 * Otherwise, returns the number of elements copied. 290 * Otherwise, returns the number of elements copied.
315 * If the array was too small, the contents 291 * If the array was too small, the contents
316 * of out_list will be truncated to list_size. */ 292 * of out_list will be truncated to list_size. */
317uint32_t tox_get_friendlist(Tox *tox, int *out_list, uint32_t list_size); 293uint32_t tox_get_friendlist(Tox *tox, int32_t *out_list, uint32_t list_size);
318 294
319/* Set the function that will be executed when a friend request is received. 295/* Set the function that will be executed when a friend request is received.
320 * Function format is function(uint8_t * public_key, uint8_t * data, uint16_t length) 296 * Function format is function(uint8_t * public_key, uint8_t * data, uint16_t length)
@@ -328,36 +304,37 @@ void tox_callback_friend_message(Tox *tox, void (*function)(Tox *tox, int, uint8
328 void *userdata); 304 void *userdata);
329 305
330/* Set the function that will be executed when an action from a friend is received. 306/* Set the function that will be executed when an action from a friend is received.
331 * Function format is: function(int friendnumber, uint8_t * action, uint32_t length) 307 * Function format is: function(int32_t friendnumber, uint8_t * action, uint32_t length)
332 */ 308 */
333void tox_callback_friend_action(Tox *tox, void (*function)(Tox *tox, int, uint8_t *, uint16_t, void *), void *userdata); 309void tox_callback_friend_action(Tox *tox, void (*function)(Tox *tox, int32_t, uint8_t *, uint16_t, void *),
310 void *userdata);
334 311
335/* Set the callback for name changes. 312/* Set the callback for name changes.
336 * function(int friendnumber, uint8_t *newname, uint16_t length) 313 * function(int32_t friendnumber, uint8_t *newname, uint16_t length)
337 * You are not responsible for freeing newname 314 * You are not responsible for freeing newname
338 */ 315 */
339void tox_callback_name_change(Tox *tox, void (*function)(Tox *tox, int, uint8_t *, uint16_t, void *), 316void tox_callback_name_change(Tox *tox, void (*function)(Tox *tox, int32_t, uint8_t *, uint16_t, void *),
340 void *userdata); 317 void *userdata);
341 318
342/* Set the callback for status message changes. 319/* Set the callback for status message changes.
343 * function(int friendnumber, uint8_t *newstatus, uint16_t length) 320 * function(int32_t friendnumber, uint8_t *newstatus, uint16_t length)
344 * You are not responsible for freeing newstatus. 321 * You are not responsible for freeing newstatus.
345 */ 322 */
346void tox_callback_status_message(Tox *tox, void (*function)(Tox *tox, int, uint8_t *, uint16_t, void *), 323void tox_callback_status_message(Tox *tox, void (*function)(Tox *tox, int32_t, uint8_t *, uint16_t, void *),
347 void *userdata); 324 void *userdata);
348 325
349/* Set the callback for status type changes. 326/* Set the callback for status type changes.
350 * function(int friendnumber, USERSTATUS kind) 327 * function(int32_t friendnumber, USERSTATUS kind)
351 */ 328 */
352void tox_callback_user_status(Tox *tox, void (*function)(Tox *tox, int, TOX_USERSTATUS, void *), void *userdata); 329void tox_callback_user_status(Tox *tox, void (*function)(Tox *tox, int32_t, TOX_USERSTATUS, void *), void *userdata);
353 330
354/* Set the callback for typing changes. 331/* Set the callback for typing changes.
355 * function (int friendnumber, int is_typing) 332 * function (int32_t friendnumber, int is_typing)
356 */ 333 */
357void tox_callback_typing_change(Tox *tox, void (*function)(Tox *tox, int, int, void *), void *userdata); 334void tox_callback_typing_change(Tox *tox, void (*function)(Tox *tox, int32_t, int, void *), void *userdata);
358 335
359/* Set the callback for read receipts. 336/* Set the callback for read receipts.
360 * function(int friendnumber, uint32_t receipt) 337 * function(int32_t friendnumber, uint32_t receipt)
361 * 338 *
362 * If you are keeping a record of returns from m_sendmessage; 339 * If you are keeping a record of returns from m_sendmessage;
363 * receipt might be one of those values, meaning the message 340 * receipt might be one of those values, meaning the message
@@ -365,10 +342,10 @@ void tox_callback_typing_change(Tox *tox, void (*function)(Tox *tox, int, int, v
365 * Since core doesn't track ids for you, receipt may not correspond to any message. 342 * Since core doesn't track ids for you, receipt may not correspond to any message.
366 * In that case, you should discard it. 343 * In that case, you should discard it.
367 */ 344 */
368void tox_callback_read_receipt(Tox *tox, void (*function)(Tox *tox, int, uint32_t, void *), void *userdata); 345void tox_callback_read_receipt(Tox *tox, void (*function)(Tox *tox, int32_t, uint32_t, void *), void *userdata);
369 346
370/* Set the callback for connection status changes. 347/* Set the callback for connection status changes.
371 * function(int friendnumber, uint8_t status) 348 * function(int32_t friendnumber, uint8_t status)
372 * 349 *
373 * Status: 350 * Status:
374 * 0 -- friend went offline after being previously online 351 * 0 -- friend went offline after being previously online
@@ -378,7 +355,7 @@ void tox_callback_read_receipt(Tox *tox, void (*function)(Tox *tox, int, uint32_
378 * being previously online" part. it's assumed that when adding friends, 355 * being previously online" part. it's assumed that when adding friends,
379 * their connection status is offline. 356 * their connection status is offline.
380 */ 357 */
381void tox_callback_connection_status(Tox *tox, void (*function)(Tox *tox, int, uint8_t, void *), void *userdata); 358void tox_callback_connection_status(Tox *tox, void (*function)(Tox *tox, int32_t, uint8_t, void *), void *userdata);
382 359
383/**********GROUP CHAT FUNCTIONS: WARNING WILL BREAK A LOT************/ 360/**********GROUP CHAT FUNCTIONS: WARNING WILL BREAK A LOT************/
384 361
@@ -386,7 +363,7 @@ void tox_callback_connection_status(Tox *tox, void (*function)(Tox *tox, int, ui
386 * 363 *
387 * Function(Tox *tox, int friendnumber, uint8_t *group_public_key, void *userdata) 364 * Function(Tox *tox, int friendnumber, uint8_t *group_public_key, void *userdata)
388 */ 365 */
389void tox_callback_group_invite(Tox *tox, void (*function)(Tox *tox, int, uint8_t *, void *), void *userdata); 366void tox_callback_group_invite(Tox *tox, void (*function)(Tox *tox, int32_t, uint8_t *, void *), void *userdata);
390 367
391/* Set the callback for group messages. 368/* Set the callback for group messages.
392 * 369 *
@@ -442,14 +419,14 @@ int tox_group_peername(Tox *tox, int groupnumber, int peernumber, uint8_t *name)
442 * return 0 on success 419 * return 0 on success
443 * return -1 on failure 420 * return -1 on failure
444 */ 421 */
445int tox_invite_friend(Tox *tox, int friendnumber, int groupnumber); 422int tox_invite_friend(Tox *tox, int32_t friendnumber, int groupnumber);
446 423
447/* Join a group (you need to have been invited first.) 424/* Join a group (you need to have been invited first.)
448 * 425 *
449 * returns group number on success 426 * returns group number on success
450 * returns -1 on failure. 427 * returns -1 on failure.
451 */ 428 */
452int tox_join_groupchat(Tox *tox, int friendnumber, uint8_t *friend_group_public_key); 429int tox_join_groupchat(Tox *tox, int32_t friendnumber, uint8_t *friend_group_public_key);
453 430
454/* send a group message 431/* send a group message
455 * return 0 on success 432 * return 0 on success
@@ -528,9 +505,9 @@ enum {
528}; 505};
529/* Set the callback for file send requests. 506/* Set the callback for file send requests.
530 * 507 *
531 * Function(Tox *tox, int friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length, void *userdata) 508 * Function(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length, void *userdata)
532 */ 509 */
533void tox_callback_file_send_request(Tox *tox, void (*function)(Tox *m, int, uint8_t, uint64_t, uint8_t *, uint16_t, 510void tox_callback_file_send_request(Tox *tox, void (*function)(Tox *m, int32_t, uint8_t, uint64_t, uint8_t *, uint16_t,
534 void *), void *userdata); 511 void *), void *userdata);
535 512
536/* Set the callback for file control requests. 513/* Set the callback for file control requests.
@@ -538,18 +515,18 @@ void tox_callback_file_send_request(Tox *tox, void (*function)(Tox *m, int, uint
538 * receive_send is 1 if the message is for a slot on which we are currently sending a file and 0 if the message 515 * receive_send is 1 if the message is for a slot on which we are currently sending a file and 0 if the message
539 * is for a slot on which we are receiving the file 516 * is for a slot on which we are receiving the file
540 * 517 *
541 * Function(Tox *tox, int friendnumber, uint8_t receive_send, uint8_t filenumber, uint8_t control_type, uint8_t *data, uint16_t length, void *userdata) 518 * Function(Tox *tox, int32_t friendnumber, uint8_t receive_send, uint8_t filenumber, uint8_t control_type, uint8_t *data, uint16_t length, void *userdata)
542 * 519 *
543 */ 520 */
544void tox_callback_file_control(Tox *tox, void (*function)(Tox *m, int, uint8_t, uint8_t, uint8_t, uint8_t *, 521void tox_callback_file_control(Tox *tox, void (*function)(Tox *m, int32_t, uint8_t, uint8_t, uint8_t, uint8_t *,
545 uint16_t, void *), void *userdata); 522 uint16_t, void *), void *userdata);
546 523
547/* Set the callback for file data. 524/* Set the callback for file data.
548 * 525 *
549 * Function(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata) 526 * Function(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length, void *userdata)
550 * 527 *
551 */ 528 */
552void tox_callback_file_data(Tox *tox, void (*function)(Tox *m, int, uint8_t, uint8_t *, uint16_t length, void *), 529void tox_callback_file_data(Tox *tox, void (*function)(Tox *m, int32_t, uint8_t, uint8_t *, uint16_t length, void *),
553 void *userdata); 530 void *userdata);
554 531
555 532
@@ -558,7 +535,7 @@ void tox_callback_file_data(Tox *tox, void (*function)(Tox *m, int, uint8_t, uin
558 * return file number on success 535 * return file number on success
559 * return -1 on failure 536 * return -1 on failure
560 */ 537 */
561int tox_new_file_sender(Tox *tox, int friendnumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length); 538int tox_new_file_sender(Tox *tox, int32_t friendnumber, uint64_t filesize, uint8_t *filename, uint16_t filename_length);
562 539
563/* Send a file control request. 540/* Send a file control request.
564 * 541 *
@@ -568,7 +545,7 @@ int tox_new_file_sender(Tox *tox, int friendnumber, uint64_t filesize, uint8_t *
568 * return 0 on success 545 * return 0 on success
569 * return -1 on failure 546 * return -1 on failure
570 */ 547 */
571int tox_file_send_control(Tox *tox, int friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t message_id, 548int tox_file_send_control(Tox *tox, int32_t friendnumber, uint8_t send_receive, uint8_t filenumber, uint8_t message_id,
572 uint8_t *data, uint16_t length); 549 uint8_t *data, uint16_t length);
573 550
574/* Send file data. 551/* Send file data.
@@ -576,14 +553,14 @@ int tox_file_send_control(Tox *tox, int friendnumber, uint8_t send_receive, uint
576 * return 0 on success 553 * return 0 on success
577 * return -1 on failure 554 * return -1 on failure
578 */ 555 */
579int tox_file_send_data(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length); 556int tox_file_send_data(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint8_t *data, uint16_t length);
580 557
581/* Returns the recommended/maximum size of the filedata you send with tox_file_send_data() 558/* Returns the recommended/maximum size of the filedata you send with tox_file_send_data()
582 * 559 *
583 * return size on success 560 * return size on success
584 * return -1 on failure (currently will never return -1) 561 * return -1 on failure (currently will never return -1)
585 */ 562 */
586int tox_file_data_size(Tox *tox, int friendnumber); 563int tox_file_data_size(Tox *tox, int32_t friendnumber);
587 564
588/* Give the number of bytes left to be sent/received. 565/* Give the number of bytes left to be sent/received.
589 * 566 *
@@ -592,19 +569,51 @@ int tox_file_data_size(Tox *tox, int friendnumber);
592 * return number of bytes remaining to be sent/received on success 569 * return number of bytes remaining to be sent/received on success
593 * return 0 on failure 570 * return 0 on failure
594 */ 571 */
595uint64_t tox_file_data_remaining(Tox *tox, int friendnumber, uint8_t filenumber, uint8_t send_receive); 572uint64_t tox_file_data_remaining(Tox *tox, int32_t friendnumber, uint8_t filenumber, uint8_t send_receive);
596 573
597/***************END OF FILE SENDING FUNCTIONS******************/ 574/***************END OF FILE SENDING FUNCTIONS******************/
598 575
576/* WARNING: DEPRECATED, DO NOT USE. */
577typedef union {
578 uint8_t c[4];
579 uint16_t s[2];
580 uint32_t i;
581} tox_IP4;
599 582
600/* 583typedef union {
601 * Use these two functions to bootstrap the client. 584 uint8_t uint8[16];
602 */ 585 uint16_t uint16[8];
586 uint32_t uint32[4];
587 struct in6_addr in6_addr;
588} tox_IP6;
589
590typedef struct {
591 uint8_t family;
592 /* Not used for anything right now. */
593 uint8_t padding[3];
594 union {
595 tox_IP4 ip4;
596 tox_IP6 ip6;
597 };
598} tox_IP;
599
600/* will replace IP_Port as soon as the complete infrastructure is in place
601 * removed the unused union and padding also */
602typedef struct {
603 tox_IP ip;
604 uint16_t port;
605} tox_IP_Port;
606/* WARNING: DEPRECATED, DO NOT USE. */
603/* Sends a "get nodes" request to the given node with ip, port and public_key 607/* Sends a "get nodes" request to the given node with ip, port and public_key
604 * to setup connections 608 * to setup connections
605 */ 609 */
606void tox_bootstrap_from_ip(Tox *tox, tox_IP_Port ip_port, uint8_t *public_key); 610void tox_bootstrap_from_ip(Tox *tox, tox_IP_Port ip_port, uint8_t *public_key);
607 611
612
613/*
614 * Use this function to bootstrap the client.
615 */
616
608/* Resolves address into an IP address. If successful, sends a "get nodes" 617/* Resolves address into an IP address. If successful, sends a "get nodes"
609 * request to the given node with ip, port (in network byte order, HINT: use htons()) 618 * request to the given node with ip, port (in network byte order, HINT: use htons())
610 * and public_key to setup connections 619 * and public_key to setup connections