diff --git a/CMakeLists.txt b/CMakeLists.txt
index 366a6f2..d22d6d0 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -20,8 +20,8 @@
cmake_minimum_required(VERSION 2.8.12)
project(tox-weechat C)
-set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/var/local/src/c-toxcore/toxcore -I/var/local/src/c-toxcore/toxac -I/var/local/src/c-toxcore/toxencryptsave")
-set(LD_FLAGS "${LD_FLAGS} -I/var/local/src/c-toxcore/_build")
+set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -I/usr/local/src/c-toxcore/toxcore -I/var/local/src/c-toxcore/toxav -I/usr/local/src/c-toxcore/toxencryptsave")
+set(LD_FLAGS "${LD_FLAGS} -I/usr/local/src/c-toxcore/_build")
add_library(tox MODULE
src/twc.c
diff --git a/README.md b/README.md
index d28e714..d6ca028 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
# Tox-WeeChat
Tox-WeeChat is a [Tox][1] protocol plugin for [WeeChat][2]. It is functional,
but lacks certain features that might be expected of a full-fledged Tox client.
+Originally from the abandonned https://github.com/haavard/tox-weechat
Tox-WeeChat is compliant with all "Required" points in the [Tox Client
Standard][3].
diff --git a/cmake.sh b/cmake.sh
new file mode 100644
index 0000000..ff7458a
--- /dev/null
+++ b/cmake.sh
@@ -0,0 +1,11 @@
+#!/bin/sh
+
+mkdir _build || exit 1
+cd _build
+
+# -DTox_INCLUDE_DIRS="/usr/local/src/c-toxcore/toxencryptsave /usr/local/src/c-toxcore/toxav /usr/local/src/c-toxcore/toxcore"
+cmake -DPLUGIN_PATH=~/.cache/weechat/plugins -DCMAKE_PREFIX_PATH=/usr/local \
+ -DTox_INCLUDE_DIRS="/usr/local/src/c-toxcore" \
+ -DTox_LIBRARIES=/usr/local/src/c-toxcore/_build \
+ .. >> cmake.log 2>&1 || exit 2$?
+make >> make.log 2>&1 || exit 3$?
diff --git a/src/getnodes.c b/src/getnodes.c
new file mode 100644
index 0000000..6228126
--- /dev/null
+++ b/src/getnodes.c
@@ -0,0 +1,108 @@
+/* bootstrap nodes generated by /o/var/local/src/tox-weechat/misc/getnodes.py
+ * last generated 2022-11-11T08:54:10.303144 */
+static struct t_twc_bootstrap_node const twc_bootstrap_nodes[] = {
+ /* Maintainer: velusip, location: CA */
+ {"7E5668E0EE09E19F320AD47902419331FFEE147BB3606769CFBE921A2A2FD34C",
+ "144.217.167.73", 33445},
+ /* Maintainer: Cody, location: US */
+ {"BEF0CFB37AF874BD17B9A8F9FE64C75521DB95A37D33C5BDB00E9CF58659C04F",
+ "198.199.98.108", 33445},
+ /* Maintainer: GDR!, location: US */
+ {"3091C6BEB2A993F1C6300C16549FABA67098FF3D62C6D253828B531470B53D68",
+ "205.185.115.131", 53},
+ /* Maintainer: kotelnik, location: DE */
+ {"CD133B521159541FB1D326DE9850F5E56A6C724B5B8E5EB5CD8D950408E95707",
+ "46.101.197.175", 33445},
+ /* Maintainer: tux1973, location: DE */
+ {"B84E865125B4EC4C368CD047C72BCE447644A2DC31EF75BD2CDA345BFD310107",
+ "195.201.7.101", 33445},
+ /* Maintainer: Nikat, location: RU */
+ {"1911341A83E02503AB1FD6561BD64AF3A9D6C3F12B5FBB656976B2E678644A67",
+ "188.225.9.167", 33445},
+ /* Maintainer: miaoski, location: TW */
+ {"5716530A10D362867C8E87EE1CD5362A233BAFBBA4CF47FA73B7CAD368BD5E6E",
+ "122.116.39.151", 33445},
+ /* Maintainer: Cüber, location: US */
+ {"28DB44A3CEEE69146469855DFFE5F54DA567F5D65E03EFB1D38BBAEFF2553255",
+ "198.98.49.206", 33445},
+};
+static struct t_twc_bootstrap_node const twc_bootstrap_relays[] = {
+ /* Maintainer: velusip, location: CA */
+ {"7E5668E0EE09E19F320AD47902419331FFEE147BB3606769CFBE921A2A2FD34C",
+ "144.217.167.73", 33445},
+ /* Maintainer: velusip, location: CA */
+ {"7E5668E0EE09E19F320AD47902419331FFEE147BB3606769CFBE921A2A2FD34C",
+ "144.217.167.73", 3389},
+ /* Maintainer: Cody, location: US */
+ {"BEF0CFB37AF874BD17B9A8F9FE64C75521DB95A37D33C5BDB00E9CF58659C04F",
+ "198.199.98.108", 33445},
+ /* Maintainer: Cody, location: US */
+ {"BEF0CFB37AF874BD17B9A8F9FE64C75521DB95A37D33C5BDB00E9CF58659C04F",
+ "198.199.98.108", 3389},
+ /* Maintainer: GDR!, location: US */
+ {"3091C6BEB2A993F1C6300C16549FABA67098FF3D62C6D253828B531470B53D68",
+ "205.185.115.131", 3389},
+ /* Maintainer: GDR!, location: US */
+ {"3091C6BEB2A993F1C6300C16549FABA67098FF3D62C6D253828B531470B53D68",
+ "205.185.115.131", 443},
+ /* Maintainer: GDR!, location: US */
+ {"3091C6BEB2A993F1C6300C16549FABA67098FF3D62C6D253828B531470B53D68",
+ "205.185.115.131", 33445},
+ /* Maintainer: GDR!, location: US */
+ {"3091C6BEB2A993F1C6300C16549FABA67098FF3D62C6D253828B531470B53D68",
+ "205.185.115.131", 53},
+ /* Maintainer: kotelnik, location: DE */
+ {"CD133B521159541FB1D326DE9850F5E56A6C724B5B8E5EB5CD8D950408E95707",
+ "46.101.197.175", 3389},
+ /* Maintainer: kotelnik, location: DE */
+ {"CD133B521159541FB1D326DE9850F5E56A6C724B5B8E5EB5CD8D950408E95707",
+ "46.101.197.175", 33445},
+ /* Maintainer: tux1973, location: DE */
+ {"B84E865125B4EC4C368CD047C72BCE447644A2DC31EF75BD2CDA345BFD310107",
+ "195.201.7.101", 3389},
+ /* Maintainer: tux1973, location: DE */
+ {"B84E865125B4EC4C368CD047C72BCE447644A2DC31EF75BD2CDA345BFD310107",
+ "195.201.7.101", 33445},
+ /* Maintainer: Tha_14, location: MD */
+ {"836D1DA2BE12FE0E669334E437BE3FB02806F1528C2B2782113E0910C7711409",
+ "114.35.245.150", 443},
+ /* Maintainer: Tha_14, location: MD */
+ {"836D1DA2BE12FE0E669334E437BE3FB02806F1528C2B2782113E0910C7711409",
+ "114.35.245.150", 3389},
+ /* Maintainer: Nikat, location: RU */
+ {"1911341A83E02503AB1FD6561BD64AF3A9D6C3F12B5FBB656976B2E678644A67",
+ "188.225.9.167", 3389},
+ /* Maintainer: Nikat, location: RU */
+ {"1911341A83E02503AB1FD6561BD64AF3A9D6C3F12B5FBB656976B2E678644A67",
+ "188.225.9.167", 33445},
+ /* Maintainer: miaoski, location: TW */
+ {"5716530A10D362867C8E87EE1CD5362A233BAFBBA4CF47FA73B7CAD368BD5E6E",
+ "122.116.39.151", 3389},
+ /* Maintainer: miaoski, location: TW */
+ {"5716530A10D362867C8E87EE1CD5362A233BAFBBA4CF47FA73B7CAD368BD5E6E",
+ "122.116.39.151", 33445},
+ /* Maintainer: Cüber, location: LV */
+ {"534A589BA7427C631773D13083570F529238211893640C99D1507300F055FE73",
+ "195.123.208.139", 3389},
+ /* Maintainer: Cüber, location: LV */
+ {"534A589BA7427C631773D13083570F529238211893640C99D1507300F055FE73",
+ "195.123.208.139", 33445},
+ /* Maintainer: ToxTom, location: CA */
+ {"F76A11284547163889DDC89A7738CF271797BF5E5E220643E97AD3C7E7903D55",
+ "139.162.110.188", 443},
+ /* Maintainer: ToxTom, location: CA */
+ {"F76A11284547163889DDC89A7738CF271797BF5E5E220643E97AD3C7E7903D55",
+ "139.162.110.188", 33445},
+ /* Maintainer: ToxTom, location: CA */
+ {"F76A11284547163889DDC89A7738CF271797BF5E5E220643E97AD3C7E7903D55",
+ "139.162.110.188", 3389},
+ /* Maintainer: Cüber, location: US */
+ {"28DB44A3CEEE69146469855DFFE5F54DA567F5D65E03EFB1D38BBAEFF2553255",
+ "198.98.49.206", 33445},
+ /* Maintainer: Toxdaemon, location: RU */
+ {"DA98A4C0CD7473A133E115FEA2EBDAEEA2EF4F79FD69325FC070DA4DE4BA3238",
+ "5.19.249.240", 3389},
+ /* Maintainer: Toxdaemon, location: RU */
+ {"DA98A4C0CD7473A133E115FEA2EBDAEEA2EF4F79FD69325FC070DA4DE4BA3238",
+ "5.19.249.240", 38296},
+};
diff --git a/src/twc-commands.c b/src/twc-commands.c
index 5240e24..e593368 100644
--- a/src/twc-commands.c
+++ b/src/twc-commands.c
@@ -1396,9 +1396,10 @@ twc_cmd_send(const void *pointer, void *data, struct t_gui_buffer *buffer,
free(stripped_name);
if (error != TOX_ERR_FILE_SEND_OK)
{
- weechat_printf(profile->buffer, "%ssending \"%s\" has been failed: %s",
+ weechat_printf(profile->buffer, "%ssending \"%s\" has been failed: %d",
weechat_prefix("error"), filename,
- twc_tox_err_file_send(error));
+ /* twc_tox_err_file_send */
+ error);
return WEECHAT_RC_ERROR;
}
if (!(profile->tfer->buffer))
@@ -1427,7 +1428,7 @@ twc_cmd_send(const void *pointer, void *data, struct t_gui_buffer *buffer,
void
twc_commands_init()
{
- weechat_hook_command("bootstrap", "manage bootstrap nodes",
+ weechat_hook_command("bootstrap", "manage bootstrap nodes (see also /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)",
"connect
"
" || relay ",
"address: internet address of node to bootstrap with\n"
@@ -1437,7 +1438,7 @@ twc_commands_init()
" || relay",
twc_cmd_bootstrap, NULL, NULL);
- weechat_hook_command("friend", "manage friends",
+ weechat_hook_command("friend", "manage friends (see also /bootstrap, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)",
"list"
" || add [-force] []"
" || remove ||"
@@ -1457,7 +1458,7 @@ twc_commands_init()
" || decline",
twc_cmd_friend, NULL, NULL);
- weechat_hook_command("conf", "manage conf chats",
+ weechat_hook_command("conf", "manage conf chats (see also /bootstrap, /friend, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)",
"create"
" || invites"
" || join "
@@ -1472,62 +1473,62 @@ twc_commands_init()
twc_cmd_conf, NULL, NULL);
weechat_hook_command(
- "invite", "invite someone to a conf chat", "||",
+ "invite", "invite someone to a conf chat (see also /bootstrap, /friend, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)", "||",
"number, name, Tox ID: friend to message\n",
"%(tox_friend_name)|%(tox_friend_tox_id)", twc_cmd_invite, NULL, NULL);
- weechat_hook_command("me", "send an action to the current chat",
+ weechat_hook_command("me", "send an action to the current chat (see also /bootstrap, /friend, /conf, /invite, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)",
"", "message: message to send", NULL,
twc_cmd_me, NULL, NULL);
- weechat_hook_command("msg", "send a message to a Tox friend",
+ weechat_hook_command("msg", "send a message to a Tox friend (see also /bootstrap, /friend, /conf, /invite, /me, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)",
"|| []",
"number, name, Tox ID: friend to message\n"
"message: message to send",
"%(tox_friend_name)|%(tox_friend_tox_id)", twc_cmd_msg,
NULL, NULL);
- weechat_hook_command("query", "send a message to a Tox friend",
+ weechat_hook_command("query", "send a message to a Tox friend (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)",
"|| []",
"number, name, Tox ID: friend to message\n"
"message: message to send",
"%(tox_friend_name)|%(tox_friend_tox_id)", twc_cmd_msg,
NULL, NULL);
- weechat_hook_command("myid", "get your Tox ID to give to friends", "", "",
+ weechat_hook_command("myid", "get your Tox ID to give to friends (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)", "", "",
NULL, twc_cmd_myid, NULL, NULL);
- weechat_hook_command("name", "change your Tox name", "",
+ weechat_hook_command("name", "change your Tox name (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)", "",
"name: your new name", NULL, twc_cmd_name, NULL, NULL);
- weechat_hook_command("names", "list names in a conf chat", "", "", NULL,
+ weechat_hook_command("names", "list names in a conf chat (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)", "", "", NULL,
twc_cmd_names, NULL, NULL);
- weechat_hook_command("nospam", "change nospam value", "[]",
+ weechat_hook_command("nospam", "change nospam value (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /part, /status, /statusmsg, /topic, /tox, /send)", "[]",
"hex value: new nospam value; when omitted, a random "
"new value is used\n\n"
"Warning: changing your nospam value will alter your "
"Tox ID!",
NULL, twc_cmd_nospam, NULL, NULL);
- weechat_hook_command("part", "leave a conf chat", "", "", NULL,
+ weechat_hook_command("part", "leave a conf chat (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /status, /statusmsg, /topic, /tox, /send)", "", "", NULL,
twc_cmd_part, NULL, NULL);
- weechat_hook_command_run("/save", twc_cmd_save, NULL, NULL);
+ weechat_hook_command_run("/save (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox, /send)", twc_cmd_save, NULL, NULL);
- weechat_hook_command("status", "change your Tox status", "online|busy|away",
+ weechat_hook_command("status", "change your Tox status (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /statusmsg, /topic, /tox, /send)", "online|busy|away",
"", NULL, twc_cmd_status, NULL, NULL);
- weechat_hook_command("statusmsg", "change your Tox status message",
+ weechat_hook_command("statusmsg", "change your Tox status message (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /topic, /tox, /send)",
"[]", "message: your new status message",
NULL, twc_cmd_statusmsg, NULL, NULL);
- weechat_hook_command("topic", "set a conf chat topic", "",
+ weechat_hook_command("topic", "set a conf chat topic (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /tox, /send)", "",
"topic: new conf chat topic", NULL, twc_cmd_topic,
NULL, NULL);
-
+
weechat_hook_command(
- "tox", "manage Tox profiles",
+ "tox", "manage Tox profiles (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /send)",
"list"
" || create "
" || delete -yes|-keepdata"
@@ -1550,7 +1551,7 @@ twc_commands_init()
" || reload %(tox_loaded_profiles)|%*",
twc_cmd_tox, NULL, NULL);
weechat_hook_command(
- "send", "send a file to a friend",
+ "send", "send a file to a friend (see also /bootstrap, /friend, /conf, /invite, /me, /msg, /myid, /name, /names, /nospam, /part, /status, /statusmsg, /topic, /tox)",
""
" || || ",
"file: path to the file\n"
diff --git a/src/twc-config.c b/src/twc-config.c
index 4b69d5e..ebdd038 100644
--- a/src/twc-config.c
+++ b/src/twc-config.c
@@ -53,6 +53,8 @@ char *twc_profile_option_names[TWC_PROFILE_NUM_OPTIONS] = {
"passphrase",
"logging",
"downloading_path",
+ "local_discovery_enabled",
+ "dht_announcements_enabled",
};
/**
@@ -283,11 +285,11 @@ twc_config_init_option(struct t_twc_profile *profile,
break;
case TWC_PROFILE_OPTION_PROXY_TYPE:
type = "integer";
- description = "proxy type; requires profile reload to take effect";
- string_values = "none|socks5|http";
+ description = "proxy type (none=0|http=1||socks5=2); requires profile reload to take effect";
+ /* string_values = "none|socks5|http"; */
min = 0;
- max = 0;
- default_value = "none";
+ max = 2;
+ default_value = 0; /* "none"; */
break;
case TWC_PROFILE_OPTION_SAVEFILE:
type = "string";
@@ -300,6 +302,11 @@ twc_config_init_option(struct t_twc_profile *profile,
description = "use UDP when communicating with the Tox network";
default_value = "on";
break;
+ case TWC_PROFILE_OPTION_LAN_DISCOVERY:
+ type = "boolean";
+ description = "look for nodes on the local lan";
+ default_value = "off";
+ break;
case TWC_PROFILE_OPTION_DOWNLOADING_PATH:
type = "string";
description =
@@ -307,6 +314,16 @@ twc_config_init_option(struct t_twc_profile *profile,
"WeeChat home folder and \"%p\" by profile name";
default_value = "%h/tfer/%p/";
break;
+ case TWC_PROFILE_OPTION_DHT_ANNOUNCEMENTS_ENABLED:
+ type = "boolean";
+ description = "dht announcements enabled";
+ default_value = "on";
+ break;
+ case TWC_PROFILE_OPTION_HOLE_PUNCHING_ENABLED:
+ type = "boolean";
+ description = "hole_punching_enabled";
+ default_value = "off";
+ break;
default:
return NULL;
}
diff --git a/src/twc-config.h b/src/twc-config.h
index 80d9418..3fc6f8e 100644
--- a/src/twc-config.h
+++ b/src/twc-config.h
@@ -28,8 +28,8 @@ extern struct t_config_option *twc_config_short_id_size;
enum t_twc_proxy
{
TWC_PROXY_NONE = 0,
- TWC_PROXY_SOCKS5,
- TWC_PROXY_HTTP
+ TWC_PROXY_HTTP,
+ TWC_PROXY_SOCKS5
};
void
diff --git a/src/twc-profile.c b/src/twc-profile.c
index e2d9502..965fa93 100644
--- a/src/twc-profile.c
+++ b/src/twc-profile.c
@@ -198,12 +198,12 @@ twc_profile_set_options(struct Tox_Options *options,
case TWC_PROXY_NONE:
options->proxy_type = TOX_PROXY_TYPE_NONE;
break;
- case TWC_PROXY_SOCKS5:
- options->proxy_type = TOX_PROXY_TYPE_SOCKS5;
- break;
case TWC_PROXY_HTTP:
options->proxy_type = TOX_PROXY_TYPE_HTTP;
break;
+ case TWC_PROXY_SOCKS5:
+ options->proxy_type = TOX_PROXY_TYPE_SOCKS5;
+ break;
}
options->proxy_port =
@@ -212,6 +212,12 @@ twc_profile_set_options(struct Tox_Options *options,
TWC_PROFILE_OPTION_BOOLEAN(profile, TWC_PROFILE_OPTION_UDP);
options->ipv6_enabled =
TWC_PROFILE_OPTION_BOOLEAN(profile, TWC_PROFILE_OPTION_IPV6);
+ options->local_discovery_enabled =
+ TWC_PROFILE_OPTION_BOOLEAN(profile, TWC_PROFILE_OPTION_LAN_DISCOVERY);
+ options->dht_announcements_enabled =
+ TWC_PROFILE_OPTION_BOOLEAN(profile, TWC_PROFILE_OPTION_DHT_ANNOUNCEMENTS_ENABLED);
+ options->hole_punching_enabled =
+ TWC_PROFILE_OPTION_BOOLEAN(profile, TWC_PROFILE_OPTION_HOLE_PUNCHING_ENABLED);
#ifndef NDEBUG
options->log_callback = twc_tox_log_callback;
@@ -248,7 +254,7 @@ twc_tox_new_print_error(struct t_twc_profile *profile,
break;
case TOX_ERR_NEW_PROXY_BAD_PORT:
weechat_printf(profile->buffer,
- "%scould not load Tox (invalid proxy port: \"%"
+ "%scould not load Tox (invalid proxy port: \"%d"
PRIu16 "\")",
weechat_prefix("error"), options->proxy_port);
break;
@@ -318,7 +324,7 @@ twc_profile_load(struct t_twc_profile *profile)
/* print a proxy message */
if (options.proxy_type != TOX_PROXY_TYPE_NONE)
{
- weechat_printf(profile->buffer, "%susing %s proxy %s:%" PRIu16,
+ weechat_printf(profile->buffer, "%susing %s proxy %s:%d" PRIu16,
weechat_prefix("network"),
options.proxy_type == TOX_PROXY_TYPE_HTTP
? "HTTP"
@@ -331,8 +337,7 @@ twc_profile_load(struct t_twc_profile *profile)
"but UDP is not disabled. Your IP address may not "
"be hidden.",
weechat_prefix("error"), weechat_color("lightred"),
- weechat_color("reset"), options.proxy_host,
- options.proxy_port);
+ weechat_color("reset"));
}
/* try loading data file */
@@ -709,11 +714,11 @@ twc_profile_free(struct t_twc_profile *profile)
twc_group_chat_invite_free_list(profile->group_chat_invites);
twc_tfer_free(profile->tfer);
twc_message_queue_free_profile(profile);
- free(profile->name);
- free(profile);
/* remove from list */
twc_list_remove_with_data(twc_profiles, profile);
+ free(profile->name);
+ free(profile);
}
/**
diff --git a/src/twc-profile.h b/src/twc-profile.h
index eca37f5..2f3851b 100644
--- a/src/twc-profile.h
+++ b/src/twc-profile.h
@@ -42,6 +42,7 @@ enum t_twc_profile_option
TWC_PROFILE_OPTION_PASSPHRASE,
TWC_PROFILE_OPTION_LOGGING,
TWC_PROFILE_OPTION_DOWNLOADING_PATH,
+ TWC_PROFILE_OPTION_LAN_DISCOVERY,
TWC_PROFILE_NUM_OPTIONS,
};