1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-27 05:16:38 +02:00

relay/api: add automatic reconnection to remote (closes #2166)

New options:

- remote option "autoreconnect_delay"
- relay.api.remote_autoreconnect_delay_growing
- relay.api.remote_autoreconnect_delay_max
This commit is contained in:
Sébastien Helleu
2024-08-11 12:18:28 +02:00
parent fc6811341a
commit a317c785fb
26 changed files with 789 additions and 80 deletions
@@ -132,6 +132,7 @@ relay_remote_network_disconnect (struct t_relay_remote *remote)
relay_remote_network_close_connection (remote);
relay_remote_set_status (remote, RELAY_STATUS_DISCONNECTED);
weechat_printf (NULL, _("remote[%s]: disconnected"), remote->name);
relay_remote_reconnect_schedule (remote);
}
/*
@@ -385,6 +386,8 @@ relay_remote_network_recv_text (struct t_relay_remote *remote,
return;
}
relay_remote_set_status (remote, RELAY_STATUS_CONNECTED);
remote->reconnect_delay = 0;
remote->reconnect_start = 0;
snprintf (request, sizeof (request),
"{\"request\": \"GET /api/version\"}");
relay_remote_network_send (remote, RELAY_MSG_STANDARD,
@@ -835,6 +838,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
case WEECHAT_HOOK_CONNECT_IP_ADDRESS_NOT_FOUND:
weechat_printf (NULL,
@@ -846,6 +850,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
case WEECHAT_HOOK_CONNECT_CONNECTION_REFUSED:
weechat_printf (NULL,
@@ -857,6 +862,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
case WEECHAT_HOOK_CONNECT_PROXY_ERROR:
weechat_printf (
@@ -871,6 +877,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
case WEECHAT_HOOK_CONNECT_LOCAL_HOSTNAME_ERROR:
weechat_printf (NULL,
@@ -882,6 +889,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
case WEECHAT_HOOK_CONNECT_GNUTLS_INIT_ERROR:
weechat_printf (NULL,
@@ -893,6 +901,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
case WEECHAT_HOOK_CONNECT_GNUTLS_HANDSHAKE_ERROR:
weechat_printf (NULL,
@@ -904,6 +913,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
case WEECHAT_HOOK_CONNECT_MEMORY_ERROR:
weechat_printf (NULL,
@@ -915,6 +925,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
case WEECHAT_HOOK_CONNECT_TIMEOUT:
weechat_printf (NULL,
@@ -926,6 +937,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
case WEECHAT_HOOK_CONNECT_SOCKET_ERROR:
weechat_printf (NULL,
@@ -937,6 +949,7 @@ relay_remote_network_connect_cb (const void *pointer, void *data, int status,
_("%sremote[%s]: error: %s"),
weechat_prefix ("error"), remote->name, error);
}
relay_remote_network_disconnect (remote);
break;
}
@@ -1208,7 +1221,7 @@ relay_remote_network_url_handshake_cb (const void *pointer,
remote->name,
weechat_config_string (remote->options[RELAY_REMOTE_OPTION_URL]),
ptr_resp_code);
relay_remote_set_status (remote, RELAY_STATUS_DISCONNECTED);
relay_remote_network_disconnect (remote);
return WEECHAT_RC_OK;
}
@@ -1222,7 +1235,7 @@ relay_remote_network_url_handshake_cb (const void *pointer,
remote->name,
weechat_config_string (remote->options[RELAY_REMOTE_OPTION_URL]),
ptr_error);
relay_remote_set_status (remote, RELAY_STATUS_DISCONNECTED);
relay_remote_network_disconnect (remote);
return WEECHAT_RC_OK;
}
@@ -1259,7 +1272,7 @@ relay_remote_network_url_handshake_cb (const void *pointer,
remote->name,
weechat_config_string (remote->options[RELAY_REMOTE_OPTION_URL]),
_("hash algorithm not found"));
relay_remote_set_status (remote, RELAY_STATUS_DISCONNECTED);
relay_remote_network_disconnect (remote);
return WEECHAT_RC_OK;
}
@@ -1272,7 +1285,7 @@ relay_remote_network_url_handshake_cb (const void *pointer,
remote->name,
weechat_config_string (remote->options[RELAY_REMOTE_OPTION_URL]),
_("unknown number of hash iterations"));
relay_remote_set_status (remote, RELAY_STATUS_DISCONNECTED);
relay_remote_network_disconnect (remote);
return WEECHAT_RC_OK;
}
@@ -1285,7 +1298,7 @@ relay_remote_network_url_handshake_cb (const void *pointer,
remote->name,
weechat_config_string (remote->options[RELAY_REMOTE_OPTION_URL]),
_("unknown TOTP status"));
relay_remote_set_status (remote, RELAY_STATUS_DISCONNECTED);
relay_remote_network_disconnect (remote);
return WEECHAT_RC_OK;
}
@@ -1322,7 +1335,7 @@ relay_remote_network_url_handshake_cb (const void *pointer,
_("%sremote[%s]: not enough memory"),
weechat_prefix ("error"),
remote->name);
relay_remote_set_status (remote, RELAY_STATUS_DISCONNECTED);
relay_remote_network_disconnect (remote);
return WEECHAT_RC_OK;
}
snprintf (option_name, length, "weechat.proxy.%s.type", proxy);
@@ -1340,7 +1353,7 @@ relay_remote_network_url_handshake_cb (const void *pointer,
NULL,
_("%sremote[%s]: proxy \"%s\" not found, cannot connect"),
weechat_prefix ("error"), remote->name, proxy);
relay_remote_set_status (remote, RELAY_STATUS_DISCONNECTED);
relay_remote_network_disconnect (remote);
return WEECHAT_RC_OK;
}
str_proxy_type = weechat_config_string (proxy_type);
@@ -1353,7 +1366,7 @@ relay_remote_network_url_handshake_cb (const void *pointer,
_("%sremote[%s]: missing proxy settings, check options for "
"proxy \"%s\""),
weechat_prefix ("error"), remote->name, proxy);
relay_remote_set_status (remote, RELAY_STATUS_DISCONNECTED);
relay_remote_network_disconnect (remote);
return WEECHAT_RC_OK;
}
}
+2 -9
View File
@@ -1302,18 +1302,13 @@ relay_client_send (struct t_relay_client *client,
* Timer callback, called each second.
*/
int
relay_client_timer_cb (const void *pointer, void *data, int remaining_calls)
void
relay_client_timer ()
{
struct t_relay_client *ptr_client, *ptr_next_client;
int purge_delay, auth_timeout;
time_t current_time;
/* make C compiler happy */
(void) pointer;
(void) data;
(void) remaining_calls;
purge_delay = weechat_config_integer (relay_config_network_clients_purge_delay);
auth_timeout = weechat_config_integer (relay_config_network_auth_timeout);
@@ -1352,8 +1347,6 @@ relay_client_timer_cb (const void *pointer, void *data, int remaining_calls)
ptr_client = ptr_next_client;
}
return WEECHAT_RC_OK;
}
/*
+1 -2
View File
@@ -131,8 +131,7 @@ extern int relay_client_send (struct t_relay_client *client,
enum t_relay_msg_type msg_type,
const char *data,
int data_size, const char *message_raw_buffer);
extern int relay_client_timer_cb (const void *pointer, void *data,
int remaining_calls);
extern void relay_client_timer ();
extern struct t_relay_client *relay_client_new (int sock, const char *address,
struct t_relay_server *server);
extern struct t_relay_client *relay_client_new_with_infolist (struct t_infolist *infolist);
+19 -2
View File
@@ -439,6 +439,8 @@ relay_command_display_remote (struct t_relay_remote *remote, int with_detail)
weechat_printf (NULL, " autoconnect. . . . . : %s",
(weechat_config_string (remote->options[RELAY_REMOTE_OPTION_AUTOCONNECT])) ?
"on" : "off");
weechat_printf (NULL, " autoreconnect_delay. : %d",
weechat_config_integer (remote->options[RELAY_REMOTE_OPTION_AUTORECONNECT_DELAY]));
weechat_printf (NULL, " proxy. . . . . . . . : '%s'",
weechat_config_string (remote->options[RELAY_REMOTE_OPTION_PROXY]));
weechat_printf (NULL, " tls_verify . . . . . : %s",
@@ -474,7 +476,8 @@ relay_command_remote (const void *pointer, void *data,
{
struct t_relay_remote *ptr_remote, *ptr_remote2;
int i, detailed_list, one_remote_found, update;
const char *ptr_autoconnect, *ptr_proxy, *ptr_tls_verify, *ptr_password;
const char *ptr_autoconnect, *ptr_autoreconnect_delay, *ptr_proxy;
const char *ptr_tls_verify, *ptr_password;
const char *ptr_totp_secret;
char *remote_name;
@@ -601,6 +604,7 @@ relay_command_remote (const void *pointer, void *data,
return WEECHAT_RC_ERROR;
}
ptr_autoconnect = NULL;
ptr_autoreconnect_delay = NULL;
ptr_proxy = NULL;
ptr_tls_verify = NULL;
ptr_password = NULL;
@@ -611,6 +615,10 @@ relay_command_remote (const void *pointer, void *data,
{
ptr_autoconnect = argv[i] + 13;
}
else if (strncmp (argv[i], "-autoreconnect_delay=", 21) == 0)
{
ptr_autoreconnect_delay = argv[i] + 21;
}
else if (strncmp (argv[i], "-proxy=", 7) == 0)
{
ptr_proxy = argv[i] + 7;
@@ -638,7 +646,8 @@ relay_command_remote (const void *pointer, void *data,
}
}
ptr_remote = relay_remote_new (argv[2], argv[3], ptr_autoconnect,
ptr_proxy, ptr_tls_verify, ptr_password,
ptr_autoreconnect_delay, ptr_proxy,
ptr_tls_verify, ptr_password,
ptr_totp_secret);
if (ptr_remote)
{
@@ -744,6 +753,14 @@ relay_command_remote (const void *pointer, void *data,
return WEECHAT_RC_ERROR;
}
relay_remote_disconnect (ptr_remote);
if (ptr_remote->reconnect_start > 0)
{
ptr_remote->reconnect_delay = 0;
ptr_remote->reconnect_start = 0;
weechat_printf (NULL,
_("remote[%s]: auto-reconnection is cancelled"),
ptr_remote->name);
}
return WEECHAT_RC_OK;
}
+26 -1
View File
@@ -106,6 +106,8 @@ struct t_config_option *relay_config_irc_backlog_time_format = NULL;
/* relay config, api section */
struct t_config_option *relay_config_api_remote_get_lines = NULL;
struct t_config_option *relay_config_api_remote_autoreconnect_delay_growing = NULL;
struct t_config_option *relay_config_api_remote_autoreconnect_delay_max = NULL;
/* other */
@@ -1073,10 +1075,19 @@ relay_config_create_remote_option (const char *remote_name, int index_option,
ptr_option = weechat_config_new_option (
relay_config_file, relay_config_section_remote,
option_name, "boolean",
N_("auto-connect to the remote relay"),
N_("automatically connect to the remote relay"),
NULL, 0, 0, value, NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
break;
case RELAY_REMOTE_OPTION_AUTORECONNECT_DELAY:
ptr_option = weechat_config_new_option (
relay_config_file, relay_config_section_remote,
option_name, "integer",
N_("automatically reconnect to the remote relay after this delay, "
"in seconds (0 = disable automatic reconnection)"),
NULL, 0, 65535, value, NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
break;
case RELAY_REMOTE_OPTION_PROXY:
ptr_option = weechat_config_new_option (
relay_config_file, relay_config_section_remote,
@@ -1849,6 +1860,20 @@ relay_config_init ()
"to a remote relay"),
NULL, 0, INT_MAX, "1000", NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
relay_config_api_remote_autoreconnect_delay_growing = weechat_config_new_option (
relay_config_file, relay_config_section_api,
"remote_autoreconnect_delay_growing", "integer",
N_("growing factor for autoreconnect delay to remote relay (1 = always "
"same delay, 2 = delay*2 for each retry, etc.)"),
NULL, 1, 100, "2", NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
relay_config_api_remote_autoreconnect_delay_max = weechat_config_new_option (
relay_config_file, relay_config_section_api,
"remote_autoreconnect_delay_max", "integer",
N_("maximum autoreconnect delay to remote relay (in seconds, 0 = no "
"maximum)"),
NULL, 0, 3600 * 24 * 7, "600", NULL, 0,
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL);
}
/* section port */
+2
View File
@@ -71,6 +71,8 @@ extern struct t_config_option *relay_config_irc_backlog_tags;
extern struct t_config_option *relay_config_irc_backlog_time_format;
extern struct t_config_option *relay_config_api_remote_get_lines;
extern struct t_config_option *relay_config_api_remote_autoreconnect_delay_growing;
extern struct t_config_option *relay_config_api_remote_autoreconnect_delay_max;
extern int relay_config_auto_open_buffer[];
extern int relay_config_display_clients[];
+123 -6
View File
@@ -42,9 +42,10 @@
char *relay_remote_option_string[RELAY_REMOTE_NUM_OPTIONS] =
{ "url", "autoconnect", "proxy", "tls_verify", "password", "totp_secret" };
{ "url", "autoconnect", "autoreconnect_delay", "proxy", "tls_verify",
"password", "totp_secret" };
char *relay_remote_option_default[RELAY_REMOTE_NUM_OPTIONS] =
{ "", "off", "", "on", "", "" };
{ "", "off", "10", "", "on", "", "" };
struct t_relay_remote *relay_remotes = NULL;
struct t_relay_remote *last_relay_remote = NULL;
@@ -358,6 +359,8 @@ relay_remote_alloc (const char *name)
new_remote->synced = 0;
new_remote->partial_ws_frame = NULL;
new_remote->partial_ws_frame_size = 0;
new_remote->reconnect_delay = 0;
new_remote->reconnect_start = 0;
new_remote->prev_remote = NULL;
new_remote->next_remote = NULL;
@@ -477,9 +480,14 @@ relay_remote_new_with_options (const char *name, struct t_config_option **option
*/
struct t_relay_remote *
relay_remote_new (const char *name, const char *url, const char *autoconnect,
const char *proxy, const char *tls_verify,
const char *password, const char *totp_secret)
relay_remote_new (const char *name,
const char *url,
const char *autoconnect,
const char *autoreconnect_delay,
const char *proxy,
const char *tls_verify,
const char *password,
const char *totp_secret)
{
struct t_config_option *option[RELAY_REMOTE_NUM_OPTIONS];
const char *value[RELAY_REMOTE_NUM_OPTIONS];
@@ -491,6 +499,7 @@ relay_remote_new (const char *name, const char *url, const char *autoconnect,
value[RELAY_REMOTE_OPTION_URL] = url;
value[RELAY_REMOTE_OPTION_AUTOCONNECT] = autoconnect;
value[RELAY_REMOTE_OPTION_AUTORECONNECT_DELAY] = autoreconnect_delay;
value[RELAY_REMOTE_OPTION_PROXY] = proxy;
value[RELAY_REMOTE_OPTION_TLS_VERIFY] = tls_verify;
value[RELAY_REMOTE_OPTION_PASSWORD] = password;
@@ -594,6 +603,8 @@ relay_remote_new_with_infolist (struct t_infolist *infolist)
}
new_remote->version_ok = weechat_infolist_integer (infolist, "version_ok");
new_remote->synced = weechat_infolist_integer (infolist, "synced");
new_remote->reconnect_delay = weechat_infolist_integer (infolist, "reconnect_delay");
new_remote->reconnect_start = weechat_infolist_integer (infolist, "reconnect_start");
ptr_ws_frame = weechat_infolist_buffer (infolist, "partial_ws_frame", &ws_frame_size);
if (ptr_ws_frame && (ws_frame_size > 0))
{
@@ -805,6 +816,68 @@ relay_remote_disconnect (struct t_relay_remote *remote)
#endif /* HAVE_CJSON */
}
/*
* Schedules reconnection to remote.
*/
void
relay_remote_reconnect_schedule (struct t_relay_remote *remote)
{
int minutes, seconds;
if (weechat_config_integer (remote->options[RELAY_REMOTE_OPTION_AUTORECONNECT_DELAY]) == 0)
{
remote->reconnect_delay = 0;
remote->reconnect_start = 0;
return;
}
/* growing reconnect delay */
if (remote->reconnect_delay == 0)
remote->reconnect_delay = weechat_config_integer (remote->options[RELAY_REMOTE_OPTION_AUTORECONNECT_DELAY]);
else
remote->reconnect_delay = remote->reconnect_delay * weechat_config_integer (relay_config_api_remote_autoreconnect_delay_growing);
if ((weechat_config_integer (relay_config_api_remote_autoreconnect_delay_max) > 0)
&& (remote->reconnect_delay > weechat_config_integer (relay_config_api_remote_autoreconnect_delay_max)))
{
remote->reconnect_delay = weechat_config_integer (relay_config_api_remote_autoreconnect_delay_max);
}
remote->reconnect_start = time (NULL);
minutes = remote->reconnect_delay / 60;
seconds = remote->reconnect_delay % 60;
if ((minutes > 0) && (seconds > 0))
{
weechat_printf (
NULL,
_("remote[%s]: reconnecting to remote relay in %d %s, %d %s"),
remote->name,
minutes,
NG_("minute", "minutes", minutes),
seconds,
NG_("second", "seconds", seconds));
}
else if (minutes > 0)
{
weechat_printf (
NULL,
_("remote[%s]: reconnecting to remote relay in %d %s"),
remote->name,
minutes,
NG_("minute", "minutes", minutes));
}
else
{
weechat_printf (
NULL,
_("remote[%s]: reconnecting to remote relay in %d %s"),
remote->name,
seconds,
NG_("second", "seconds", seconds));
}
}
/*
* Reconnects to a remote WeeChat relay/api.
*
@@ -816,13 +889,20 @@ relay_remote_disconnect (struct t_relay_remote *remote)
int
relay_remote_reconnect (struct t_relay_remote *remote)
{
int rc;
if (!remote)
return 0;
remote->reconnect_start = 0;
#ifdef HAVE_CJSON
if (!relay_remote_disconnect (remote))
return 0;
return relay_remote_network_connect (remote);
rc = relay_remote_network_connect (remote);
if (!rc)
relay_remote_reconnect_schedule (remote);
return rc;
#else
weechat_printf (NULL,
_("%s%s: error: unable to connect to a remote relay via API "
@@ -832,6 +912,35 @@ relay_remote_reconnect (struct t_relay_remote *remote)
#endif /* HAVE_CJSON */
}
/*
* Timer used to auto-reconnect to remotes.
*/
void
relay_remote_timer ()
{
struct t_relay_remote *ptr_remote, *ptr_next_remote;
time_t current_time;
current_time = time (NULL);
ptr_remote = relay_remotes;
while (ptr_remote)
{
ptr_next_remote = ptr_remote->next_remote;
/* check if reconnection is pending */
if ((ptr_remote->sock <= 0)
&& (ptr_remote->reconnect_start > 0)
&& (current_time >= (ptr_remote->reconnect_start + ptr_remote->reconnect_delay)))
{
relay_remote_reconnect (ptr_remote);
}
ptr_remote = ptr_next_remote;
}
}
/*
* Disconnects all remotes.
*/
@@ -993,6 +1102,10 @@ relay_remote_add_to_infolist (struct t_infolist *infolist,
}
if (!weechat_infolist_new_var_integer (ptr_item, "version_ok", remote->version_ok))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "reconnect_delay", remote->reconnect_delay))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "reconnect_start", remote->reconnect_start))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "synced", remote->synced))
return 0;
@@ -1019,6 +1132,8 @@ relay_remote_print_log ()
weechat_log_printf (" autoconnect . . . . . . : %s",
(weechat_config_boolean (ptr_remote->options[RELAY_REMOTE_OPTION_AUTOCONNECT])) ?
"on" : "off");
weechat_log_printf (" autoreconnect_delay . . : %d",
weechat_config_integer (ptr_remote->options[RELAY_REMOTE_OPTION_AUTORECONNECT_DELAY]));
weechat_log_printf (" proxy . . . . . . . . . : '%s'",
weechat_config_string (ptr_remote->options[RELAY_REMOTE_OPTION_PROXY]));
weechat_log_printf (" tls_verify. . . . . . . : %s",
@@ -1045,6 +1160,8 @@ relay_remote_print_log ()
weechat_log_printf (" gnutls_sess . . . . . . : %p", ptr_remote->gnutls_sess);
relay_websocket_deflate_print_log (ptr_remote->ws_deflate, "");
weechat_log_printf (" version_ok. . . . . . . : %d", ptr_remote->version_ok);
weechat_log_printf (" reconnect_delay . . . . : %d", ptr_remote->reconnect_delay);
weechat_log_printf (" reconnect_start . . . . : %d", ptr_remote->reconnect_start);
weechat_log_printf (" synced. . . . . . . . . : %d", ptr_remote->synced);
weechat_log_printf (" partial_ws_frame. . . . : %p (%d bytes)",
ptr_remote->partial_ws_frame,
+7
View File
@@ -28,6 +28,8 @@ enum t_relay_remote_option
{
RELAY_REMOTE_OPTION_URL = 0, /* remote URL */
RELAY_REMOTE_OPTION_AUTOCONNECT, /* auto-connect */
RELAY_REMOTE_OPTION_AUTORECONNECT_DELAY, /* delay for auto-reconnect */
/* (0 = no auto-reconnect) */
RELAY_REMOTE_OPTION_PROXY, /* proxy used for remote (optional) */
RELAY_REMOTE_OPTION_TLS_VERIFY, /* check if the connection is trusted */
RELAY_REMOTE_OPTION_PASSWORD, /* password for remote relay */
@@ -61,6 +63,8 @@ struct t_relay_remote
int synced; /* 1 if synced with remote */
char *partial_ws_frame; /* part. binary websocket frame recv */
int partial_ws_frame_size; /* size of partial websocket frame */
int reconnect_delay; /* current reconnect delay (growing) */
time_t reconnect_start; /* this time + delay = reconn. time */
struct t_relay_remote *prev_remote;/* link to previous remote */
struct t_relay_remote *next_remote;/* link to next remote */
};
@@ -89,6 +93,7 @@ extern struct t_relay_remote *relay_remote_new_with_options (const char *name,
struct t_config_option **options);
extern struct t_relay_remote *relay_remote_new (const char *name,
const char *autoconnect,
const char *autoreconnect_delay,
const char *proxy,
const char *tls_verify,
const char *url,
@@ -101,7 +106,9 @@ extern int relay_remote_connect (struct t_relay_remote *remote);
extern void relay_remote_auto_connect ();
extern int relay_remote_send (struct t_relay_remote *remote, const char *json);
extern int relay_remote_disconnect (struct t_relay_remote *remote);
extern void relay_remote_reconnect_schedule (struct t_relay_remote *remote);
extern int relay_remote_reconnect (struct t_relay_remote *remote);
extern void relay_remote_timer ();
extern void relay_remote_disconnect_all ();
extern int relay_remote_rename (struct t_relay_remote *remote, const char *name);
extern void relay_remote_free (struct t_relay_remote *remote);
+19 -1
View File
@@ -238,6 +238,24 @@ relay_debug_dump_cb (const void *pointer, void *data,
return WEECHAT_RC_OK;
}
/*
* Timer callback, called each second.
*/
int
relay_timer_cb (const void *pointer, void *data, int remaining_calls)
{
/* make C compiler happy */
(void) pointer;
(void) data;
(void) remaining_calls;
relay_client_timer ();
relay_remote_timer ();
return WEECHAT_RC_OK;
}
/*
* Initializes relay plugin.
*/
@@ -300,7 +318,7 @@ weechat_plugin_init (struct t_weechat_plugin *plugin, int argc, char *argv[])
}
relay_hook_timer = weechat_hook_timer (1 * 1000, 0, 0,
&relay_client_timer_cb, NULL, NULL);
&relay_timer_cb, NULL, NULL);
return WEECHAT_RC_OK;
}