diff --git a/src/global_commands.c b/src/global_commands.c index 84a0b2c..8c8bd25 100644 --- a/src/global_commands.c +++ b/src/global_commands.c @@ -260,6 +260,7 @@ void cmd_connect(WINDOW *window, ToxWindow *self, Tox *m, int argc, char (*argv) TOX_ERR_BOOTSTRAP err; tox_bootstrap(m, ip, atoi(port), (uint8_t *) binary_string, &err); + tox_add_tcp_relay(m, ip, atoi(port), (uint8_t *) binary_string, &err); free(binary_string); switch (err) { diff --git a/src/toxic.c b/src/toxic.c index 9089587..f699450 100644 --- a/src/toxic.c +++ b/src/toxic.c @@ -306,14 +306,34 @@ static int load_nodelist(const char *filename) return 0; } +/* Bootstraps and adds as TCP relay. + * Returns 0 if both actions are successful. + * Returns -1 otherwise. + */ int init_connection_helper(Tox *m, int line) { - return tox_bootstrap(m, toxNodes.nodes[line], toxNodes.ports[line], (uint8_t *) toxNodes.keys[line], NULL); + TOX_ERR_BOOTSTRAP err; + tox_bootstrap(m, toxNodes.nodes[line], toxNodes.ports[line], (uint8_t *) toxNodes.keys[line], &err); + + if (err != TOX_ERR_BOOTSTRAP_OK) { + fprintf(stderr, "Failed to bootstrap %s:%d\n", toxNodes.nodes[line], toxNodes.ports[line]); + return -1; + } + + tox_add_tcp_relay(m, toxNodes.nodes[line], toxNodes.ports[line], (uint8_t *) toxNodes.keys[line], &err); + + if (err != TOX_ERR_BOOTSTRAP_OK) { + fprintf(stderr, "Failed to add TCP relay %s:%d\n", toxNodes.nodes[line], toxNodes.ports[line]); + return -1; + } + + return 0; } /* Connects to a random DHT node listed in the DHTnodes file * * return codes: + * 0: success * 1: failed to open node file * 2: no line of sufficient length in node file * 3: failed to resolve name to IP @@ -325,8 +345,10 @@ static bool srvlist_loaded = false; int init_connection(Tox *m) { - if (toxNodes.lines > 0) /* already loaded nodelist */ - return init_connection_helper(m, rand() % toxNodes.lines) ? 0 : 3; + if (toxNodes.lines > 0) { /* already loaded nodelist */ + init_connection_helper(m, rand() % toxNodes.lines); + return 0; + } /* only once: * - load the nodelist @@ -349,7 +371,7 @@ int init_connection(Tox *m) int n = MIN(NUM_INIT_NODES, toxNodes.lines); for (i = 0; i < n; ++i) { - if (init_connection_helper(m, rand() % toxNodes.lines)) + if (init_connection_helper(m, rand() % toxNodes.lines) == 0) res = 0; } @@ -659,7 +681,11 @@ static Tox *load_tox(char *data_path, struct Tox_Options *tox_opts, TOX_ERR_NEW (uint8_t *) plain, &pwerr); if (pwerr == TOX_ERR_DECRYPTION_OK) { - m = tox_new(tox_opts, (uint8_t *) plain, plain_len, new_err); + tox_opts->savedata_type = TOX_SAVEDATA_TYPE_TOX_SAVE; + tox_opts->savedata_data = (uint8_t *) plain; + tox_opts->savedata_length = plain_len; + + m = tox_new(tox_opts, new_err); if (m == NULL) { fclose(fp); @@ -677,7 +703,11 @@ static Tox *load_tox(char *data_path, struct Tox_Options *tox_opts, TOX_ERR_NEW } } } else { /* data is not encrypted */ - m = tox_new(tox_opts, (uint8_t *) data, len, new_err); + tox_opts->savedata_type = TOX_SAVEDATA_TYPE_TOX_SAVE; + tox_opts->savedata_data = (uint8_t *) data; + tox_opts->savedata_length = len; + + m = tox_new(tox_opts, new_err); if (m == NULL) { fclose(fp); @@ -690,7 +720,9 @@ static Tox *load_tox(char *data_path, struct Tox_Options *tox_opts, TOX_ERR_NEW if (file_exists(data_path)) exit_toxic_err("failed in load_toxic", FATALERR_FILEOP); - m = tox_new(tox_opts, NULL, 0, new_err); + tox_opts->savedata_type = TOX_SAVEDATA_TYPE_NONE; + + m = tox_new(tox_opts, new_err); if (m == NULL) return NULL;