diff options
Diffstat (limited to 'toxcore')
-rw-r--r-- | toxcore/DHT.c | 2 | ||||
-rw-r--r-- | toxcore/Messenger.c | 26 | ||||
-rw-r--r-- | toxcore/Messenger.h | 14 | ||||
-rw-r--r-- | toxcore/group_chats.c | 22 | ||||
-rw-r--r-- | toxcore/group_chats.h | 13 | ||||
-rw-r--r-- | toxcore/net_crypto.c | 4 | ||||
-rw-r--r-- | toxcore/tox.c | 16 | ||||
-rw-r--r-- | toxcore/tox.h | 12 | ||||
-rw-r--r-- | toxcore/util.h | 2 |
9 files changed, 98 insertions, 13 deletions
diff --git a/toxcore/DHT.c b/toxcore/DHT.c index f38ce3a5..84c00c70 100644 --- a/toxcore/DHT.c +++ b/toxcore/DHT.c | |||
@@ -1579,6 +1579,7 @@ void DHT_save(DHT *dht, uint8_t *data) | |||
1579 | len = num * sizeof(Client_data); | 1579 | len = num * sizeof(Client_data); |
1580 | type = DHT_STATE_TYPE_CLIENTS; | 1580 | type = DHT_STATE_TYPE_CLIENTS; |
1581 | data = z_state_save_subheader(data, len, type); | 1581 | data = z_state_save_subheader(data, len, type); |
1582 | |||
1582 | if (num) { | 1583 | if (num) { |
1583 | Client_data *clients = (Client_data *)data; | 1584 | Client_data *clients = (Client_data *)data; |
1584 | 1585 | ||
@@ -1586,6 +1587,7 @@ void DHT_save(DHT *dht, uint8_t *data) | |||
1586 | if (dht->close_clientlist[i].timestamp != 0) | 1587 | if (dht->close_clientlist[i].timestamp != 0) |
1587 | memcpy(&clients[num++], &dht->close_clientlist[i], sizeof(Client_data)); | 1588 | memcpy(&clients[num++], &dht->close_clientlist[i], sizeof(Client_data)); |
1588 | } | 1589 | } |
1590 | |||
1589 | data += len; | 1591 | data += len; |
1590 | } | 1592 | } |
1591 | 1593 | ||
diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c index d9e085fb..dbbfa58c 100644 --- a/toxcore/Messenger.c +++ b/toxcore/Messenger.c | |||
@@ -686,9 +686,9 @@ void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int, u | |||
686 | 686 | ||
687 | /* Set the callback for group messages. | 687 | /* Set the callback for group messages. |
688 | * | 688 | * |
689 | * Function(Messenger *m, int groupnumber, uint8_t * message, uint16_t length, void *userdata) | 689 | * Function(Tox *tox, int groupnumber, int friendgroupnumber, uint8_t * message, uint16_t length, void *userdata) |
690 | */ | 690 | */ |
691 | void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), | 691 | void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, int, uint8_t *, uint16_t, void *), |
692 | void *userdata) | 692 | void *userdata) |
693 | { | 693 | { |
694 | m->group_message = function; | 694 | m->group_message = function; |
@@ -705,7 +705,7 @@ static void group_message_function(Group_Chat *chat, int peer_number, uint8_t *m | |||
705 | } | 705 | } |
706 | 706 | ||
707 | if (m->group_message) | 707 | if (m->group_message) |
708 | (*m->group_message)(m, i, message, length, m->group_invite_userdata); | 708 | (*m->group_message)(m, i, peer_number, message, length, m->group_invite_userdata); |
709 | } | 709 | } |
710 | 710 | ||
711 | /* Creates a new groupchat and puts it in the chats array. | 711 | /* Creates a new groupchat and puts it in the chats array. |
@@ -788,6 +788,25 @@ int del_groupchat(Messenger *m, int groupnumber) | |||
788 | return 0; | 788 | return 0; |
789 | } | 789 | } |
790 | 790 | ||
791 | /* Copy the name of peernumber who is in groupnumber to name. | ||
792 | * name must be at least MAX_NICK_BYTES long. | ||
793 | * | ||
794 | * return length of name if success | ||
795 | * return -1 if failure | ||
796 | */ | ||
797 | int m_group_peername(Messenger *m, int groupnumber, int peernumber, uint8_t *name) | ||
798 | { | ||
799 | if ((unsigned int)groupnumber >= m->numchats) | ||
800 | return -1; | ||
801 | |||
802 | if (m->chats == NULL) | ||
803 | return -1; | ||
804 | |||
805 | if (m->chats[groupnumber] == NULL) | ||
806 | return -1; | ||
807 | |||
808 | return group_peername(m->chats[groupnumber], peernumber, name); | ||
809 | } | ||
791 | /* return 1 if that friend was invited to the group | 810 | /* return 1 if that friend was invited to the group |
792 | * return 0 if the friend was not or error. | 811 | * return 0 if the friend was not or error. |
793 | */ | 812 | */ |
@@ -1593,6 +1612,7 @@ static int messenger_load_state_callback(void *outer, uint8_t *data, uint32_t le | |||
1593 | break; | 1612 | break; |
1594 | 1613 | ||
1595 | #ifdef DEBUG | 1614 | #ifdef DEBUG |
1615 | |||
1596 | default: | 1616 | default: |
1597 | fprintf(stderr, "Load state: contains unrecognized part (len %u, type %u)\n", | 1617 | fprintf(stderr, "Load state: contains unrecognized part (len %u, type %u)\n", |
1598 | length, type); | 1618 | length, type); |
diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h index bfcc69df..78580dc0 100644 --- a/toxcore/Messenger.h +++ b/toxcore/Messenger.h | |||
@@ -159,7 +159,7 @@ typedef struct Messenger { | |||
159 | void *friend_connectionstatuschange_userdata; | 159 | void *friend_connectionstatuschange_userdata; |
160 | void (*group_invite)(struct Messenger *m, int, uint8_t *, void *); | 160 | void (*group_invite)(struct Messenger *m, int, uint8_t *, void *); |
161 | void *group_invite_userdata; | 161 | void *group_invite_userdata; |
162 | void (*group_message)(struct Messenger *m, int, uint8_t *, uint16_t, void *); | 162 | void (*group_message)(struct Messenger *m, int, int, uint8_t *, uint16_t, void *); |
163 | void *group_message_userdata; | 163 | void *group_message_userdata; |
164 | 164 | ||
165 | } Messenger; | 165 | } Messenger; |
@@ -382,9 +382,9 @@ void m_callback_group_invite(Messenger *m, void (*function)(Messenger *m, int, u | |||
382 | 382 | ||
383 | /* Set the callback for group messages. | 383 | /* Set the callback for group messages. |
384 | * | 384 | * |
385 | * Function(Messenger *m, int groupnumber, uint8_t * message, uint16_t length, void *userdata) | 385 | * Function(Tox *tox, int groupnumber, int friendgroupnumber, uint8_t * message, uint16_t length, void *userdata) |
386 | */ | 386 | */ |
387 | void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, uint8_t *, uint16_t, void *), | 387 | void m_callback_group_message(Messenger *m, void (*function)(Messenger *m, int, int, uint8_t *, uint16_t, void *), |
388 | void *userdata); | 388 | void *userdata); |
389 | 389 | ||
390 | /* Creates a new groupchat and puts it in the chats array. | 390 | /* Creates a new groupchat and puts it in the chats array. |
@@ -401,6 +401,14 @@ int add_groupchat(Messenger *m); | |||
401 | */ | 401 | */ |
402 | int del_groupchat(Messenger *m, int groupnumber); | 402 | int del_groupchat(Messenger *m, int groupnumber); |
403 | 403 | ||
404 | /* Copy the name of peernumber who is in groupnumber to name. | ||
405 | * name must be at least MAX_NICK_BYTES long. | ||
406 | * | ||
407 | * return length of name if success | ||
408 | * return -1 if failure | ||
409 | */ | ||
410 | int m_group_peername(Messenger *m, int groupnumber, int peernumber, uint8_t *name); | ||
411 | |||
404 | /* invite friendnumber to groupnumber | 412 | /* invite friendnumber to groupnumber |
405 | * return 0 on success | 413 | * return 0 on success |
406 | * return -1 on failure | 414 | * return -1 on failure |
diff --git a/toxcore/group_chats.c b/toxcore/group_chats.c index f37c6a9c..dc8e158b 100644 --- a/toxcore/group_chats.c +++ b/toxcore/group_chats.c | |||
@@ -278,6 +278,28 @@ static int delpeer(Group_Chat *chat, uint8_t *client_id) | |||
278 | 278 | ||
279 | return -1; | 279 | return -1; |
280 | } | 280 | } |
281 | |||
282 | /* Copy the name of peernum to name. | ||
283 | * name must be at least MAX_NICK_BYTES long. | ||
284 | * | ||
285 | * return length of name if success | ||
286 | * return -1 if failure | ||
287 | */ | ||
288 | int group_peername(Group_Chat *chat, int peernum, uint8_t *name) | ||
289 | { | ||
290 | if ((uint32_t)peernum >= chat->numpeers) | ||
291 | return -1; | ||
292 | |||
293 | if (chat->group[peernum].nick_len == 0) { | ||
294 | memcpy(name, "NSA Agent", 10); /* Kindly remind the user that someone with no name might be a NSA agent.*/ | ||
295 | return 10; | ||
296 | } | ||
297 | |||
298 | memcpy(name, chat->group[peernum].nick, chat->group[peernum].nick_len); | ||
299 | return chat->group[peernum].nick_len; | ||
300 | } | ||
301 | |||
302 | |||
281 | /* min time between pings sent to one peer in seconds */ | 303 | /* min time between pings sent to one peer in seconds */ |
282 | #define PING_TIMEOUT 5 | 304 | #define PING_TIMEOUT 5 |
283 | static int send_getnodes(Group_Chat *chat, IP_Port ip_port, int peernum) | 305 | static int send_getnodes(Group_Chat *chat, IP_Port ip_port, int peernum) |
diff --git a/toxcore/group_chats.h b/toxcore/group_chats.h index 78a5488c..e45f2af2 100644 --- a/toxcore/group_chats.h +++ b/toxcore/group_chats.h | |||
@@ -31,6 +31,8 @@ | |||
31 | extern "C" { | 31 | extern "C" { |
32 | #endif | 32 | #endif |
33 | 33 | ||
34 | #define MAX_NICK_BYTES 128 | ||
35 | |||
34 | typedef struct { | 36 | typedef struct { |
35 | uint8_t client_id[crypto_box_PUBLICKEYBYTES]; | 37 | uint8_t client_id[crypto_box_PUBLICKEYBYTES]; |
36 | uint64_t pingid; | 38 | uint64_t pingid; |
@@ -39,6 +41,9 @@ typedef struct { | |||
39 | uint64_t last_recv; | 41 | uint64_t last_recv; |
40 | uint64_t last_recv_msgping; | 42 | uint64_t last_recv_msgping; |
41 | uint32_t last_message_number; | 43 | uint32_t last_message_number; |
44 | |||
45 | uint8_t nick[MAX_NICK_BYTES]; | ||
46 | uint16_t nick_len; | ||
42 | } Group_Peer; | 47 | } Group_Peer; |
43 | 48 | ||
44 | typedef struct { | 49 | typedef struct { |
@@ -65,6 +70,14 @@ typedef struct Group_Chat { | |||
65 | 70 | ||
66 | } Group_Chat; | 71 | } Group_Chat; |
67 | 72 | ||
73 | /* Copy the name of peernum to name. | ||
74 | * name must be at least MAX_NICK_BYTES long. | ||
75 | * | ||
76 | * return length of name if success | ||
77 | * return -1 if failure | ||
78 | */ | ||
79 | int group_peername(Group_Chat *chat, int peernum, uint8_t *name); | ||
80 | |||
68 | /* | 81 | /* |
69 | * Set callback function for chat messages. | 82 | * Set callback function for chat messages. |
70 | * | 83 | * |
diff --git a/toxcore/net_crypto.c b/toxcore/net_crypto.c index 1de32cb0..a2e42557 100644 --- a/toxcore/net_crypto.c +++ b/toxcore/net_crypto.c | |||
@@ -456,7 +456,7 @@ int crypto_connect(Net_Crypto *c, uint8_t *public_key, IP_Port ip_port) | |||
456 | } | 456 | } |
457 | 457 | ||
458 | if (realloc_cryptoconnection(c, c->crypto_connections_length + 1) == -1 | 458 | if (realloc_cryptoconnection(c, c->crypto_connections_length + 1) == -1 |
459 | || c->crypto_connections == NULL) | 459 | || c->crypto_connections == NULL) |
460 | return -1; | 460 | return -1; |
461 | 461 | ||
462 | memset(&(c->crypto_connections[c->crypto_connections_length]), 0, sizeof(Crypto_Connection)); | 462 | memset(&(c->crypto_connections[c->crypto_connections_length]), 0, sizeof(Crypto_Connection)); |
@@ -580,7 +580,7 @@ int accept_crypto_inbound(Net_Crypto *c, int connection_id, uint8_t *public_key, | |||
580 | * } | 580 | * } |
581 | */ | 581 | */ |
582 | if (realloc_cryptoconnection(c, c->crypto_connections_length + 1) == -1 | 582 | if (realloc_cryptoconnection(c, c->crypto_connections_length + 1) == -1 |
583 | || c->crypto_connections == NULL) | 583 | || c->crypto_connections == NULL) |
584 | return -1; | 584 | return -1; |
585 | 585 | ||
586 | memset(&(c->crypto_connections[c->crypto_connections_length]), 0, sizeof(Crypto_Connection)); | 586 | memset(&(c->crypto_connections[c->crypto_connections_length]), 0, sizeof(Crypto_Connection)); |
diff --git a/toxcore/tox.c b/toxcore/tox.c index 80d64626..4fba360b 100644 --- a/toxcore/tox.c +++ b/toxcore/tox.c | |||
@@ -379,9 +379,9 @@ void tox_callback_group_invite(void *tox, void (*function)(Messenger *tox, int, | |||
379 | } | 379 | } |
380 | /* Set the callback for group messages. | 380 | /* Set the callback for group messages. |
381 | * | 381 | * |
382 | * Function(Tox *tox, int groupnumber, uint8_t * message, uint16_t length, void *userdata) | 382 | * Function(Tox *tox, int groupnumber, int friendgroupnumber, uint8_t * message, uint16_t length, void *userdata) |
383 | */ | 383 | */ |
384 | void tox_callback_group_message(void *tox, void (*function)(Messenger *tox, int, uint8_t *, uint16_t, void *), | 384 | void tox_callback_group_message(void *tox, void (*function)(Messenger *tox, int, int, uint8_t *, uint16_t, void *), |
385 | void *userdata) | 385 | void *userdata) |
386 | { | 386 | { |
387 | Messenger *m = tox; | 387 | Messenger *m = tox; |
@@ -407,6 +407,18 @@ int tox_del_groupchat(void *tox, int groupnumber) | |||
407 | Messenger *m = tox; | 407 | Messenger *m = tox; |
408 | return del_groupchat(m, groupnumber); | 408 | return del_groupchat(m, groupnumber); |
409 | } | 409 | } |
410 | |||
411 | /* Copy the name of peernumber who is in groupnumber to name. | ||
412 | * name must be at least MAX_NICK_BYTES long. | ||
413 | * | ||
414 | * return length of name if success | ||
415 | * return -1 if failure | ||
416 | */ | ||
417 | int tox_group_peername(void *tox, int groupnumber, int peernumber, uint8_t *name) | ||
418 | { | ||
419 | Messenger *m = tox; | ||
420 | return m_group_peername(m, groupnumber, peernumber, name); | ||
421 | } | ||
410 | /* invite friendnumber to groupnumber | 422 | /* invite friendnumber to groupnumber |
411 | * return 0 on success | 423 | * return 0 on success |
412 | * return -1 on failure | 424 | * return -1 on failure |
diff --git a/toxcore/tox.h b/toxcore/tox.h index 89242f1f..b39008fe 100644 --- a/toxcore/tox.h +++ b/toxcore/tox.h | |||
@@ -357,9 +357,9 @@ void tox_callback_group_invite(Tox *tox, void (*function)(Tox *tox, int, uint8_t | |||
357 | 357 | ||
358 | /* Set the callback for group messages. | 358 | /* Set the callback for group messages. |
359 | * | 359 | * |
360 | * Function(Tox *tox, int groupnumber, uint8_t * message, uint16_t length, void *userdata) | 360 | * Function(Tox *tox, int groupnumber, int friendgroupnumber, uint8_t * message, uint16_t length, void *userdata) |
361 | */ | 361 | */ |
362 | void tox_callback_group_message(Tox *tox, void (*function)(Tox *tox, int, uint8_t *, uint16_t, void *), | 362 | void tox_callback_group_message(Tox *tox, void (*function)(Tox *tox, int, int, uint8_t *, uint16_t, void *), |
363 | void *userdata); | 363 | void *userdata); |
364 | 364 | ||
365 | /* Creates a new groupchat and puts it in the chats array. | 365 | /* Creates a new groupchat and puts it in the chats array. |
@@ -376,6 +376,14 @@ int tox_add_groupchat(Tox *tox); | |||
376 | */ | 376 | */ |
377 | int tox_del_groupchat(Tox *tox, int groupnumber); | 377 | int tox_del_groupchat(Tox *tox, int groupnumber); |
378 | 378 | ||
379 | /* Copy the name of peernumber who is in groupnumber to name. | ||
380 | * name must be at least TOX_MAX_NAME_LENGTH long. | ||
381 | * | ||
382 | * return length of name if success | ||
383 | * return -1 if failure | ||
384 | */ | ||
385 | int tox_group_peername(Tox *tox, int groupnumber, int peernumber, uint8_t *name); | ||
386 | |||
379 | /* invite friendnumber to groupnumber | 387 | /* invite friendnumber to groupnumber |
380 | * return 0 on success | 388 | * return 0 on success |
381 | * return -1 on failure | 389 | * return -1 on failure |
diff --git a/toxcore/util.h b/toxcore/util.h index 6937f7d4..9e4ac79a 100644 --- a/toxcore/util.h +++ b/toxcore/util.h | |||
@@ -18,7 +18,7 @@ void id_cpy(uint8_t *dest, uint8_t *src); | |||
18 | 18 | ||
19 | typedef int (*load_state_callback_func)(void *outer, uint8_t *data, uint32_t len, uint16_t type); | 19 | typedef int (*load_state_callback_func)(void *outer, uint8_t *data, uint32_t len, uint16_t type); |
20 | int load_state(load_state_callback_func load_state_callback, void *outer, | 20 | int load_state(load_state_callback_func load_state_callback, void *outer, |
21 | uint8_t *data, uint32_t length, uint16_t cookie_inner); | 21 | uint8_t *data, uint32_t length, uint16_t cookie_inner); |
22 | 22 | ||
23 | #undef LOGGING | 23 | #undef LOGGING |
24 | /* #define LOGGING */ | 24 | /* #define LOGGING */ |