diff options
author | Coren[m] <Break@Ocean> | 2013-09-13 09:14:21 +0200 |
---|---|---|
committer | Coren[m] <Break@Ocean> | 2013-09-13 09:14:21 +0200 |
commit | cbd575f7a006877d7b9f9f242eafb0c16c05c0d1 (patch) | |
tree | 13b541c6c7b352938ae6f188a8cbdd083d983c58 | |
parent | c35e0bd6e39b066a53f2797fc84fe3b620eeb6eb (diff) | |
parent | f8b979a92a8c316c49bed28e158a468a2f74346c (diff) |
Merge remote-tracking branch 'upstream/master' into nTox
-rw-r--r-- | other/DHT_bootstrap.c | 8 | ||||
-rw-r--r-- | testing/nTox.c | 46 | ||||
-rw-r--r-- | testing/nTox.h | 1 | ||||
-rw-r--r-- | toxcore/LAN_discovery.h | 2 | ||||
-rw-r--r-- | toxcore/Messenger.c | 123 | ||||
-rw-r--r-- | toxcore/Messenger.h | 56 | ||||
-rw-r--r-- | toxcore/group_chats.h | 1 | ||||
-rw-r--r-- | toxcore/tox.c | 75 | ||||
-rw-r--r-- | toxcore/tox.h | 53 |
9 files changed, 354 insertions, 11 deletions
diff --git a/other/DHT_bootstrap.c b/other/DHT_bootstrap.c index 654b759f..aed17020 100644 --- a/other/DHT_bootstrap.c +++ b/other/DHT_bootstrap.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #endif | 31 | #endif |
32 | 32 | ||
33 | #include "../toxcore/DHT.h" | 33 | #include "../toxcore/DHT.h" |
34 | #include "../toxcore/LAN_discovery.h" | ||
34 | #include "../toxcore/friend_requests.h" | 35 | #include "../toxcore/friend_requests.h" |
35 | #include "../testing/misc_tools.c" | 36 | #include "../testing/misc_tools.c" |
36 | 37 | ||
@@ -123,6 +124,9 @@ int main(int argc, char *argv[]) | |||
123 | 124 | ||
124 | int is_waiting_for_dht_connection = 1; | 125 | int is_waiting_for_dht_connection = 1; |
125 | 126 | ||
127 | uint64_t last_LANdiscovery = 0; | ||
128 | LANdiscovery_init(dht); | ||
129 | |||
126 | while (1) { | 130 | while (1) { |
127 | if (is_waiting_for_dht_connection && DHT_isconnected(dht)) { | 131 | if (is_waiting_for_dht_connection && DHT_isconnected(dht)) { |
128 | printf("Connected to other bootstrap server successfully.\n"); | 132 | printf("Connected to other bootstrap server successfully.\n"); |
@@ -130,6 +134,10 @@ int main(int argc, char *argv[]) | |||
130 | } | 134 | } |
131 | 135 | ||
132 | do_DHT(dht); | 136 | do_DHT(dht); |
137 | if (last_LANdiscovery + (is_waiting_for_dht_connection ? 5 : LAN_DISCOVERY_INTERVAL) < unix_time()) { | ||
138 | send_LANdiscovery(htons(PORT), dht->c); | ||
139 | last_LANdiscovery = unix_time(); | ||
140 | } | ||
133 | 141 | ||
134 | networking_poll(dht->c->lossless_udp->net); | 142 | networking_poll(dht->c->lossless_udp->net); |
135 | 143 | ||
diff --git a/testing/nTox.c b/testing/nTox.c index 9f6d8233..178bce2f 100644 --- a/testing/nTox.c +++ b/testing/nTox.c | |||
@@ -354,13 +354,33 @@ void line_eval(Tox *m, char *line) | |||
354 | do_refresh(); | 354 | do_refresh(); |
355 | } else if (inpt_command == 'h') { //help | 355 | } else if (inpt_command == 'h') { //help |
356 | new_lines(help); | 356 | new_lines(help); |
357 | } else if (inpt_command == 'i') { //info | 357 | } else if (inpt_command == 'x') { //info |
358 | char idstring[200]; | 358 | char idstring[200]; |
359 | get_id(m, idstring); | 359 | get_id(m, idstring); |
360 | new_lines(idstring); | 360 | new_lines(idstring); |
361 | } | 361 | } else if (inpt_command == 'g') { //create new group chat |
362 | 362 | char msg[256]; | |
363 | else if (inpt_command == 'q') { //exit | 363 | sprintf(msg, "[g] Created new group chat with number: %u", tox_add_groupchat(m)); |
364 | new_lines(msg); | ||
365 | } else if (inpt_command == 'i') { //invite friendnum to groupnum | ||
366 | char *posi[1]; | ||
367 | int friendnumber = strtoul(line + prompt_offset, posi, 0); | ||
368 | int groupnumber = strtoul(*posi + 1, NULL, 0); | ||
369 | char msg[256]; | ||
370 | sprintf(msg, "[g] Invited friend number %u to group number %u, returned: %u (0 means success)", friendnumber, | ||
371 | groupnumber, tox_invite_friend(m, friendnumber, groupnumber)); | ||
372 | new_lines(msg); | ||
373 | } else if (inpt_command == 'z') { //send message to groupnum | ||
374 | char *posi[1]; | ||
375 | int groupnumber = strtoul(line + prompt_offset, posi, 0); | ||
376 | |||
377 | if (**posi != 0) { | ||
378 | char msg[256 + 1024]; | ||
379 | sprintf(msg, "[g] sent message: %s to group num: %u returned: %u (0 means success)", *posi + 1, groupnumber, | ||
380 | tox_group_message_send(m, groupnumber, (uint8_t *)*posi + 1, strlen(*posi + 1) + 1)); | ||
381 | new_lines(msg); | ||
382 | } | ||
383 | } else if (inpt_command == 'q') { //exit | ||
364 | save_data(m); | 384 | save_data(m); |
365 | endwin(); | 385 | endwin(); |
366 | exit(EXIT_SUCCESS); | 386 | exit(EXIT_SUCCESS); |
@@ -557,6 +577,22 @@ void print_help(void) | |||
557 | puts("\t-f\t-\tSpecify a keyfile to read (or write to) from."); | 577 | puts("\t-f\t-\tSpecify a keyfile to read (or write to) from."); |
558 | } | 578 | } |
559 | 579 | ||
580 | void print_invite(Tox *m, int friendnumber, uint8_t *group_public_key, void *userdata) | ||
581 | { | ||
582 | char msg[256]; | ||
583 | sprintf(msg, "[i] recieved group chat invite from: %u, auto accepting and joining. group number: %u", friendnumber, | ||
584 | tox_join_groupchat(m, friendnumber, group_public_key)); | ||
585 | new_lines(msg); | ||
586 | } | ||
587 | |||
588 | void print_groupmessage(Tox *m, int groupnumber, uint8_t *message, uint16_t length, void *userdata) | ||
589 | { | ||
590 | char msg[256 + length]; | ||
591 | sprintf(msg, "[g] %u: %s", groupnumber, message); | ||
592 | new_lines(msg); | ||
593 | } | ||
594 | |||
595 | |||
560 | int main(int argc, char *argv[]) | 596 | int main(int argc, char *argv[]) |
561 | { | 597 | { |
562 | int on = 0; | 598 | int on = 0; |
@@ -601,6 +637,8 @@ int main(int argc, char *argv[]) | |||
601 | tox_callback_friendmessage(m, print_message, NULL); | 637 | tox_callback_friendmessage(m, print_message, NULL); |
602 | tox_callback_namechange(m, print_nickchange, NULL); | 638 | tox_callback_namechange(m, print_nickchange, NULL); |
603 | tox_callback_statusmessage(m, print_statuschange, NULL); | 639 | tox_callback_statusmessage(m, print_statuschange, NULL); |
640 | tox_callback_group_invite(m, print_invite, NULL); | ||
641 | tox_callback_group_message(m, print_groupmessage, NULL); | ||
604 | 642 | ||
605 | initscr(); | 643 | initscr(); |
606 | noecho(); | 644 | noecho(); |
diff --git a/testing/nTox.h b/testing/nTox.h index a72ce0c2..2cd5db09 100644 --- a/testing/nTox.h +++ b/testing/nTox.h | |||
@@ -31,7 +31,6 @@ | |||
31 | #include <ctype.h> | 31 | #include <ctype.h> |
32 | 32 | ||
33 | #include "../toxcore/tox.h" | 33 | #include "../toxcore/tox.h" |
34 | |||
35 | #define STRING_LENGTH 256 | 34 | #define STRING_LENGTH 256 |
36 | #define HISTORY 50 | 35 | #define HISTORY 50 |
37 | #define PUB_KEY_BYTES 32 | 36 | #define PUB_KEY_BYTES 32 |
diff --git a/toxcore/LAN_discovery.h b/toxcore/LAN_discovery.h index 78990936..3e9d9de5 100644 --- a/toxcore/LAN_discovery.h +++ b/toxcore/LAN_discovery.h | |||
@@ -35,6 +35,8 @@ | |||
35 | #include <linux/netdevice.h> | 35 | #include <linux/netdevice.h> |
36 | #endif | 36 | #endif |
37 | 37 | ||
38 | /* Interval in seconds between LAN discovery packet sending. */ | ||
39 | #define LAN_DISCOVERY_INTERVAL 60 | ||
38 | 40 | ||
39 | /* Send a LAN discovery pcaket to the broadcast address with port port. */ | 41 | /* Send a LAN discovery pcaket to the broadcast address with port port. */ |
40 | int send_LANdiscovery(uint16_t port, Net_Crypto *c); | 42 | int send_LANdiscovery(uint16_t port, Net_Crypto *c); |
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c index 177b8eb0..951057c5 100644 --- a/toxcore/Messenger.c +++ b/toxcore/Messenger.c | |||
@@ -673,6 +673,40 @@ static int group_num(Messenger *m, uint8_t *group_public_key) | |||
673 | return -1; | 673 | return -1; |
674 | } | 674 | } |
675 | 675 | ||
676 | /* Set the callback for group invites. | ||
677 | * | ||
678 | * Function(Messenger *m, int friendnumber, uint8_t *group_public_key, void *userdata) | ||
679 | */ | ||
680 | void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, void *), void *userdata) | ||
681 | { | ||
682 | m->group_invite = function; | ||
683 | m->group_invite_userdata = userdata; | ||
684 | } | ||
685 | |||
686 | /* Set the callback for group messages. | ||
687 | * | ||
688 | * Function(Messenger *m, int groupnumber, uint8_t * message, uint16_t length, void *userdata) | ||
689 | */ | ||
690 | void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), | ||
691 | void *userdata) | ||
692 | { | ||
693 | m->group_message = function; | ||
694 | m->group_message_userdata = userdata; | ||
695 | } | ||
696 | static void group_message_function(Group_Chat *chat, int peer_number, uint8_t *message, uint16_t length, void *userdata) | ||
697 | { | ||
698 | Messenger *m = userdata; | ||
699 | uint32_t i; | ||
700 | |||
701 | for (i = 0; i < m->numchats; ++i) { //TODO: remove this | ||
702 | if (m->chats[i] == chat) | ||
703 | break; | ||
704 | } | ||
705 | |||
706 | if (m->group_message) | ||
707 | (*m->group_message)(m, i, message, length, m->group_invite_userdata); | ||
708 | } | ||
709 | |||
676 | /* Creates a new groupchat and puts it in the chats array. | 710 | /* Creates a new groupchat and puts it in the chats array. |
677 | * | 711 | * |
678 | * return group number on success. | 712 | * return group number on success. |
@@ -689,6 +723,7 @@ int add_groupchat(Messenger *m) | |||
689 | if (newchat == NULL) | 723 | if (newchat == NULL) |
690 | return -1; | 724 | return -1; |
691 | 725 | ||
726 | callback_groupmessage(newchat, &group_message_function, m); | ||
692 | m->chats[i] = newchat; | 727 | m->chats[i] = newchat; |
693 | return i; | 728 | return i; |
694 | } | 729 | } |
@@ -705,6 +740,8 @@ int add_groupchat(Messenger *m) | |||
705 | if (temp[m->numchats] == NULL) | 740 | if (temp[m->numchats] == NULL) |
706 | return -1; | 741 | return -1; |
707 | 742 | ||
743 | m->chats = temp; | ||
744 | callback_groupmessage(temp[m->numchats], &group_message_function, m); | ||
708 | ++m->numchats; | 745 | ++m->numchats; |
709 | return (m->numchats - 1); | 746 | return (m->numchats - 1); |
710 | } | 747 | } |
@@ -714,7 +751,7 @@ int add_groupchat(Messenger *m) | |||
714 | * return 0 on success. | 751 | * return 0 on success. |
715 | * return -1 if failure. | 752 | * return -1 if failure. |
716 | */ | 753 | */ |
717 | static int del_groupchat(Messenger *m, int groupnumber) | 754 | int del_groupchat(Messenger *m, int groupnumber) |
718 | { | 755 | { |
719 | if ((unsigned int)groupnumber >= m->numchats) | 756 | if ((unsigned int)groupnumber >= m->numchats) |
720 | return -1; | 757 | return -1; |
@@ -748,9 +785,42 @@ static int del_groupchat(Messenger *m, int groupnumber) | |||
748 | return 0; | 785 | return 0; |
749 | } | 786 | } |
750 | 787 | ||
788 | /* return 1 if that friend was invited to the group | ||
789 | * return 0 if the friend was not or error. | ||
790 | */ | ||
791 | static uint8_t group_invited(Messenger *m, int friendnumber, int groupnumber) | ||
792 | { | ||
793 | //TODO: this function; | ||
794 | return 1; | ||
795 | } | ||
796 | |||
797 | /* invite friendnumber to groupnumber | ||
798 | * return 0 on success | ||
799 | * return -1 on failure | ||
800 | */ | ||
801 | int invite_friend(Messenger *m, int friendnumber, int groupnumber) | ||
802 | { | ||
803 | if (friend_not_valid(m, friendnumber) || (unsigned int)groupnumber >= m->numchats) | ||
804 | return -1; | ||
805 | |||
806 | if (m->chats == NULL) | ||
807 | return -1; | ||
808 | |||
809 | if (m->friendlist[friendnumber].status == NOFRIEND || m->chats[groupnumber] == NULL) | ||
810 | return -1; | ||
811 | |||
812 | //TODO: store invited friends. | ||
813 | if (write_cryptpacket_id(m, friendnumber, PACKET_ID_INVITE_GROUPCHAT, m->chats[groupnumber]->self_public_key, | ||
814 | crypto_box_PUBLICKEYBYTES) == 0) | ||
815 | return -1; | ||
816 | |||
817 | return 0; | ||
818 | } | ||
819 | |||
820 | |||
751 | /* Join a group (you need to have been invited first.) | 821 | /* Join a group (you need to have been invited first.) |
752 | * | 822 | * |
753 | * returns 0 on success | 823 | * returns group number on success |
754 | * returns -1 on failure. | 824 | * returns -1 on failure. |
755 | */ | 825 | */ |
756 | int join_groupchat(Messenger *m, int friendnumber, uint8_t *friend_group_public_key) | 826 | int join_groupchat(Messenger *m, int friendnumber, uint8_t *friend_group_public_key) |
@@ -770,12 +840,34 @@ int join_groupchat(Messenger *m, int friendnumber, uint8_t *friend_group_public_ | |||
770 | if (write_cryptpacket_id(m, friendnumber, PACKET_ID_JOIN_GROUPCHAT, data, sizeof(data))) { | 840 | if (write_cryptpacket_id(m, friendnumber, PACKET_ID_JOIN_GROUPCHAT, data, sizeof(data))) { |
771 | chat_bootstrap_nonlazy(m->chats[groupnum], get_friend_ipport(m, friendnumber), | 841 | chat_bootstrap_nonlazy(m->chats[groupnum], get_friend_ipport(m, friendnumber), |
772 | friend_group_public_key); //TODO: check if ip returned is zero? | 842 | friend_group_public_key); //TODO: check if ip returned is zero? |
773 | return 0; | 843 | return groupnum; |
774 | } | 844 | } |
775 | 845 | ||
776 | return -1; | 846 | return -1; |
777 | } | 847 | } |
778 | 848 | ||
849 | /* send a group message | ||
850 | * return 0 on success | ||
851 | * return -1 on failure | ||
852 | */ | ||
853 | |||
854 | int group_message_send(Messenger *m, int groupnumber, uint8_t *message, uint32_t length) | ||
855 | { | ||
856 | if ((unsigned int)groupnumber >= m->numchats) | ||
857 | return -1; | ||
858 | |||
859 | if (m->chats == NULL) | ||
860 | return -1; | ||
861 | |||
862 | if (m->chats[groupnumber] == NULL) | ||
863 | return -1; | ||
864 | |||
865 | if (group_sendmessage(m->chats[groupnumber], message, length) > 0) | ||
866 | return 0; | ||
867 | |||
868 | return -1; | ||
869 | } | ||
870 | |||
779 | static int handle_group(void *object, IP_Port source, uint8_t *packet, uint32_t length) | 871 | static int handle_group(void *object, IP_Port source, uint8_t *packet, uint32_t length) |
780 | { | 872 | { |
781 | Messenger *m = object; | 873 | Messenger *m = object; |
@@ -809,8 +901,6 @@ static void do_allgroupchats(Messenger *m) | |||
809 | 901 | ||
810 | /*********************************/ | 902 | /*********************************/ |
811 | 903 | ||
812 | /* Interval in seconds between LAN discovery packet sending. */ | ||
813 | #define LAN_DISCOVERY_INTERVAL 60 | ||
814 | #define PORT 33445 | 904 | #define PORT 33445 |
815 | 905 | ||
816 | /* Send a LAN discovery packet every LAN_DISCOVERY_INTERVAL seconds. */ | 906 | /* Send a LAN discovery packet every LAN_DISCOVERY_INTERVAL seconds. */ |
@@ -1064,6 +1154,29 @@ void doFriends(Messenger *m) | |||
1064 | 1154 | ||
1065 | break; | 1155 | break; |
1066 | } | 1156 | } |
1157 | |||
1158 | case PACKET_ID_INVITE_GROUPCHAT: { | ||
1159 | if (data_length != crypto_box_PUBLICKEYBYTES) | ||
1160 | break; | ||
1161 | |||
1162 | if (m->group_invite) | ||
1163 | (*m->group_invite)(m, i, data, m->group_invite_userdata); | ||
1164 | } | ||
1165 | |||
1166 | case PACKET_ID_JOIN_GROUPCHAT: { | ||
1167 | if (data_length != crypto_box_PUBLICKEYBYTES * 2) | ||
1168 | break; | ||
1169 | |||
1170 | int groupnum = group_num(m, data); | ||
1171 | |||
1172 | if (groupnum == -1) | ||
1173 | break; | ||
1174 | |||
1175 | if (!group_invited(m, i, groupnum)) | ||
1176 | break; | ||
1177 | |||
1178 | group_newpeer(m->chats[groupnum], data + crypto_box_PUBLICKEYBYTES); | ||
1179 | } | ||
1067 | } | 1180 | } |
1068 | } else { | 1181 | } else { |
1069 | if (is_cryptoconnected(m->net_crypto, | 1182 | if (is_cryptoconnected(m->net_crypto, |
diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h index 7649a779..0656c736 100644 --- a/toxcore/Messenger.h +++ b/toxcore/Messenger.h | |||
@@ -157,7 +157,10 @@ typedef struct Messenger { | |||
157 | void *friend_statuschange_userdata; | 157 | void *friend_statuschange_userdata; |
158 | void (*friend_connectionstatuschange)(struct Messenger *m, int, uint8_t, void *); | 158 | void (*friend_connectionstatuschange)(struct Messenger *m, int, uint8_t, void *); |
159 | void *friend_connectionstatuschange_userdata; | 159 | void *friend_connectionstatuschange_userdata; |
160 | 160 | void (*group_invite)(struct Messenger *m, int, uint8_t *, void *); | |
161 | void *group_invite_userdata; | ||
162 | void (*group_message)(struct Messenger *m, int, uint8_t *, uint16_t, void *); | ||
163 | void *group_message_userdata; | ||
161 | 164 | ||
162 | } Messenger; | 165 | } Messenger; |
163 | 166 | ||
@@ -369,6 +372,57 @@ void m_callback_read_receipt(Messenger *m, void (*function)(Messenger *m, int, u | |||
369 | */ | 372 | */ |
370 | void m_callback_connectionstatus(Messenger *m, void (*function)(Messenger *m, int, uint8_t, void *), void *userdata); | 373 | void m_callback_connectionstatus(Messenger *m, void (*function)(Messenger *m, int, uint8_t, void *), void *userdata); |
371 | 374 | ||
375 | /**********GROUP CHATS************/ | ||
376 | |||
377 | /* Set the callback for group invites. | ||
378 | * | ||
379 | * Function(Messenger *m, int friendnumber, uint8_t *group_public_key, void *userdata) | ||
380 | */ | ||
381 | void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, void *), void *userdata); | ||
382 | |||
383 | /* Set the callback for group messages. | ||
384 | * | ||
385 | * Function(Messenger *m, int groupnumber, uint8_t * message, uint16_t length, void *userdata) | ||
386 | */ | ||
387 | void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), | ||
388 | void *userdata); | ||
389 | |||
390 | /* Creates a new groupchat and puts it in the chats array. | ||
391 | * | ||
392 | * return group number on success. | ||
393 | * return -1 on failure. | ||
394 | */ | ||
395 | int add_groupchat(Messenger *m); | ||
396 | |||
397 | /* Delete a groupchat from the chats array. | ||
398 | * | ||
399 | * return 0 on success. | ||
400 | * return -1 if failure. | ||
401 | */ | ||
402 | int del_groupchat(Messenger *m, int groupnumber); | ||
403 | |||
404 | /* invite friendnumber to groupnumber | ||
405 | * return 0 on success | ||
406 | * return -1 on failure | ||
407 | */ | ||
408 | int invite_friend(Messenger *m, int friendnumber, int groupnumber); | ||
409 | |||
410 | /* Join a group (you need to have been invited first.) | ||
411 | * | ||
412 | * returns group number on success | ||
413 | * returns -1 on failure. | ||
414 | */ | ||
415 | int join_groupchat(Messenger *m, int friendnumber, uint8_t *friend_group_public_key); | ||
416 | |||
417 | /* send a group message | ||
418 | * return 0 on success | ||
419 | * return -1 on failure | ||
420 | */ | ||
421 | |||
422 | int group_message_send(Messenger *m, int groupnumber, uint8_t *message, uint32_t length); | ||
423 | |||
424 | /*********************************/ | ||
425 | |||
372 | /* Run this at startup. | 426 | /* Run this at startup. |
373 | * return allocated instance of Messenger on success. | 427 | * return allocated instance of Messenger on success. |
374 | * return 0 if there are problems. | 428 | * return 0 if there are problems. |
diff --git a/toxcore/group_chats.h b/toxcore/group_chats.h index 535b46db..78a5488c 100644 --- a/toxcore/group_chats.h +++ b/toxcore/group_chats.h | |||
@@ -77,6 +77,7 @@ void callback_groupmessage(Group_Chat *chat, void (*function)(Group_Chat *chat, | |||
77 | /* | 77 | /* |
78 | * Send a message to the group. | 78 | * Send a message to the group. |
79 | * | 79 | * |
80 | * returns the number of peers it has sent it to. | ||
80 | */ | 81 | */ |
81 | uint32_t group_sendmessage(Group_Chat *chat, uint8_t *message, uint32_t length); | 82 | uint32_t group_sendmessage(Group_Chat *chat, uint8_t *message, uint32_t length); |
82 | 83 | ||
diff --git a/toxcore/tox.c b/toxcore/tox.c index 54bbd9f0..417f1af3 100644 --- a/toxcore/tox.c +++ b/toxcore/tox.c | |||
@@ -366,6 +366,81 @@ void tox_callback_connectionstatus(void *tox, void (*function)(Messenger *tox, i | |||
366 | m_callback_connectionstatus(m, function, userdata); | 366 | m_callback_connectionstatus(m, function, userdata); |
367 | } | 367 | } |
368 | 368 | ||
369 | /**********GROUP CHAT FUNCTIONS: WARNING WILL BREAK A LOT************/ | ||
370 | |||
371 | /* Set the callback for group invites. | ||
372 | * | ||
373 | * Function(Tox *tox, int friendnumber, uint8_t *group_public_key, void *userdata) | ||
374 | */ | ||
375 | void tox_callback_group_invite(void *tox, void (*function)(Messenger *tox, int, uint8_t *, void *), void *userdata) | ||
376 | { | ||
377 | Messenger *m = tox; | ||
378 | m_callback_group_invite(m, function, userdata); | ||
379 | } | ||
380 | /* Set the callback for group messages. | ||
381 | * | ||
382 | * Function(Tox *tox, int groupnumber, uint8_t * message, uint16_t length, void *userdata) | ||
383 | */ | ||
384 | void tox_callback_group_message(void *tox, void (*function)(Messenger *tox, int, uint8_t *, uint16_t, void *), | ||
385 | void *userdata) | ||
386 | { | ||
387 | Messenger *m = tox; | ||
388 | m_callback_group_message(m, function, userdata); | ||
389 | } | ||
390 | /* Creates a new groupchat and puts it in the chats array. | ||
391 | * | ||
392 | * return group number on success. | ||
393 | * return -1 on failure. | ||
394 | */ | ||
395 | int tox_add_groupchat(void *tox) | ||
396 | { | ||
397 | Messenger *m = tox; | ||
398 | return add_groupchat(m); | ||
399 | } | ||
400 | /* Delete a groupchat from the chats array. | ||
401 | * | ||
402 | * return 0 on success. | ||
403 | * return -1 if failure. | ||
404 | */ | ||
405 | int tox_del_groupchat(void *tox, int groupnumber) | ||
406 | { | ||
407 | Messenger *m = tox; | ||
408 | return del_groupchat(m, groupnumber); | ||
409 | } | ||
410 | /* invite friendnumber to groupnumber | ||
411 | * return 0 on success | ||
412 | * return -1 on failure | ||
413 | */ | ||
414 | int tox_invite_friend(void *tox, int friendnumber, int groupnumber) | ||
415 | { | ||
416 | Messenger *m = tox; | ||
417 | return invite_friend(m, friendnumber, groupnumber); | ||
418 | } | ||
419 | /* Join a group (you need to have been invited first.) | ||
420 | * | ||
421 | * returns group number on success | ||
422 | * returns -1 on failure. | ||
423 | */ | ||
424 | int tox_join_groupchat(void *tox, int friendnumber, uint8_t *friend_group_public_key) | ||
425 | { | ||
426 | Messenger *m = tox; | ||
427 | return join_groupchat(m, friendnumber, friend_group_public_key); | ||
428 | } | ||
429 | |||
430 | /* send a group message | ||
431 | * return 0 on success | ||
432 | * return -1 on failure | ||
433 | */ | ||
434 | int tox_group_message_send(void *tox, int groupnumber, uint8_t *message, uint32_t length) | ||
435 | { | ||
436 | Messenger *m = tox; | ||
437 | return group_message_send(m, groupnumber, message, length); | ||
438 | } | ||
439 | |||
440 | |||
441 | |||
442 | /******************END OF GROUP CHAT FUNCTIONS************************/ | ||
443 | |||
369 | /* Use this function to bootstrap the client. | 444 | /* Use this function to bootstrap the client. |
370 | * Sends a get nodes request to the given node with ip port and public_key. | 445 | * Sends a get nodes request to the given node with ip port and public_key. |
371 | */ | 446 | */ |
diff --git a/toxcore/tox.h b/toxcore/tox.h index 811e798b..6d5db49f 100644 --- a/toxcore/tox.h +++ b/toxcore/tox.h | |||
@@ -289,6 +289,59 @@ void tox_callback_read_receipt(Tox *tox, void (*function)(Tox *tox, int, uint32_ | |||
289 | */ | 289 | */ |
290 | void tox_callback_connectionstatus(Tox *tox, void (*function)(Tox *tox, int, uint8_t, void *), void *userdata); | 290 | void tox_callback_connectionstatus(Tox *tox, void (*function)(Tox *tox, int, uint8_t, void *), void *userdata); |
291 | 291 | ||
292 | /**********GROUP CHAT FUNCTIONS: WARNING WILL BREAK A LOT************/ | ||
293 | |||
294 | /* Set the callback for group invites. | ||
295 | * | ||
296 | * Function(Tox *tox, int friendnumber, uint8_t *group_public_key, void *userdata) | ||
297 | */ | ||
298 | void tox_callback_group_invite(Tox *tox, void (*function)(Tox *tox, int, uint8_t *, void *), void *userdata); | ||
299 | |||
300 | /* Set the callback for group messages. | ||
301 | * | ||
302 | * Function(Tox *tox, int groupnumber, uint8_t * message, uint16_t length, void *userdata) | ||
303 | */ | ||
304 | void tox_callback_group_message(Tox *tox, void (*function)(Tox *tox, int, uint8_t *, uint16_t, void *), | ||
305 | void *userdata); | ||
306 | |||
307 | /* Creates a new groupchat and puts it in the chats array. | ||
308 | * | ||
309 | * return group number on success. | ||
310 | * return -1 on failure. | ||
311 | */ | ||
312 | int tox_add_groupchat(Tox *tox); | ||
313 | |||
314 | /* Delete a groupchat from the chats array. | ||
315 | * | ||
316 | * return 0 on success. | ||
317 | * return -1 if failure. | ||
318 | */ | ||
319 | int tox_del_groupchat(Tox *tox, int groupnumber); | ||
320 | |||
321 | /* invite friendnumber to groupnumber | ||
322 | * return 0 on success | ||
323 | * return -1 on failure | ||
324 | */ | ||
325 | int tox_invite_friend(Tox *tox, int friendnumber, int groupnumber); | ||
326 | |||
327 | /* Join a group (you need to have been invited first.) | ||
328 | * | ||
329 | * returns group number on success | ||
330 | * returns -1 on failure. | ||
331 | */ | ||
332 | int tox_join_groupchat(Tox *tox, int friendnumber, uint8_t *friend_group_public_key); | ||
333 | |||
334 | |||
335 | /* send a group message | ||
336 | * return 0 on success | ||
337 | * return -1 on failure | ||
338 | */ | ||
339 | int tox_group_message_send(Tox *tox, int groupnumber, uint8_t *message, uint32_t length); | ||
340 | |||
341 | |||
342 | |||
343 | /******************END OF GROUP CHAT FUNCTIONS************************/ | ||
344 | |||
292 | /* Use this function to bootstrap the client. | 345 | /* Use this function to bootstrap the client. |
293 | * Sends a get nodes request to the given node with ip port and public_key. | 346 | * Sends a get nodes request to the given node with ip port and public_key. |
294 | */ | 347 | */ |