1
0
mirror of https://github.com/weechat/weechat.git synced 2026-06-29 22:36:38 +02:00

relay: fix update of port/path variables in relay server when options relay.port.* and relay.path.* are changed with /set

This commit is contained in:
Sébastien Helleu
2019-05-12 21:30:02 +02:00
parent eacc08f2e1
commit ade52cdc7d
3 changed files with 67 additions and 2 deletions
+43 -2
View File
@@ -576,6 +576,47 @@ relay_config_check_path_cb (const void *pointer, void *data,
return 1;
}
/*
* Callback for changes on options in section "path".
*/
void
relay_config_change_path_cb (const void *pointer, void *data,
struct t_config_option *option)
{
struct t_relay_server *ptr_server;
/* make C compiler happy */
(void) pointer;
(void) data;
ptr_server = relay_server_search (weechat_config_option_get_pointer (option, "name"));
if (ptr_server)
{
relay_server_update_path (ptr_server,
(const char *)weechat_config_option_get_pointer (option, "value"));
}
}
/*
* Callback called when an option is deleted in section "path".
*/
void
relay_config_delete_path_cb (const void *pointer, void *data,
struct t_config_option *option)
{
struct t_relay_server *ptr_server;
/* make C compiler happy */
(void) pointer;
(void) data;
ptr_server = relay_server_search (weechat_config_option_get_pointer (option, "name"));
if (ptr_server)
relay_server_free (ptr_server);
}
/*
* Callback for changes on options in section "port".
*/
@@ -726,8 +767,8 @@ relay_config_create_option_port_path (const void *pointer, void *data,
option_name, "string", NULL,
NULL, 0, 0, "", value, 0,
&relay_config_check_path_cb, NULL, NULL,
&relay_config_change_port_cb, NULL, NULL,
&relay_config_delete_port_cb, NULL, NULL);
&relay_config_change_path_cb, NULL, NULL,
&relay_config_delete_path_cb, NULL, NULL);
}
else
{
+22
View File
@@ -741,6 +741,23 @@ relay_server_new (const char *protocol_string, enum t_relay_protocol protocol,
return new_server;
}
/*
* Updates path in a server.
*/
void
relay_server_update_path (struct t_relay_server *server, const char *path)
{
if (strcmp (path, server->path) != 0)
{
relay_server_close_socket (server);
free (server->path);
server->path = strdup (path);
server->port = -1;
relay_server_create_socket (server);
}
}
/*
* Updates port in a server.
*/
@@ -748,10 +765,15 @@ relay_server_new (const char *protocol_string, enum t_relay_protocol protocol,
void
relay_server_update_port (struct t_relay_server *server, int port)
{
char str_path[128];
if (port != server->port)
{
relay_server_close_socket (server);
server->port = port;
snprintf (str_path, sizeof (str_path), "%d", port);
free (server->path);
server->path = strdup (str_path);
relay_server_create_socket (server);
}
}
+2
View File
@@ -67,6 +67,8 @@ extern struct t_relay_server *relay_server_new (const char *protocol_string,
int port, const char *path,
int ipv4, int ipv6,
int ssl, int unix_socket);
extern void relay_server_update_path (struct t_relay_server *server,
const char *path);
extern void relay_server_update_port (struct t_relay_server *server, int port);
extern void relay_server_free (struct t_relay_server *server);
extern void relay_server_free_all ();