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:
@@ -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
|
||||
{
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -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 ();
|
||||
|
||||
Reference in New Issue
Block a user