mirror of
https://github.com/irungentoo/toxcore.git
synced 2024-03-22 13:30:51 +08:00
Added tox_connect function, no connecting done during tox_load
This commit is contained in:
parent
a0302b7aca
commit
f771bfbe30
|
@ -2333,6 +2333,58 @@ void DHT_save(DHT *dht, uint8_t *data)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void DHT_bootstrap_loaded_clients(DHT *dht)
|
||||||
|
{
|
||||||
|
uint32_t i;
|
||||||
|
|
||||||
|
Client_data *client_list = dht->loaded_clients_list;
|
||||||
|
uint32_t client_count = dht->loaded_num_clients;
|
||||||
|
|
||||||
|
for (i = 0; i < client_count; ++i) {
|
||||||
|
if (client_list[i].assoc4.timestamp != 0)
|
||||||
|
DHT_bootstrap(dht, client_list[i].assoc4.ip_port, client_list[i].client_id);
|
||||||
|
|
||||||
|
if (client_list[i].assoc6.timestamp != 0)
|
||||||
|
DHT_bootstrap(dht, client_list[i].assoc6.ip_port, client_list[i].client_id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void getnodes_of_loaded_friend_clients(DHT *dht)
|
||||||
|
{
|
||||||
|
uint32_t i, j;
|
||||||
|
|
||||||
|
DHT_Friend *friend_list = dht->loaded_friends_list;
|
||||||
|
uint32_t friend_count = dht->loaded_num_friends;
|
||||||
|
|
||||||
|
for (i = 0; i < friend_count; ++i) {
|
||||||
|
for (j = 0; j < MAX_FRIEND_CLIENTS; ++j) {
|
||||||
|
Client_data *client = &friend_list[i].client_list[j];
|
||||||
|
|
||||||
|
if (client->assoc4.timestamp != 0)
|
||||||
|
getnodes(dht, client->assoc4.ip_port, client->client_id, friend_list[i].client_id, NULL);
|
||||||
|
|
||||||
|
if (client->assoc6.timestamp != 0)
|
||||||
|
getnodes(dht, client->assoc6.ip_port, client->client_id, friend_list[i].client_id, NULL);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Start sending packets after DHT loaded_friends_list and loaded_clients_list are set */
|
||||||
|
int DHT_connect_after_load(DHT *dht)
|
||||||
|
{
|
||||||
|
if(dht == NULL || dht->loaded_friends_list == NULL || dht->loaded_clients_list == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
getnodes_of_loaded_friend_clients(dht);
|
||||||
|
DHT_bootstrap_loaded_clients(dht);
|
||||||
|
|
||||||
|
// Loaded lists were allocd, free them
|
||||||
|
free(dht->loaded_friends_list);
|
||||||
|
free(dht->loaded_clients_list);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int dht_load_state_callback(void *outer, const uint8_t *data, uint32_t length, uint16_t type)
|
static int dht_load_state_callback(void *outer, const uint8_t *data, uint32_t length, uint16_t type)
|
||||||
{
|
{
|
||||||
DHT *dht = outer;
|
DHT *dht = outer;
|
||||||
|
@ -2347,18 +2399,12 @@ static int dht_load_state_callback(void *outer, const uint8_t *data, uint32_t le
|
||||||
DHT_Friend *friend_list = (DHT_Friend *)data;
|
DHT_Friend *friend_list = (DHT_Friend *)data;
|
||||||
num = length / sizeof(DHT_Friend);
|
num = length / sizeof(DHT_Friend);
|
||||||
|
|
||||||
for (i = 0; i < num; ++i) {
|
// Copy to loaded_friends_list
|
||||||
|
dht->loaded_friends_list = calloc(num, sizeof(DHT_Friend));
|
||||||
|
for(i = 0; i < num; i++)
|
||||||
|
memcpy(&(dht->loaded_friends_list[i]), &(friend_list[i]), sizeof(DHT_Friend));
|
||||||
|
dht->loaded_num_friends = num;
|
||||||
|
|
||||||
for (j = 0; j < MAX_FRIEND_CLIENTS; ++j) {
|
|
||||||
Client_data *client = &friend_list[i].client_list[j];
|
|
||||||
|
|
||||||
if (client->assoc4.timestamp != 0)
|
|
||||||
getnodes(dht, client->assoc4.ip_port, client->client_id, friend_list[i].client_id, NULL);
|
|
||||||
|
|
||||||
if (client->assoc6.timestamp != 0)
|
|
||||||
getnodes(dht, client->assoc6.ip_port, client->client_id, friend_list[i].client_id, NULL);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} /* localize declarations */
|
} /* localize declarations */
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
@ -2371,13 +2417,12 @@ static int dht_load_state_callback(void *outer, const uint8_t *data, uint32_t le
|
||||||
num = length / sizeof(Client_data);
|
num = length / sizeof(Client_data);
|
||||||
Client_data *client_list = (Client_data *)data;
|
Client_data *client_list = (Client_data *)data;
|
||||||
|
|
||||||
for (i = 0; i < num; ++i) {
|
// Copy to loaded_clients_list
|
||||||
if (client_list[i].assoc4.timestamp != 0)
|
dht->loaded_clients_list = calloc(num, sizeof(Client_data));
|
||||||
DHT_bootstrap(dht, client_list[i].assoc4.ip_port, client_list[i].client_id);
|
for(i = 0; i < num; i++)
|
||||||
|
memcpy(&(dht->loaded_clients_list[i]), &(client_list[i]), sizeof(Client_data));
|
||||||
|
dht->loaded_num_clients = num;
|
||||||
|
|
||||||
if (client_list[i].assoc6.timestamp != 0)
|
|
||||||
DHT_bootstrap(dht, client_list[i].assoc6.ip_port, client_list[i].client_id);
|
|
||||||
}
|
|
||||||
} /* localize declarations */
|
} /* localize declarations */
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -200,6 +200,13 @@ typedef struct {
|
||||||
DHT_Friend *friends_list;
|
DHT_Friend *friends_list;
|
||||||
uint16_t num_friends;
|
uint16_t num_friends;
|
||||||
|
|
||||||
|
// Used after loading of file (tox_load), but no longer needed after connect (tox_connect)
|
||||||
|
// Unsure if friends_list and num_friends could just be used instead?
|
||||||
|
DHT_Friend *loaded_friends_list;
|
||||||
|
uint32_t loaded_num_friends;
|
||||||
|
Client_data *loaded_clients_list;
|
||||||
|
uint32_t loaded_num_clients;
|
||||||
|
|
||||||
Shared_Keys shared_keys_recv;
|
Shared_Keys shared_keys_recv;
|
||||||
Shared_Keys shared_keys_sent;
|
Shared_Keys shared_keys_sent;
|
||||||
|
|
||||||
|
@ -332,6 +339,12 @@ void DHT_bootstrap(DHT *dht, IP_Port ip_port, const uint8_t *public_key);
|
||||||
int DHT_bootstrap_from_address(DHT *dht, const char *address, uint8_t ipv6enabled,
|
int DHT_bootstrap_from_address(DHT *dht, const char *address, uint8_t ipv6enabled,
|
||||||
uint16_t port, const uint8_t *public_key);
|
uint16_t port, const uint8_t *public_key);
|
||||||
|
|
||||||
|
/* Start sending packets after DHT loaded_friends_list and loaded_clients_list are set.
|
||||||
|
*
|
||||||
|
* returns 0 if successful
|
||||||
|
* returns -1 otherwise
|
||||||
|
*/
|
||||||
|
int DHT_connect_after_load(DHT *dht);
|
||||||
|
|
||||||
/* ROUTING FUNCTIONS */
|
/* ROUTING FUNCTIONS */
|
||||||
|
|
||||||
|
|
|
@ -2803,18 +2803,11 @@ static int messenger_load_state_callback(void *outer, const uint8_t *data, uint3
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case MESSENGER_STATE_TYPE_TCP_RELAY: {
|
case MESSENGER_STATE_TYPE_TCP_RELAY: {
|
||||||
Node_format relays[NUM_SAVED_TCP_RELAYS];
|
if (length != sizeof(m->loaded_relays)) {
|
||||||
|
|
||||||
if (length != sizeof(relays)) {
|
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
memcpy(relays, data, length);
|
memcpy(m->loaded_relays, data, length);
|
||||||
uint32_t i;
|
|
||||||
|
|
||||||
for (i = 0; i < NUM_SAVED_TCP_RELAYS; ++i) {
|
|
||||||
add_tcp_relay(m->net_crypto, relays[i].ip_port, relays[i].client_id);
|
|
||||||
}
|
|
||||||
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2866,6 +2859,25 @@ int messenger_load(Messenger *m, const uint8_t *data, uint32_t length)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Connect after loading messenger from file */
|
||||||
|
int messenger_connect(Messenger *m)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
if(m == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
DHT *dht = m->dht;
|
||||||
|
if(DHT_connect_after_load(dht) == -1)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_SAVED_TCP_RELAYS; ++i) {
|
||||||
|
add_tcp_relay(m->net_crypto, m->loaded_relays[i].ip_port, m->loaded_relays[i].client_id);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/* Return the number of friends in the instance m.
|
/* Return the number of friends in the instance m.
|
||||||
* You should use this to determine how much memory to allocate
|
* You should use this to determine how much memory to allocate
|
||||||
* for copy_friendlist. */
|
* for copy_friendlist. */
|
||||||
|
|
|
@ -219,6 +219,10 @@ typedef struct Messenger {
|
||||||
|
|
||||||
uint64_t last_LANdiscovery;
|
uint64_t last_LANdiscovery;
|
||||||
|
|
||||||
|
// Relays loaded from config
|
||||||
|
// 8 should be NUM_SAVED_TCP_RELAYS but it is defined in c file
|
||||||
|
Node_format loaded_relays[8];
|
||||||
|
|
||||||
void (*friend_message)(struct Messenger *m, int32_t, const uint8_t *, uint16_t, void *);
|
void (*friend_message)(struct Messenger *m, int32_t, const uint8_t *, uint16_t, void *);
|
||||||
void *friend_message_userdata;
|
void *friend_message_userdata;
|
||||||
void (*friend_action)(struct Messenger *m, int32_t, const uint8_t *, uint16_t, void *);
|
void (*friend_action)(struct Messenger *m, int32_t, const uint8_t *, uint16_t, void *);
|
||||||
|
@ -776,6 +780,9 @@ void messenger_save(const Messenger *m, uint8_t *data);
|
||||||
/* Load the messenger from data of size length. */
|
/* Load the messenger from data of size length. */
|
||||||
int messenger_load(Messenger *m, const uint8_t *data, uint32_t length);
|
int messenger_load(Messenger *m, const uint8_t *data, uint32_t length);
|
||||||
|
|
||||||
|
/* Connect after loading messenger from file */
|
||||||
|
int messenger_connect(Messenger *m);
|
||||||
|
|
||||||
/* Return the number of friends in the instance m.
|
/* Return the number of friends in the instance m.
|
||||||
* You should use this to determine how much memory to allocate
|
* You should use this to determine how much memory to allocate
|
||||||
* for copy_friendlist. */
|
* for copy_friendlist. */
|
||||||
|
|
|
@ -928,3 +928,10 @@ int tox_load(Tox *tox, const uint8_t *data, uint32_t length)
|
||||||
Messenger *m = tox;
|
Messenger *m = tox;
|
||||||
return messenger_load(m, data, length);
|
return messenger_load(m, data, length);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Connect after loading the messenger from file */
|
||||||
|
int tox_connect(Tox *tox)
|
||||||
|
{
|
||||||
|
Messenger *m = tox;
|
||||||
|
return messenger_connect(m);
|
||||||
|
}
|
||||||
|
|
|
@ -723,6 +723,13 @@ void tox_save(const Tox *tox, uint8_t *data);
|
||||||
*/
|
*/
|
||||||
int tox_load(Tox *tox, const uint8_t *data, uint32_t length);
|
int tox_load(Tox *tox, const uint8_t *data, uint32_t length);
|
||||||
|
|
||||||
|
/* Perform connections after messenger has been loaded from file.
|
||||||
|
*
|
||||||
|
* returns 0 on success
|
||||||
|
* returns -1 on failure
|
||||||
|
*/
|
||||||
|
int tox_connect(Tox *tox);
|
||||||
|
|
||||||
#ifdef __cplusplus
|
#ifdef __cplusplus
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in New Issue
Block a user