From ff6c471b9ec1e95a094ec6ace47d80bbfa6dd2b9 Mon Sep 17 00:00:00 2001 From: iphydf Date: Wed, 17 Aug 2016 10:52:04 +0100 Subject: [PATCH] Make tox_callback_friend_name stateless. See #27 and #40 for details. --- auto_tests/TCP_test.c | 82 +++++++++++---------- auto_tests/dht_test.c | 2 +- auto_tests/onion_test.c | 12 +-- auto_tests/tox_test.c | 2 +- other/DHT_bootstrap.c | 2 +- other/apidsl/tox.in.h | 2 +- other/bootstrap_daemon/src/tox-bootstrapd.c | 2 +- other/bootstrap_node_packets.c | 2 +- testing/DHT_test.c | 2 +- testing/nTox.c | 2 +- toxcore/DHT.c | 6 +- toxcore/LAN_discovery.c | 2 +- toxcore/Messenger.c | 14 ++-- toxcore/Messenger.h | 4 +- toxcore/TCP_client.c | 23 +++--- toxcore/TCP_client.h | 15 ++-- toxcore/TCP_connection.c | 26 ++++--- toxcore/TCP_connection.h | 10 +-- toxcore/friend_connection.c | 10 ++- toxcore/friend_connection.h | 5 +- toxcore/group.c | 4 +- toxcore/net_crypto.c | 29 ++++---- toxcore/net_crypto.h | 6 +- toxcore/network.c | 4 +- toxcore/network.h | 5 +- toxcore/onion.c | 12 +-- toxcore/onion_announce.c | 4 +- toxcore/onion_client.c | 11 +-- toxcore/ping.c | 4 +- toxcore/tox.c | 4 +- toxcore/tox.h | 2 +- toxcore/util.c | 4 +- 32 files changed, 161 insertions(+), 153 deletions(-) diff --git a/auto_tests/TCP_test.c b/auto_tests/TCP_test.c index ba1d523287..04c5dfe2ea 100644 --- a/auto_tests/TCP_test.c +++ b/auto_tests/TCP_test.c @@ -334,7 +334,8 @@ static int status_callback(void *object, uint32_t number, uint8_t connection_id, return 0; } static int data_callback_good; -static int data_callback(void *object, uint32_t number, uint8_t connection_id, const uint8_t *data, uint16_t length) +static int data_callback(void *object, uint32_t number, uint8_t connection_id, const uint8_t *data, uint16_t length, + void *userdata) { if (object != (void *)3) return 1; @@ -355,7 +356,8 @@ static int data_callback(void *object, uint32_t number, uint8_t connection_id, c static int oob_data_callback_good; static uint8_t oob_pubkey[crypto_box_PUBLICKEYBYTES]; -static int oob_data_callback(void *object, const uint8_t *public_key, const uint8_t *data, uint16_t length) +static int oob_data_callback(void *object, const uint8_t *public_key, const uint8_t *data, uint16_t length, + void *userdata) { if (object != (void *)4) return 1; @@ -394,21 +396,21 @@ START_TEST(test_client) ip_port_tcp_s.ip.ip6.in6_addr = in6addr_loopback; TCP_Client_Connection *conn = new_TCP_connection(ip_port_tcp_s, self_public_key, f_public_key, f_secret_key, 0); c_sleep(50); - do_TCP_connection(conn); + do_TCP_connection(conn, NULL); ck_assert_msg(conn->status == TCP_CLIENT_UNCONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_UNCONFIRMED, conn->status); c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_TCP_connection(conn); + do_TCP_connection(conn, NULL); ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED, conn->status); c_sleep(500); - do_TCP_connection(conn); + do_TCP_connection(conn, NULL); ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED, conn->status); c_sleep(500); - do_TCP_connection(conn); + do_TCP_connection(conn, NULL); ck_assert_msg(conn->status == TCP_CLIENT_CONFIRMED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONFIRMED, conn->status); do_TCP_server(tcp_s); @@ -427,13 +429,13 @@ START_TEST(test_client) oob_data_handler(conn, oob_data_callback, (void *)4); oob_data_callback_good = response_callback_good = status_callback_good = data_callback_good = 0; c_sleep(50); - do_TCP_connection(conn); - do_TCP_connection(conn2); + do_TCP_connection(conn, NULL); + do_TCP_connection(conn2, NULL); c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_TCP_connection(conn); - do_TCP_connection(conn2); + do_TCP_connection(conn, NULL); + do_TCP_connection(conn2, NULL); c_sleep(50); uint8_t data[5] = {1, 2, 3, 4, 5}; memcpy(oob_pubkey, f2_public_key, crypto_box_PUBLICKEYBYTES); @@ -443,8 +445,8 @@ START_TEST(test_client) c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_TCP_connection(conn); - do_TCP_connection(conn2); + do_TCP_connection(conn, NULL); + do_TCP_connection(conn2, NULL); ck_assert_msg(oob_data_callback_good == 1, "oob callback not called"); ck_assert_msg(response_callback_good == 1, "response callback not called"); ck_assert_msg(public_key_cmp(response_callback_public_key, f2_public_key) == 0, "wrong public key"); @@ -457,16 +459,16 @@ START_TEST(test_client) c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_TCP_connection(conn); - do_TCP_connection(conn2); + do_TCP_connection(conn, NULL); + do_TCP_connection(conn2, NULL); ck_assert_msg(data_callback_good == 1, "data callback not called"); status_callback_good = 0; send_disconnect_request(conn2, 0); c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_TCP_connection(conn); - do_TCP_connection(conn2); + do_TCP_connection(conn, NULL); + do_TCP_connection(conn2, NULL); ck_assert_msg(status_callback_good == 1, "status callback not called"); ck_assert_msg(status_callback_status == 1, "wrong status"); kill_TCP_server(tcp_s); @@ -492,15 +494,15 @@ START_TEST(test_client_invalid) ip_port_tcp_s.ip.ip6.in6_addr = in6addr_loopback; TCP_Client_Connection *conn = new_TCP_connection(ip_port_tcp_s, self_public_key, f_public_key, f_secret_key, 0); c_sleep(50); - do_TCP_connection(conn); + do_TCP_connection(conn, NULL); ck_assert_msg(conn->status == TCP_CLIENT_CONNECTING, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONNECTING, conn->status); c_sleep(5000); - do_TCP_connection(conn); + do_TCP_connection(conn, NULL); ck_assert_msg(conn->status == TCP_CLIENT_CONNECTING, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_CONNECTING, conn->status); c_sleep(6000); - do_TCP_connection(conn); + do_TCP_connection(conn, NULL); ck_assert_msg(conn->status == TCP_CLIENT_DISCONNECTED, "Wrong status. Expected: %u, is: %u", TCP_CLIENT_DISCONNECTED, conn->status); @@ -511,7 +513,7 @@ END_TEST #include "../toxcore/TCP_connection.h" _Bool tcp_data_callback_called; -static int tcp_data_callback(void *object, int id, const uint8_t *data, uint16_t length) +static int tcp_data_callback(void *object, int id, const uint8_t *data, uint16_t length, void *userdata) { if (object != (void *)120397) return -1; @@ -572,18 +574,18 @@ START_TEST(test_tcp_connection) c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); int ret = send_packet_tcp_connection(tc_1, 0, "Gentoo", 6); ck_assert_msg(ret == 0, "could not send packet."); @@ -593,8 +595,8 @@ START_TEST(test_tcp_connection) do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); ck_assert_msg(tcp_data_callback_called, "could not recv packet."); ck_assert_msg(tcp_connection_to_online_tcp_relays(tc_1, 0) == 1, "Wrong number of connected relays"); @@ -603,8 +605,8 @@ START_TEST(test_tcp_connection) c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); ck_assert_msg(send_packet_tcp_connection(tc_1, 0, "Gentoo", 6) == -1, "could send packet."); ck_assert_msg(kill_tcp_connection_to(tc_2, 0) == 0, "could not kill connection to\n"); @@ -669,18 +671,18 @@ START_TEST(test_tcp_connection2) c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); c_sleep(50); do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); int ret = send_packet_tcp_connection(tc_1, 0, "Gentoo", 6); ck_assert_msg(ret == 0, "could not send packet."); @@ -691,8 +693,8 @@ START_TEST(test_tcp_connection2) do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); ck_assert_msg(tcp_oobdata_callback_called, "could not recv packet."); @@ -700,8 +702,8 @@ START_TEST(test_tcp_connection2) do_TCP_server(tcp_s); c_sleep(50); - do_tcp_connections(tc_1); - do_tcp_connections(tc_2); + do_tcp_connections(tc_1, NULL); + do_tcp_connections(tc_2, NULL); ck_assert_msg(tcp_data_callback_called, "could not recv packet."); ck_assert_msg(kill_tcp_connection_to(tc_1, 0) == 0, "could not kill connection to\n"); diff --git a/auto_tests/dht_test.c b/auto_tests/dht_test.c index 2fe139be8e..ebe4f368f2 100644 --- a/auto_tests/dht_test.c +++ b/auto_tests/dht_test.c @@ -618,7 +618,7 @@ START_TEST(test_DHT_test) } for (i = 0; i < NUM_DHT; ++i) { - networking_poll(dhts[i]->net); + networking_poll(dhts[i]->net, NULL); do_DHT(dhts[i]); } diff --git a/auto_tests/onion_test.c b/auto_tests/onion_test.c index 5d59ab9b14..e28c4f111f 100644 --- a/auto_tests/onion_test.c +++ b/auto_tests/onion_test.c @@ -25,12 +25,12 @@ void do_onion(Onion *onion) { - networking_poll(onion->net); + networking_poll(onion->net, NULL); do_DHT(onion->dht); } static int handled_test_1; -static int handle_test_1(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_test_1(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion *onion = object; @@ -46,7 +46,7 @@ static int handle_test_1(void *object, IP_Port source, const uint8_t *packet, ui } static int handled_test_2; -static int handle_test_2(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_test_2(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { if (length != sizeof("install Gentoo")) return 1; @@ -72,7 +72,7 @@ uint8_t sb_data[ONION_ANNOUNCE_SENDBACK_DATA_LENGTH]; static int handled_test_3; uint8_t test_3_pub_key[crypto_box_PUBLICKEYBYTES]; uint8_t test_3_ping_id[crypto_hash_sha256_BYTES]; -static int handle_test_3(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_test_3(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion *onion = object; @@ -101,7 +101,7 @@ static int handle_test_3(void *object, IP_Port source, const uint8_t *packet, ui uint8_t nonce[crypto_box_NONCEBYTES]; static int handled_test_4; -static int handle_test_4(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_test_4(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion *onion = object; @@ -286,7 +286,7 @@ Onions *new_onions(uint16_t port) void do_onions(Onions *on) { - networking_poll(on->onion->net); + networking_poll(on->onion->net, NULL); do_DHT(on->onion->dht); do_onion_client(on->onion_c); } diff --git a/auto_tests/tox_test.c b/auto_tests/tox_test.c index f578a5c932..458f40f8fc 100644 --- a/auto_tests/tox_test.c +++ b/auto_tests/tox_test.c @@ -537,7 +537,7 @@ START_TEST(test_few_clients) } printf("tox clients connected took %llu seconds\n", time(NULL) - con_time); - tox_callback_friend_name(tox3, print_nickchange, &to_compare); + tox_callback_friend_name(tox3, print_nickchange); TOX_ERR_SET_INFO err_n; bool succ = tox_self_set_name(tox2, (uint8_t *)"Gentoo", sizeof("Gentoo"), &err_n); ck_assert_msg(succ && err_n == TOX_ERR_SET_INFO_OK, "tox_self_set_name failed because %u\n", err_n); diff --git a/other/DHT_bootstrap.c b/other/DHT_bootstrap.c index 16dc87b926..f2bdf6d28b 100644 --- a/other/DHT_bootstrap.c +++ b/other/DHT_bootstrap.c @@ -198,7 +198,7 @@ int main(int argc, char *argv[]) #ifdef TCP_RELAY_ENABLED do_TCP_server(tcp_s); #endif - networking_poll(dht->net); + networking_poll(dht->net, NULL); c_sleep(1); } diff --git a/other/apidsl/tox.in.h b/other/apidsl/tox.in.h index 6e65ed1fd9..2af191722a 100644 --- a/other/apidsl/tox.in.h +++ b/other/apidsl/tox.in.h @@ -1199,7 +1199,7 @@ namespace friend { /** * This event is triggered when a friend changes their name. */ - event name { + event name const { /** * @param friend_number The friend number of the friend whose name changed. * @param name A byte array containing the same data as diff --git a/other/bootstrap_daemon/src/tox-bootstrapd.c b/other/bootstrap_daemon/src/tox-bootstrapd.c index 27a910f365..1aa880ef62 100644 --- a/other/bootstrap_daemon/src/tox-bootstrapd.c +++ b/other/bootstrap_daemon/src/tox-bootstrapd.c @@ -330,7 +330,7 @@ int main(int argc, char *argv[]) do_TCP_server(tcp_server); } - networking_poll(dht->net); + networking_poll(dht->net, NULL); if (waiting_for_dht_connection && DHT_isconnected(dht)) { write_log(LOG_LEVEL_INFO, "Connected to another bootstrap node successfully.\n"); diff --git a/other/bootstrap_node_packets.c b/other/bootstrap_node_packets.c index 21bb289477..a560550e49 100644 --- a/other/bootstrap_node_packets.c +++ b/other/bootstrap_node_packets.c @@ -34,7 +34,7 @@ static uint16_t bootstrap_motd_length; /* To request this packet just send a packet of length INFO_REQUEST_PACKET_LENGTH * with the first byte being BOOTSTRAP_INFO_PACKET_ID */ -static int handle_info_request(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_info_request(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { if (length != INFO_REQUEST_PACKET_LENGTH) return 1; diff --git a/testing/DHT_test.c b/testing/DHT_test.c index 1078ce6ff5..4a4569a8be 100644 --- a/testing/DHT_test.c +++ b/testing/DHT_test.c @@ -243,7 +243,7 @@ int main(int argc, char *argv[]) } } */ - networking_poll(dht->net); + networking_poll(dht->net, NULL); print_clientlist(dht); print_friendlist(dht); diff --git a/testing/nTox.c b/testing/nTox.c index bbc4883152..ba7c2399e1 100644 --- a/testing/nTox.c +++ b/testing/nTox.c @@ -1292,7 +1292,7 @@ int main(int argc, char *argv[]) tox_callback_friend_request(m, print_request, NULL); tox_callback_friend_message(m, print_message, NULL); - tox_callback_friend_name(m, print_nickchange, NULL); + tox_callback_friend_name(m, print_nickchange); tox_callback_friend_status_message(m, print_statuschange, NULL); tox_callback_group_invite(m, print_invite, NULL); tox_callback_group_message(m, print_groupmessage, NULL); diff --git a/toxcore/DHT.c b/toxcore/DHT.c index 504bb0d945..d69be0fcc3 100644 --- a/toxcore/DHT.c +++ b/toxcore/DHT.c @@ -1164,7 +1164,7 @@ static int sendnodes_ipv6(const DHT *dht, IP_Port ip_port, const uint8_t *public return sendpacket(dht->net, ip_port, data, 1 + crypto_box_PUBLICKEYBYTES + crypto_box_NONCEBYTES + len); } -static int handle_getnodes(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_getnodes(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { if (length != (1 + crypto_box_PUBLICKEYBYTES + crypto_box_NONCEBYTES + crypto_box_PUBLICKEYBYTES + sizeof( uint64_t) + crypto_box_MACBYTES)) @@ -1285,7 +1285,7 @@ static int handle_sendnodes_core(void *object, IP_Port source, const uint8_t *pa return 0; } -static int handle_sendnodes_ipv6(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_sendnodes_ipv6(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { DHT *dht = object; Node_format plain_nodes[MAX_SENT_NODES]; @@ -2343,7 +2343,7 @@ void cryptopacket_registerhandler(DHT *dht, uint8_t byte, cryptopacket_handler_c dht->cryptopackethandlers[byte].object = object; } -static int cryptopacket_handle(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int cryptopacket_handle(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { DHT *dht = object; diff --git a/toxcore/LAN_discovery.c b/toxcore/LAN_discovery.c index 5ab5b0e1f3..44684e8f43 100644 --- a/toxcore/LAN_discovery.c +++ b/toxcore/LAN_discovery.c @@ -306,7 +306,7 @@ int LAN_ip(IP ip) return -1; } -static int handle_LANdiscovery(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_LANdiscovery(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { DHT *dht = object; diff --git a/toxcore/Messenger.c b/toxcore/Messenger.c index c6c503ca4a..e5779fb604 100644 --- a/toxcore/Messenger.c +++ b/toxcore/Messenger.c @@ -162,7 +162,7 @@ static int send_offline_packet(Messenger *m, int friendcon_id) } static int handle_status(void *object, int i, uint8_t status); -static int handle_packet(void *object, int i, uint8_t *temp, uint16_t len); +static int handle_packet(void *object, int i, uint8_t *temp, uint16_t len, void *userdata); static int handle_custom_lossy_packet(void *object, int friend_num, const uint8_t *packet, uint16_t length); static int32_t init_new_friend(Messenger *m, const uint8_t *real_pk, uint8_t status) @@ -777,11 +777,9 @@ void m_callback_friendmessage(Messenger *m, void (*function)(Messenger *m, uint3 m->friend_message_userdata = userdata; } -void m_callback_namechange(Messenger *m, void (*function)(Messenger *m, uint32_t, const uint8_t *, size_t, void *), - void *userdata) +void m_callback_namechange(Messenger *m, void (*function)(Messenger *m, uint32_t, const uint8_t *, size_t, void *)) { m->friend_namechange = function; - m->friend_namechange_userdata = userdata; } void m_callback_statusmessage(Messenger *m, void (*function)(Messenger *m, uint32_t, const uint8_t *, size_t, void *), @@ -1904,7 +1902,7 @@ static int handle_status(void *object, int i, uint8_t status) return 0; } -static int handle_packet(void *object, int i, uint8_t *temp, uint16_t len) +static int handle_packet(void *object, int i, uint8_t *temp, uint16_t len, void *userdata) { if (len == 0) return -1; @@ -1943,7 +1941,7 @@ static int handle_packet(void *object, int i, uint8_t *temp, uint16_t len) /* inform of namechange before we overwrite the old name */ if (m->friend_namechange) - m->friend_namechange(m, i, data_terminated, data_length, m->friend_namechange_userdata); + m->friend_namechange(m, i, data_terminated, data_length, userdata); memcpy(m->friendlist[i].name, data_terminated, data_length); m->friendlist[i].name_length = data_length; @@ -2306,7 +2304,7 @@ void do_messenger(Messenger *m, void *userdata) unix_time_update(); if (!m->options.udp_disabled) { - networking_poll(m->net); + networking_poll(m->net, userdata); do_DHT(m->dht); } @@ -2314,7 +2312,7 @@ void do_messenger(Messenger *m, void *userdata) do_TCP_server(m->tcp_server); } - do_net_crypto(m->net_crypto); + do_net_crypto(m->net_crypto, userdata); do_onion_client(m->onion_c); do_friend_connections(m->fr_c); do_friends(m); diff --git a/toxcore/Messenger.h b/toxcore/Messenger.h index dab792c8c2..5af9e274b5 100644 --- a/toxcore/Messenger.h +++ b/toxcore/Messenger.h @@ -240,7 +240,6 @@ struct Messenger { void (*friend_message)(struct Messenger *m, uint32_t, unsigned int, const uint8_t *, size_t, void *); void *friend_message_userdata; void (*friend_namechange)(struct Messenger *m, uint32_t, const uint8_t *, size_t, void *); - void *friend_namechange_userdata; void (*friend_statusmessagechange)(struct Messenger *m, uint32_t, const uint8_t *, size_t, void *); void *friend_statusmessagechange_userdata; void (*friend_userstatuschange)(struct Messenger *m, uint32_t, unsigned int, void *); @@ -485,8 +484,7 @@ void m_callback_friendmessage(Messenger *m, void (*function)(Messenger *m, uint3 * Function(uint32_t friendnumber, uint8_t *newname, size_t length) * You are not responsible for freeing newname. */ -void m_callback_namechange(Messenger *m, void (*function)(Messenger *m, uint32_t, const uint8_t *, size_t, void *), - void *userdata); +void m_callback_namechange(Messenger *m, void (*function)(Messenger *m, uint32_t, const uint8_t *, size_t, void *)); /* Set the callback for status message changes. * Function(uint32_t friendnumber, uint8_t *newstatus, size_t length) diff --git a/toxcore/TCP_client.c b/toxcore/TCP_client.c index 752deecf31..824e5dd1f0 100644 --- a/toxcore/TCP_client.c +++ b/toxcore/TCP_client.c @@ -506,14 +506,14 @@ int set_tcp_connection_number(TCP_Client_Connection *con, uint8_t con_id, uint32 } void routing_data_handler(TCP_Client_Connection *con, int (*data_callback)(void *object, uint32_t number, - uint8_t connection_id, const uint8_t *data, uint16_t length), void *object) + uint8_t connection_id, const uint8_t *data, uint16_t length, void *userdata), void *object) { con->data_callback = data_callback; con->data_callback_object = object; } void oob_data_handler(TCP_Client_Connection *con, int (*oob_data_callback)(void *object, const uint8_t *public_key, - const uint8_t *data, uint16_t length), void *object) + const uint8_t *data, uint16_t length, void *userdata), void *object) { con->oob_data_callback = oob_data_callback; con->oob_data_callback_object = object; @@ -600,7 +600,7 @@ int send_onion_request(TCP_Client_Connection *con, const uint8_t *data, uint16_t } void onion_response_handler(TCP_Client_Connection *con, int (*onion_callback)(void *object, const uint8_t *data, - uint16_t length), void *object) + uint16_t length, void *userdata), void *object) { con->onion_callback = onion_callback; con->onion_callback_object = object; @@ -692,7 +692,7 @@ TCP_Client_Connection *new_TCP_connection(IP_Port ip_port, const uint8_t *public /* return 0 on success * return -1 on failure */ -static int handle_TCP_packet(TCP_Client_Connection *conn, const uint8_t *data, uint16_t length) +static int handle_TCP_packet(TCP_Client_Connection *conn, const uint8_t *data, uint16_t length, void *userdata) { if (length <= 1) return -1; @@ -800,13 +800,13 @@ static int handle_TCP_packet(TCP_Client_Connection *conn, const uint8_t *data, u if (conn->oob_data_callback) conn->oob_data_callback(conn->oob_data_callback_object, data + 1, data + 1 + crypto_box_PUBLICKEYBYTES, - length - (1 + crypto_box_PUBLICKEYBYTES)); + length - (1 + crypto_box_PUBLICKEYBYTES), userdata); return 0; } case TCP_PACKET_ONION_RESPONSE: { - conn->onion_callback(conn->onion_callback_object, data + 1, length - 1); + conn->onion_callback(conn->onion_callback_object, data + 1, length - 1, userdata); return 0; } @@ -817,14 +817,15 @@ static int handle_TCP_packet(TCP_Client_Connection *conn, const uint8_t *data, u uint8_t con_id = data[0] - NUM_RESERVED_PORTS; if (conn->data_callback) - conn->data_callback(conn->data_callback_object, conn->connections[con_id].number, con_id, data + 1, length - 1); + conn->data_callback(conn->data_callback_object, conn->connections[con_id].number, con_id, data + 1, length - 1, + userdata); } } return 0; } -static int do_confirmed_TCP(TCP_Client_Connection *conn) +static int do_confirmed_TCP(TCP_Client_Connection *conn, void *userdata) { send_pending_data(conn); send_ping_response(conn); @@ -856,7 +857,7 @@ static int do_confirmed_TCP(TCP_Client_Connection *conn) break; } - if (handle_TCP_packet(conn, packet, len) == -1) { + if (handle_TCP_packet(conn, packet, len, userdata) == -1) { conn->status = TCP_CLIENT_DISCONNECTED; break; } @@ -867,7 +868,7 @@ static int do_confirmed_TCP(TCP_Client_Connection *conn) /* Run the TCP connection */ -void do_TCP_connection(TCP_Client_Connection *TCP_connection) +void do_TCP_connection(TCP_Client_Connection *TCP_connection, void *userdata) { unix_time_update(); @@ -945,7 +946,7 @@ void do_TCP_connection(TCP_Client_Connection *TCP_connection) } if (TCP_connection->status == TCP_CLIENT_CONFIRMED) { - do_confirmed_TCP(TCP_connection); + do_confirmed_TCP(TCP_connection, userdata); } if (TCP_connection->kill_at <= unix_time()) { diff --git a/toxcore/TCP_client.h b/toxcore/TCP_client.h index 722430e0f3..37ab30a7a2 100644 --- a/toxcore/TCP_client.h +++ b/toxcore/TCP_client.h @@ -87,12 +87,13 @@ typedef struct { void *response_callback_object; int (*status_callback)(void *object, uint32_t number, uint8_t connection_id, uint8_t status); void *status_callback_object; - int (*data_callback)(void *object, uint32_t number, uint8_t connection_id, const uint8_t *data, uint16_t length); + int (*data_callback)(void *object, uint32_t number, uint8_t connection_id, const uint8_t *data, uint16_t length, + void *userdata); void *data_callback_object; - int (*oob_data_callback)(void *object, const uint8_t *public_key, const uint8_t *data, uint16_t length); + int (*oob_data_callback)(void *object, const uint8_t *public_key, const uint8_t *data, uint16_t length, void *userdata); void *oob_data_callback_object; - int (*onion_callback)(void *object, const uint8_t *data, uint16_t length); + int (*onion_callback)(void *object, const uint8_t *data, uint16_t length, void *userdata); void *onion_callback_object; /* Can be used by user. */ @@ -107,7 +108,7 @@ TCP_Client_Connection *new_TCP_connection(IP_Port ip_port, const uint8_t *public /* Run the TCP connection */ -void do_TCP_connection(TCP_Client_Connection *TCP_connection); +void do_TCP_connection(TCP_Client_Connection *TCP_connection, void *userdata); /* Kill the TCP connection */ @@ -119,7 +120,7 @@ void kill_TCP_connection(TCP_Client_Connection *TCP_connection); */ int send_onion_request(TCP_Client_Connection *con, const uint8_t *data, uint16_t length); void onion_response_handler(TCP_Client_Connection *con, int (*onion_callback)(void *object, const uint8_t *data, - uint16_t length), void *object); + uint16_t length, void *userdata), void *object); /* return 1 on success. * return 0 if could not send packet. @@ -152,7 +153,7 @@ int set_tcp_connection_number(TCP_Client_Connection *con, uint8_t con_id, uint32 */ int send_data(TCP_Client_Connection *con, uint8_t con_id, const uint8_t *data, uint16_t length); void routing_data_handler(TCP_Client_Connection *con, int (*data_callback)(void *object, uint32_t number, - uint8_t connection_id, const uint8_t *data, uint16_t length), void *object); + uint8_t connection_id, const uint8_t *data, uint16_t length, void *userdata), void *object); /* return 1 on success. * return 0 if could not send packet. @@ -160,7 +161,7 @@ void routing_data_handler(TCP_Client_Connection *con, int (*data_callback)(void */ int send_oob_packet(TCP_Client_Connection *con, const uint8_t *public_key, const uint8_t *data, uint16_t length); void oob_data_handler(TCP_Client_Connection *con, int (*oob_data_callback)(void *object, const uint8_t *public_key, - const uint8_t *data, uint16_t length), void *object); + const uint8_t *data, uint16_t length, void *userdata), void *object); #endif diff --git a/toxcore/TCP_connection.c b/toxcore/TCP_connection.c index 027779dd88..d564762ae3 100644 --- a/toxcore/TCP_connection.c +++ b/toxcore/TCP_connection.c @@ -346,7 +346,7 @@ int tcp_send_oob_packet(TCP_Connections *tcp_c, unsigned int tcp_connections_num /* Set the callback for TCP data packets. */ void set_packet_tcp_connection_callback(TCP_Connections *tcp_c, int (*tcp_data_callback)(void *object, int id, - const uint8_t *data, uint16_t length), void *object) + const uint8_t *data, uint16_t length, void *userdata), void *object) { tcp_c->tcp_data_callback = tcp_data_callback; tcp_c->tcp_data_callback_object = object; @@ -364,7 +364,7 @@ void set_oob_packet_tcp_connection_callback(TCP_Connections *tcp_c, int (*tcp_oo /* Set the callback for TCP oob data packets. */ void set_onion_packet_tcp_connection_callback(TCP_Connections *tcp_c, int (*tcp_onion_callback)(void *object, - const uint8_t *data, uint16_t length), void *object) + const uint8_t *data, uint16_t length, void *userdata), void *object) { tcp_c->tcp_onion_callback = tcp_onion_callback; tcp_c->tcp_onion_callback_object = object; @@ -879,7 +879,8 @@ static int tcp_status_callback(void *object, uint32_t number, uint8_t connection return 0; } -static int tcp_data_callback(void *object, uint32_t number, uint8_t connection_id, const uint8_t *data, uint16_t length) +static int tcp_data_callback(void *object, uint32_t number, uint8_t connection_id, const uint8_t *data, uint16_t length, + void *userdata) { if (length == 0) @@ -900,12 +901,13 @@ static int tcp_data_callback(void *object, uint32_t number, uint8_t connection_i return -1; if (tcp_c->tcp_data_callback) - tcp_c->tcp_data_callback(tcp_c->tcp_data_callback_object, con_to->id, data, length); + tcp_c->tcp_data_callback(tcp_c->tcp_data_callback_object, con_to->id, data, length, userdata); return 0; } -static int tcp_oob_callback(void *object, const uint8_t *public_key, const uint8_t *data, uint16_t length) +static int tcp_oob_callback(void *object, const uint8_t *public_key, const uint8_t *data, uint16_t length, + void *userdata) { if (length == 0) return -1; @@ -925,7 +927,7 @@ static int tcp_oob_callback(void *object, const uint8_t *public_key, const uint8 TCP_Connection_to *con_to = get_connection(tcp_c, connections_number); if (con_to && tcp_connection_in_conn(con_to, tcp_connections_number)) { - return tcp_data_callback(object, connections_number, 0, data, length); + return tcp_data_callback(object, connections_number, 0, data, length, userdata); } else { if (tcp_c->tcp_oob_callback) tcp_c->tcp_oob_callback(tcp_c->tcp_oob_callback_object, public_key, tcp_connections_number, data, length); @@ -934,12 +936,12 @@ static int tcp_oob_callback(void *object, const uint8_t *public_key, const uint8 return 0; } -static int tcp_onion_callback(void *object, const uint8_t *data, uint16_t length) +static int tcp_onion_callback(void *object, const uint8_t *data, uint16_t length, void *userdata) { TCP_Connections *tcp_c = object; if (tcp_c->tcp_onion_callback) - tcp_c->tcp_onion_callback(tcp_c->tcp_onion_callback_object, data, length); + tcp_c->tcp_onion_callback(tcp_c->tcp_onion_callback_object, data, length, userdata); return 0; } @@ -1265,7 +1267,7 @@ TCP_Connections *new_tcp_connections(const uint8_t *secret_key, TCP_Proxy_Info * return temp; } -static void do_tcp_conns(TCP_Connections *tcp_c) +static void do_tcp_conns(TCP_Connections *tcp_c, void *userdata) { unsigned int i; @@ -1274,7 +1276,7 @@ static void do_tcp_conns(TCP_Connections *tcp_c) if (tcp_con) { if (tcp_con->status != TCP_CONN_SLEEPING) { - do_TCP_connection(tcp_con->connection); + do_TCP_connection(tcp_con->connection, userdata); /* callbacks can change TCP connection address. */ tcp_con = get_tcp_connection(tcp_c, i); @@ -1343,9 +1345,9 @@ static void kill_nonused_tcp(TCP_Connections *tcp_c) } } -void do_tcp_connections(TCP_Connections *tcp_c) +void do_tcp_connections(TCP_Connections *tcp_c, void *userdata) { - do_tcp_conns(tcp_c); + do_tcp_conns(tcp_c, userdata); kill_nonused_tcp(tcp_c); } diff --git a/toxcore/TCP_connection.h b/toxcore/TCP_connection.h index 7bc34f861b..f45e804c6a 100644 --- a/toxcore/TCP_connection.h +++ b/toxcore/TCP_connection.h @@ -90,14 +90,14 @@ typedef struct { TCP_con *tcp_connections; uint32_t tcp_connections_length; /* Length of tcp_connections array. */ - int (*tcp_data_callback)(void *object, int id, const uint8_t *data, uint16_t length); + int (*tcp_data_callback)(void *object, int id, const uint8_t *data, uint16_t length, void *userdata); void *tcp_data_callback_object; int (*tcp_oob_callback)(void *object, const uint8_t *public_key, unsigned int tcp_connections_number, const uint8_t *data, uint16_t length); void *tcp_oob_callback_object; - int (*tcp_onion_callback)(void *object, const uint8_t *data, uint16_t length); + int (*tcp_onion_callback)(void *object, const uint8_t *data, uint16_t length, void *userdata); void *tcp_onion_callback_object; TCP_Proxy_Info proxy_info; @@ -151,12 +151,12 @@ int tcp_send_oob_packet(TCP_Connections *tcp_c, unsigned int tcp_connections_num /* Set the callback for TCP data packets. */ void set_packet_tcp_connection_callback(TCP_Connections *tcp_c, int (*tcp_data_callback)(void *object, int id, - const uint8_t *data, uint16_t length), void *object); + const uint8_t *data, uint16_t length, void *userdata), void *object); /* Set the callback for TCP onion packets. */ void set_onion_packet_tcp_connection_callback(TCP_Connections *tcp_c, int (*tcp_onion_callback)(void *object, - const uint8_t *data, uint16_t length), void *object); + const uint8_t *data, uint16_t length, void *userdata), void *object); /* Set the callback for TCP oob data packets. */ @@ -239,7 +239,7 @@ unsigned int tcp_copy_connected_relays(TCP_Connections *tcp_c, Node_format *tcp_ */ TCP_Connections *new_tcp_connections(const uint8_t *secret_key, TCP_Proxy_Info *proxy_info); -void do_tcp_connections(TCP_Connections *tcp_c); +void do_tcp_connections(TCP_Connections *tcp_c, void *userdata); void kill_tcp_connections(TCP_Connections *tcp_c); #endif diff --git a/toxcore/friend_connection.c b/toxcore/friend_connection.c index e7c8432bae..858e54b376 100644 --- a/toxcore/friend_connection.c +++ b/toxcore/friend_connection.c @@ -372,7 +372,7 @@ static void dht_pk_callback(void *object, int32_t number, const uint8_t *dht_pub onion_set_friend_DHT_pubkey(fr_c->onion_c, friend_con->onion_friendnum, dht_public_key); } -static int handle_packet(void *object, int number, uint8_t *data, uint16_t length) +static int handle_packet(void *object, int number, uint8_t *data, uint16_t length, void *userdata) { if (length == 0) return -1; @@ -411,8 +411,9 @@ static int handle_packet(void *object, int number, uint8_t *data, uint16_t lengt for (i = 0; i < MAX_FRIEND_CONNECTION_CALLBACKS; ++i) { if (friend_con->callbacks[i].data_callback) - friend_con->callbacks[i].data_callback(friend_con->callbacks[i].data_callback_object, - friend_con->callbacks[i].data_callback_id, data, length); + friend_con->callbacks[i].data_callback( + friend_con->callbacks[i].data_callback_object, + friend_con->callbacks[i].data_callback_id, data, length, userdata); friend_con = get_conn(fr_c, number); @@ -604,7 +605,8 @@ void set_dht_temp_pk(Friend_Connections *fr_c, int friendcon_id, const uint8_t * */ int friend_connection_callbacks(Friend_Connections *fr_c, int friendcon_id, unsigned int index, int (*status_callback)(void *object, int id, uint8_t status), int (*data_callback)(void *object, int id, uint8_t *data, - uint16_t length), int (*lossy_data_callback)(void *object, int id, const uint8_t *data, uint16_t length), void *object, + uint16_t length, void *userdata), int (*lossy_data_callback)(void *object, int id, const uint8_t *data, + uint16_t length), void *object, int number) { Friend_Conn *friend_con = get_conn(fr_c, friendcon_id); diff --git a/toxcore/friend_connection.h b/toxcore/friend_connection.h index 044b8d7f2d..ecfc55abaf 100644 --- a/toxcore/friend_connection.h +++ b/toxcore/friend_connection.h @@ -83,7 +83,7 @@ typedef struct { void *status_callback_object; int status_callback_id; - int (*data_callback)(void *object, int id, uint8_t *data, uint16_t length); + int (*data_callback)(void *object, int id, uint8_t *data, uint16_t length, void *userdata); void *data_callback_object; int data_callback_id; @@ -159,7 +159,8 @@ int friend_add_tcp_relay(Friend_Connections *fr_c, int friendcon_id, IP_Port ip_ */ int friend_connection_callbacks(Friend_Connections *fr_c, int friendcon_id, unsigned int index, int (*status_callback)(void *object, int id, uint8_t status), int (*data_callback)(void *object, int id, uint8_t *data, - uint16_t length), int (*lossy_data_callback)(void *object, int id, const uint8_t *data, uint16_t length), void *object, + uint16_t length, void *userdata), int (*lossy_data_callback)(void *object, int id, const uint8_t *data, + uint16_t length), void *object, int number); /* return the crypt_connection_id for the connection. diff --git a/toxcore/group.c b/toxcore/group.c index 9313a24bda..b699e86747 100644 --- a/toxcore/group.c +++ b/toxcore/group.c @@ -612,7 +612,7 @@ static int handle_status(void *object, int friendcon_id, uint8_t status) return 0; } -static int handle_packet(void *object, int friendcon_id, uint8_t *data, uint16_t length); +static int handle_packet(void *object, int friendcon_id, uint8_t *data, uint16_t length, void *userdata); static int handle_lossy(void *object, int friendcon_id, const uint8_t *data, uint16_t length); /* Add friend to group chat. @@ -1930,7 +1930,7 @@ static void handle_message_packet_group(Group_Chats *g_c, int groupnumber, const send_message_all_close(g_c, groupnumber, data, length, -1/*TODO close_index*/); } -static int handle_packet(void *object, int friendcon_id, uint8_t *data, uint16_t length) +static int handle_packet(void *object, int friendcon_id, uint8_t *data, uint16_t length, void *userdata) { Group_Chats *g_c = object; diff --git a/toxcore/net_crypto.c b/toxcore/net_crypto.c index f8a85adf30..381b0a501b 100644 --- a/toxcore/net_crypto.c +++ b/toxcore/net_crypto.c @@ -191,7 +191,8 @@ static int handle_cookie_request(const Net_Crypto *c, uint8_t *request_plain, ui /* Handle the cookie request packet (for raw UDP) */ -static int udp_handle_cookie_request(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int udp_handle_cookie_request(void *object, IP_Port source, const uint8_t *packet, uint16_t length, + void *userdata) { Net_Crypto *c = object; uint8_t request_plain[COOKIE_REQUEST_PLAIN_LENGTH]; @@ -1223,7 +1224,7 @@ static void connection_kill(Net_Crypto *c, int crypt_connection_id) * return 0 on success. */ static int handle_data_packet_helper(Net_Crypto *c, int crypt_connection_id, const uint8_t *packet, uint16_t length, - _Bool udp) + _Bool udp, void *userdata) { if (length > MAX_CRYPTO_PACKET_SIZE || length <= CRYPTO_DATA_PACKET_MIN_SIZE) return -1; @@ -1320,7 +1321,7 @@ static int handle_data_packet_helper(Net_Crypto *c, int crypt_connection_id, con if (conn->connection_data_callback) conn->connection_data_callback(conn->connection_data_callback_object, conn->connection_data_callback_id, dt.data, - dt.length); + dt.length, userdata); /* conn might get killed in callback. */ conn = get_crypto_connection(c, crypt_connection_id); @@ -1360,7 +1361,7 @@ static int handle_data_packet_helper(Net_Crypto *c, int crypt_connection_id, con * return 0 on success. */ static int handle_packet_connection(Net_Crypto *c, int crypt_connection_id, const uint8_t *packet, uint16_t length, - _Bool udp) + _Bool udp, void *userdata) { if (length == 0 || length > MAX_CRYPTO_PACKET_SIZE) return -1; @@ -1425,7 +1426,7 @@ static int handle_packet_connection(Net_Crypto *c, int crypt_connection_id, cons case NET_PACKET_CRYPTO_DATA: { if (conn->status == CRYPTO_CONN_NOT_CONFIRMED || conn->status == CRYPTO_CONN_ESTABLISHED) { - return handle_data_packet_helper(c, crypt_connection_id, packet, length, udp); + return handle_data_packet_helper(c, crypt_connection_id, packet, length, udp, userdata); } else { return -1; } @@ -1805,7 +1806,7 @@ int set_direct_ip_port(Net_Crypto *c, int crypt_connection_id, IP_Port ip_port, } -static int tcp_data_callback(void *object, int id, const uint8_t *data, uint16_t length) +static int tcp_data_callback(void *object, int id, const uint8_t *data, uint16_t length, void *userdata) { if (length == 0 || length > MAX_CRYPTO_PACKET_SIZE) return -1; @@ -1822,7 +1823,7 @@ static int tcp_data_callback(void *object, int id, const uint8_t *data, uint16_t } pthread_mutex_unlock(&c->tcp_mutex); - int ret = handle_packet_connection(c, id, data, length, 0); + int ret = handle_packet_connection(c, id, data, length, 0, userdata); pthread_mutex_lock(&c->tcp_mutex); if (ret != 0) @@ -1937,10 +1938,10 @@ unsigned int copy_connected_tcp_relays(Net_Crypto *c, Node_format *tcp_relays, u return ret; } -static void do_tcp(Net_Crypto *c) +static void do_tcp(Net_Crypto *c, void *userdata) { pthread_mutex_lock(&c->tcp_mutex); - do_tcp_connections(c->tcp_c); + do_tcp_connections(c->tcp_c, userdata); pthread_mutex_unlock(&c->tcp_mutex); uint32_t i; @@ -2001,7 +2002,7 @@ int connection_status_handler(const Net_Crypto *c, int crypt_connection_id, * return 0 on success. */ int connection_data_handler(const Net_Crypto *c, int crypt_connection_id, int (*connection_data_callback)(void *object, - int id, uint8_t *data, uint16_t length), void *object, int id) + int id, uint8_t *data, uint16_t length, void *userdata), void *object, int id) { Crypto_Connection *conn = get_crypto_connection(c, crypt_connection_id); @@ -2081,7 +2082,7 @@ static int crypto_id_ip_port(const Net_Crypto *c, IP_Port ip_port) * Crypto data packets. * */ -static int udp_handle_packet(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int udp_handle_packet(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { if (length <= CRYPTO_MIN_PACKET_SIZE || length > MAX_CRYPTO_PACKET_SIZE) return 1; @@ -2099,7 +2100,7 @@ static int udp_handle_packet(void *object, IP_Port source, const uint8_t *packet return 0; } - if (handle_packet_connection(c, crypt_connection_id, packet, length, 1) != 0) + if (handle_packet_connection(c, crypt_connection_id, packet, length, 1, userdata) != 0) return 1; Crypto_Connection *conn = get_crypto_connection(c, crypt_connection_id); @@ -2685,11 +2686,11 @@ uint32_t crypto_run_interval(const Net_Crypto *c) } /* Main loop. */ -void do_net_crypto(Net_Crypto *c) +void do_net_crypto(Net_Crypto *c, void *userdata) { unix_time_update(); kill_timedout(c); - do_tcp(c); + do_tcp(c, userdata); send_crypto_packets(c); } diff --git a/toxcore/net_crypto.h b/toxcore/net_crypto.h index c9554bfc9f..c9ba3640f5 100644 --- a/toxcore/net_crypto.h +++ b/toxcore/net_crypto.h @@ -134,7 +134,7 @@ typedef struct { void *connection_status_callback_object; int connection_status_callback_id; - int (*connection_data_callback)(void *object, int id, uint8_t *data, uint16_t length); + int (*connection_data_callback)(void *object, int id, uint8_t *data, uint16_t length, void *userdata); void *connection_data_callback_object; int connection_data_callback_id; @@ -272,7 +272,7 @@ int connection_status_handler(const Net_Crypto *c, int crypt_connection_id, * return 0 on success. */ int connection_data_handler(const Net_Crypto *c, int crypt_connection_id, int (*connection_data_callback)(void *object, - int id, uint8_t *data, uint16_t length), void *object, int id); + int id, uint8_t *data, uint16_t length, void *userdata), void *object, int id); /* Set function to be called when connection with crypt_connection_id receives a lossy data packet of length. @@ -414,7 +414,7 @@ Net_Crypto *new_net_crypto(DHT *dht, TCP_Proxy_Info *proxy_info); uint32_t crypto_run_interval(const Net_Crypto *c); /* Main loop. */ -void do_net_crypto(Net_Crypto *c); +void do_net_crypto(Net_Crypto *c, void *userdata); void kill_net_crypto(Net_Crypto *c); diff --git a/toxcore/network.c b/toxcore/network.c index 58ed5c5667..17263153b9 100644 --- a/toxcore/network.c +++ b/toxcore/network.c @@ -412,7 +412,7 @@ void networking_registerhandler(Networking_Core *net, uint8_t byte, packet_handl net->packethandlers[byte].object = object; } -void networking_poll(Networking_Core *net) +void networking_poll(Networking_Core *net, void *userdata) { if (net->family == 0) /* Socket not initialized */ return; @@ -431,7 +431,7 @@ void networking_poll(Networking_Core *net) continue; } - net->packethandlers[data[0]].function(net->packethandlers[data[0]].object, ip_port, data, length); + net->packethandlers[data[0]].function(net->packethandlers[data[0]].object, ip_port, data, length, userdata); } } diff --git a/toxcore/network.h b/toxcore/network.h index 8d2ccfce09..9792729901 100644 --- a/toxcore/network.h +++ b/toxcore/network.h @@ -290,7 +290,8 @@ int addr_resolve_or_parse_ip(const char *address, IP *to, IP *extra); * Packet data is put into data. * Packet length is put into length. */ -typedef int (*packet_handler_callback)(void *object, IP_Port ip_port, const uint8_t *data, uint16_t len); +typedef int (*packet_handler_callback)(void *object, IP_Port ip_port, const uint8_t *data, uint16_t len, + void *userdata); typedef struct { packet_handler_callback function; @@ -364,7 +365,7 @@ int sendpacket(Networking_Core *net, IP_Port ip_port, const uint8_t *data, uint1 void networking_registerhandler(Networking_Core *net, uint8_t byte, packet_handler_callback cb, void *object); /* Call this several times a second. */ -void networking_poll(Networking_Core *net); +void networking_poll(Networking_Core *net, void *userdata); /* Initialize networking. * bind to ip and port. diff --git a/toxcore/onion.c b/toxcore/onion.c index cec178b93f..f0e3eed496 100644 --- a/toxcore/onion.c +++ b/toxcore/onion.c @@ -306,7 +306,7 @@ int send_onion_response(Networking_Core *net, IP_Port dest, const uint8_t *data, return 0; } -static int handle_send_initial(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_send_initial(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion *onion = object; @@ -367,7 +367,7 @@ int onion_send_1(const Onion *onion, const uint8_t *plain, uint16_t len, IP_Port return 0; } -static int handle_send_1(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_send_1(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion *onion = object; @@ -417,7 +417,7 @@ static int handle_send_1(void *object, IP_Port source, const uint8_t *packet, ui return 0; } -static int handle_send_2(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_send_2(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion *onion = object; @@ -466,7 +466,7 @@ static int handle_send_2(void *object, IP_Port source, const uint8_t *packet, ui } -static int handle_recv_3(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_recv_3(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion *onion = object; @@ -502,7 +502,7 @@ static int handle_recv_3(void *object, IP_Port source, const uint8_t *packet, ui return 0; } -static int handle_recv_2(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_recv_2(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion *onion = object; @@ -538,7 +538,7 @@ static int handle_recv_2(void *object, IP_Port source, const uint8_t *packet, ui return 0; } -static int handle_recv_1(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_recv_1(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion *onion = object; diff --git a/toxcore/onion_announce.c b/toxcore/onion_announce.c index 676b38da3d..f6a00f6773 100644 --- a/toxcore/onion_announce.c +++ b/toxcore/onion_announce.c @@ -286,7 +286,7 @@ static int add_to_entries(Onion_Announce *onion_a, IP_Port ret_ip_port, const ui return in_entries(onion_a, public_key); } -static int handle_announce_request(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_announce_request(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion_Announce *onion_a = object; @@ -380,7 +380,7 @@ static int handle_announce_request(void *object, IP_Port source, const uint8_t * return 0; } -static int handle_data_request(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_data_request(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion_Announce *onion_a = object; diff --git a/toxcore/onion_client.c b/toxcore/onion_client.c index b879f393bd..b1a5352c5c 100644 --- a/toxcore/onion_client.c +++ b/toxcore/onion_client.c @@ -617,7 +617,8 @@ static int client_ping_nodes(Onion_Client *onion_c, uint32_t num, const Node_for return 0; } -static int handle_announce_response(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_announce_response(void *object, IP_Port source, const uint8_t *packet, uint16_t length, + void *userdata) { Onion_Client *onion_c = object; @@ -675,7 +676,7 @@ static int handle_announce_response(void *object, IP_Port source, const uint8_t #define DATA_IN_RESPONSE_MIN_SIZE ONION_DATA_IN_RESPONSE_MIN_SIZE -static int handle_data_response(void *object, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_data_response(void *object, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { Onion_Client *onion_c = object; @@ -770,7 +771,7 @@ static int handle_dhtpk_announce(void *object, const uint8_t *source_pubkey, con return 0; } -static int handle_tcp_onion(void *object, const uint8_t *data, uint16_t length) +static int handle_tcp_onion(void *object, const uint8_t *data, uint16_t length, void *userdata) { if (length == 0) return 1; @@ -779,9 +780,9 @@ static int handle_tcp_onion(void *object, const uint8_t *data, uint16_t length) ip_port.ip.family = TCP_FAMILY; if (data[0] == NET_PACKET_ANNOUNCE_RESPONSE) { - return handle_announce_response(object, ip_port, data, length); + return handle_announce_response(object, ip_port, data, length, userdata); } else if (data[0] == NET_PACKET_ONION_DATA_RESPONSE) { - return handle_data_response(object, ip_port, data, length); + return handle_data_response(object, ip_port, data, length, userdata); } return 1; diff --git a/toxcore/ping.c b/toxcore/ping.c index f81766cb99..dc0a01f32c 100644 --- a/toxcore/ping.c +++ b/toxcore/ping.c @@ -129,7 +129,7 @@ static int send_ping_response(PING *ping, IP_Port ipp, const uint8_t *public_key return sendpacket(ping->dht->net, ipp, pk, sizeof(pk)); } -static int handle_ping_request(void *_dht, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_ping_request(void *_dht, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { DHT *dht = _dht; int rc; @@ -168,7 +168,7 @@ static int handle_ping_request(void *_dht, IP_Port source, const uint8_t *packet return 0; } -static int handle_ping_response(void *_dht, IP_Port source, const uint8_t *packet, uint16_t length) +static int handle_ping_response(void *_dht, IP_Port source, const uint8_t *packet, uint16_t length, void *userdata) { DHT *dht = _dht; int rc; diff --git a/toxcore/tox.c b/toxcore/tox.c index 4708bc971b..f43adabb63 100644 --- a/toxcore/tox.c +++ b/toxcore/tox.c @@ -716,10 +716,10 @@ bool tox_friend_get_name(const Tox *tox, uint32_t friend_number, uint8_t *name, return 1; } -void tox_callback_friend_name(Tox *tox, tox_friend_name_cb *function, void *user_data) +void tox_callback_friend_name(Tox *tox, tox_friend_name_cb *function) { Messenger *m = tox; - m_callback_namechange(m, function, user_data); + m_callback_namechange(m, function); } size_t tox_friend_get_status_message_size(const Tox *tox, uint32_t friend_number, TOX_ERR_FRIEND_QUERY *error) diff --git a/toxcore/tox.h b/toxcore/tox.h index ca6869e4b7..5e6de408cc 100644 --- a/toxcore/tox.h +++ b/toxcore/tox.h @@ -1287,7 +1287,7 @@ typedef void tox_friend_name_cb(Tox *tox, uint32_t friend_number, const uint8_t * * This event is triggered when a friend changes their name. */ -void tox_callback_friend_name(Tox *tox, tox_friend_name_cb *callback, void *user_data); +void tox_callback_friend_name(Tox *tox, tox_friend_name_cb *callback); /** * Return the length of the friend's status message. If the friend number is diff --git a/toxcore/util.c b/toxcore/util.c index b120957c55..7b71599082 100644 --- a/toxcore/util.c +++ b/toxcore/util.c @@ -145,8 +145,8 @@ int load_state(load_state_callback_func load_state_callback, void *outer, if (lendian_to_host16((cookie_type >> 16)) != cookie_inner) { /* something is not matching up in a bad way, give up */ -#ifdef TOX_DEBUG - fprintf(stderr, "state file garbeled: %04hx != %04hx\n", (cookie_type >> 16), cookie_inner); +#ifdef DEBUG + fprintf(stderr, "state file garbled: %04x != %04x\n", (cookie_type >> 16), cookie_inner); #endif return -1; }