1
0
mirror of https://github.com/Tha14/toxic.git synced 2024-11-23 02:33:02 +01:00

Treat Tox_Options as opaque struct: no deref, no alloc.

We allocate it inside toxcore and dereference it inside as well. This
allows us to change the layout of that struct and add new members.
This commit is contained in:
iphydf 2018-01-20 19:49:36 +00:00
parent b799c6a8d7
commit 51f1daeec8
No known key found for this signature in database
GPG Key ID: 3855DBA2D74403C9

View File

@ -563,30 +563,30 @@ static void init_tox_options(struct Tox_Options *tox_opts)
{ {
tox_options_default(tox_opts); tox_options_default(tox_opts);
tox_opts->ipv6_enabled = !arg_opts.use_ipv4; tox_options_set_ipv6_enabled(tox_opts, !arg_opts.use_ipv4);
tox_opts->udp_enabled = !arg_opts.force_tcp; tox_options_set_udp_enabled(tox_opts, !arg_opts.force_tcp);
tox_opts->proxy_type = arg_opts.proxy_type; tox_options_set_proxy_type(tox_opts, arg_opts.proxy_type);
tox_opts->tcp_port = arg_opts.tcp_port; tox_options_set_tcp_port(tox_opts, arg_opts.tcp_port);
if (!tox_opts->ipv6_enabled) if (!tox_options_get_ipv6_enabled(tox_opts))
queue_init_message("Forcing IPv4 connection"); queue_init_message("Forcing IPv4 connection");
if (tox_opts->tcp_port) if (tox_options_get_tcp_port(tox_opts))
queue_init_message("TCP relaying enabled on port %d", tox_opts->tcp_port); queue_init_message("TCP relaying enabled on port %d", tox_options_get_tcp_port(tox_opts));
if (tox_opts->proxy_type != TOX_PROXY_TYPE_NONE) { if (tox_options_get_proxy_type(tox_opts) != TOX_PROXY_TYPE_NONE) {
tox_opts->proxy_port = arg_opts.proxy_port; tox_options_set_proxy_port(tox_opts, arg_opts.proxy_port);
tox_opts->proxy_host = arg_opts.proxy_address; tox_options_set_proxy_host(tox_opts, arg_opts.proxy_address);
const char *ps = tox_opts->proxy_type == TOX_PROXY_TYPE_SOCKS5 ? "SOCKS5" : "HTTP"; const char *ps = tox_options_get_proxy_type(tox_opts) == TOX_PROXY_TYPE_SOCKS5 ? "SOCKS5" : "HTTP";
char tmp[sizeof(arg_opts.proxy_address) + MAX_STR_SIZE]; char tmp[sizeof(arg_opts.proxy_address) + MAX_STR_SIZE];
snprintf(tmp, sizeof(tmp), "Using %s proxy %s : %d", ps, arg_opts.proxy_address, arg_opts.proxy_port); snprintf(tmp, sizeof(tmp), "Using %s proxy %s : %d", ps, arg_opts.proxy_address, arg_opts.proxy_port);
queue_init_message("%s", tmp); queue_init_message("%s", tmp);
} }
if (!tox_opts->udp_enabled) { if (!tox_options_get_udp_enabled(tox_opts)) {
queue_init_message("UDP disabled"); queue_init_message("UDP disabled");
} else if (tox_opts->proxy_type != TOX_PROXY_TYPE_NONE) { } else if (tox_options_get_proxy_type(tox_opts) != TOX_PROXY_TYPE_NONE) {
const char *msg = "WARNING: Using a proxy without disabling UDP may leak your real IP address."; const char *msg = "WARNING: Using a proxy without disabling UDP may leak your real IP address.";
queue_init_message("%s", msg); queue_init_message("%s", msg);
msg = "Use the -t option to disable UDP."; msg = "Use the -t option to disable UDP.";
@ -675,9 +675,8 @@ static Tox *load_tox(char *data_path, struct Tox_Options *tox_opts, TOX_ERR_NEW
(uint8_t *) plain, &pwerr); (uint8_t *) plain, &pwerr);
if (pwerr == TOX_ERR_DECRYPTION_OK) { if (pwerr == TOX_ERR_DECRYPTION_OK) {
tox_opts->savedata_type = TOX_SAVEDATA_TYPE_TOX_SAVE; tox_options_set_savedata_type(tox_opts, TOX_SAVEDATA_TYPE_TOX_SAVE);
tox_opts->savedata_data = (uint8_t *) plain; tox_options_set_savedata_data(tox_opts, (uint8_t *) plain, plain_len);
tox_opts->savedata_length = plain_len;
m = tox_new(tox_opts, new_err); m = tox_new(tox_opts, new_err);
@ -698,9 +697,8 @@ static Tox *load_tox(char *data_path, struct Tox_Options *tox_opts, TOX_ERR_NEW
} }
} }
} else { /* data is not encrypted */ } else { /* data is not encrypted */
tox_opts->savedata_type = TOX_SAVEDATA_TYPE_TOX_SAVE; tox_options_set_savedata_type(tox_opts, TOX_SAVEDATA_TYPE_TOX_SAVE);
tox_opts->savedata_data = (uint8_t *) data; tox_options_set_savedata_data(tox_opts, (uint8_t *) data, len);
tox_opts->savedata_length = len;
m = tox_new(tox_opts, new_err); m = tox_new(tox_opts, new_err);
@ -715,7 +713,7 @@ static Tox *load_tox(char *data_path, struct Tox_Options *tox_opts, TOX_ERR_NEW
if (file_exists(data_path)) if (file_exists(data_path))
exit_toxic_err("failed in load_tox", FATALERR_FILEOP); exit_toxic_err("failed in load_tox", FATALERR_FILEOP);
tox_opts->savedata_type = TOX_SAVEDATA_TYPE_NONE; tox_options_set_savedata_type(tox_opts, TOX_SAVEDATA_TYPE_NONE);
m = tox_new(tox_opts, new_err); m = tox_new(tox_opts, new_err);
@ -731,16 +729,19 @@ static Tox *load_tox(char *data_path, struct Tox_Options *tox_opts, TOX_ERR_NEW
static Tox *load_toxic(char *data_path) static Tox *load_toxic(char *data_path)
{ {
struct Tox_Options tox_opts; TOX_ERR_OPTIONS_NEW options_new_err;
init_tox_options(&tox_opts); struct Tox_Options *tox_opts = tox_options_new(&options_new_err);
if (!tox_opts)
exit_toxic_err("tox_options_new returned fatal error", options_new_err);
init_tox_options(tox_opts);
TOX_ERR_NEW new_err; TOX_ERR_NEW new_err;
Tox *m = load_tox(data_path, &tox_opts, &new_err); Tox *m = load_tox(data_path, tox_opts, &new_err);
if (new_err == TOX_ERR_NEW_PORT_ALLOC && tox_opts.ipv6_enabled) { if (new_err == TOX_ERR_NEW_PORT_ALLOC && tox_options_get_ipv6_enabled(tox_opts)) {
queue_init_message("Falling back to ipv4"); queue_init_message("Falling back to ipv4");
tox_opts.ipv6_enabled = false; tox_options_set_ipv6_enabled(tox_opts, false);
m = load_tox(data_path, &tox_opts, &new_err); m = load_tox(data_path, tox_opts, &new_err);
} }
if (!m) if (!m)
@ -756,6 +757,7 @@ static Tox *load_toxic(char *data_path)
if (tox_self_get_name_size(m) == 0) if (tox_self_get_name_size(m) == 0)
tox_self_set_name(m, (uint8_t *) "Toxic User", strlen("Toxic User"), NULL); tox_self_set_name(m, (uint8_t *) "Toxic User", strlen("Toxic User"), NULL);
tox_options_free(tox_opts);
return m; return m;
} }