void relay_server_update_port (struct t_relay_server *server, int port) { if (port != server->port) { relay_server_close_socket (server); server->port = port; relay_server_create_socket (server); } }
struct t_relay_server * relay_server_new (const char *protocol_string, enum t_relay_protocol protocol, const char *protocol_args, int port, int ipv4, int ipv6, int ssl) { struct t_relay_server *new_server; if (!protocol_string) return NULL; if (relay_server_search_port (port)) { dogechat_printf (NULL, _("%s%s: error: port \"%d\" is already used"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME, port); return NULL; } new_server = malloc (sizeof (*new_server)); if (new_server) { new_server->protocol_string = strdup (protocol_string); new_server->protocol = protocol; new_server->protocol_args = (protocol_args) ? strdup (protocol_args) : NULL; new_server->port = port; new_server->ipv4 = ipv4; new_server->ipv6 = ipv6; new_server->ssl = ssl; new_server->sock = -1; new_server->hook_fd = NULL; new_server->start_time = 0; new_server->last_client_disconnect = 0; relay_server_create_socket (new_server); new_server->prev_server = NULL; new_server->next_server = relay_servers; if (relay_servers) relay_servers->prev_server = new_server; else last_relay_server = new_server; relay_servers = new_server; } else { dogechat_printf (NULL, _("%s%s: not enough memory for listening on new port"), dogechat_prefix ("error"), RELAY_PLUGIN_NAME); } return new_server; }
struct t_relay_server * relay_server_new (enum t_relay_protocol protocol, const char *protocol_args, int port) { struct t_relay_server *new_server; if (relay_server_search_port (port)) { weechat_printf (NULL, _("%s%s: error: port \"%d\" is already used"), weechat_prefix ("error"), RELAY_PLUGIN_NAME, port); return NULL; } new_server = malloc (sizeof (*new_server)); if (new_server) { new_server->protocol = protocol; new_server->protocol_args = (protocol_args) ? strdup (protocol_args) : NULL; new_server->port = port; new_server->sock = -1; new_server->hook_fd = NULL; new_server->start_time = 0; if (!relay_server_create_socket (new_server)) { if (new_server->protocol_args) free (new_server->protocol_args); free (new_server); return NULL; } new_server->prev_server = NULL; new_server->next_server = relay_servers; if (relay_servers) relay_servers->prev_server = new_server; else last_relay_server = new_server; relay_servers = new_server; } else { weechat_printf (NULL, _("%s%s: not enough memory for listening on new port"), weechat_prefix ("error"), RELAY_PLUGIN_NAME); } return new_server; }
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); } }
void relay_config_change_network_bind_address_cb (void *data, struct t_config_option *option) { struct t_relay_server *ptr_server; /* make C compiler happy */ (void) data; (void) option; for (ptr_server = relay_servers; ptr_server; ptr_server = ptr_server->next_server) { relay_server_close_socket (ptr_server); relay_server_create_socket (ptr_server); } }
void relay_config_change_network_ipv6_cb (void *data, struct t_config_option *option) { struct t_relay_server *ptr_server; /* make C compiler happy */ (void) data; (void) option; for (ptr_server = relay_servers; ptr_server; ptr_server = ptr_server->next_server) { relay_server_get_protocol_args (ptr_server->protocol_string, &ptr_server->ipv4, &ptr_server->ipv6, NULL, NULL, NULL); relay_server_close_socket (ptr_server); relay_server_create_socket (ptr_server); } }
void relay_server_update_path (struct t_relay_server *server, const char *path) { char *new_path; new_path = weechat_string_eval_path_home (path, NULL, NULL, NULL); if (!new_path) return; if (strcmp (new_path, server->path) != 0) { relay_server_close_socket (server); free (server->path); server->path = strdup (new_path); server->port = -1; relay_server_create_socket (server); } free (new_path); }
struct t_relay_server * relay_server_new (const char *protocol_string, enum t_relay_protocol protocol, const char *protocol_args, int port, const char *path, int ipv4, int ipv6, int ssl, int unix_socket) { struct t_relay_server *new_server, *dup_server; if (!protocol_string) return NULL; /* look for duplicate ports/paths */ dup_server = (unix_socket) ? relay_server_search_path (path) : relay_server_search_port (port); if (dup_server) { if (unix_socket) { weechat_printf (NULL, _("%s%s: error: path \"%s\" is already used"), weechat_prefix ("error"), RELAY_PLUGIN_NAME, path); } else { weechat_printf (NULL, _("%s%s: error: port \"%d\" is already used"), weechat_prefix ("error"), RELAY_PLUGIN_NAME, port); } return NULL; } new_server = malloc (sizeof (*new_server)); if (new_server) { new_server->protocol_string = strdup (protocol_string); new_server->protocol = protocol; new_server->protocol_args = (protocol_args) ? strdup (protocol_args) : NULL; new_server->port = port; new_server->path = weechat_string_eval_path_home (path, NULL, NULL, NULL); new_server->ipv4 = ipv4; new_server->ipv6 = ipv6; new_server->ssl = ssl; new_server->unix_socket = unix_socket; new_server->sock = -1; new_server->hook_fd = NULL; new_server->start_time = 0; new_server->last_client_disconnect = 0; relay_server_create_socket (new_server); new_server->prev_server = NULL; new_server->next_server = relay_servers; if (relay_servers) relay_servers->prev_server = new_server; else last_relay_server = new_server; relay_servers = new_server; } else { weechat_printf (NULL, _("%s%s: not enough memory for listening on new port"), weechat_prefix ("error"), RELAY_PLUGIN_NAME); } return new_server; }