summaryrefslogtreecommitdiff
path: root/src/fe-common/core
diff options
context:
space:
mode:
authorAlexander Færøy <ahf@irssi.org>2010-03-21 20:06:10 +0000
committerahf <ahf@dbcabf3a-b0e7-0310-adc4-f8d773084564>2010-03-21 20:06:10 +0000
commite37be456cde14705ec67b8b6d44bd2293b203b0d (patch)
tree2a247820e03843b0fe51651f4bcf70bd526c2bb4 /src/fe-common/core
parent1a4c66568655de3a399d4b21d6a0e25acdcf2da8 (diff)
downloadirssi-e37be456cde14705ec67b8b6d44bd2293b203b0d.zip
Allow servers with the same server and port to be part of multiple networks. This should make life much easier for znc users. Thanks to Tykling, Bazerka and znx.
git-svn-id: file:///var/www/svn.irssi.org/SVN/irssi/trunk@5125 dbcabf3a-b0e7-0310-adc4-f8d773084564
Diffstat (limited to 'src/fe-common/core')
-rw-r--r--src/fe-common/core/fe-common-core.c7
-rw-r--r--src/fe-common/core/fe-server.c28
2 files changed, 25 insertions, 10 deletions
diff --git a/src/fe-common/core/fe-common-core.c b/src/fe-common/core/fe-common-core.c
index 2b88b946..dce6890e 100644
--- a/src/fe-common/core/fe-common-core.c
+++ b/src/fe-common/core/fe-common-core.c
@@ -346,10 +346,13 @@ static void autoconnect_servers(void)
if (rec->autoconnect &&
(rec->chatnet == NULL ||
gslist_find_icase_string(chatnets, rec->chatnet) == NULL)) {
- if (rec->chatnet != NULL)
+ if (rec->chatnet != NULL) {
chatnets = g_slist_append(chatnets, rec->chatnet);
+ str = g_strdup_printf("-network %s %s %d", rec->chatnet, rec->address, rec->port);
+ } else {
+ str = g_strdup_printf("%s %d", rec->address, rec->port);
+ }
- str = g_strdup_printf("%s %d", rec->address, rec->port);
signal_emit("command connect", 1, str);
g_free(str);
}
diff --git a/src/fe-common/core/fe-server.c b/src/fe-common/core/fe-server.c
index e5cce827..e4b32bdb 100644
--- a/src/fe-common/core/fe-server.c
+++ b/src/fe-common/core/fe-server.c
@@ -108,7 +108,7 @@ static void cmd_server_add(const char *data)
{
GHashTable *optlist;
SERVER_SETUP_REC *rec;
- char *addr, *portstr, *password, *value;
+ char *addr, *portstr, *password, *value, *chatnet;
void *free_arg;
int port;
@@ -119,7 +119,10 @@ static void cmd_server_add(const char *data)
if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
port = *portstr == '\0' ? DEFAULT_SERVER_ADD_PORT : atoi(portstr);
- rec = server_setup_find_port(addr, port);
+ chatnet = g_hash_table_lookup(optlist, "network");
+
+ rec = server_setup_find(addr, port, chatnet);
+
if (rec == NULL) {
rec = create_server_setup(optlist);
if (rec == NULL) {
@@ -194,21 +197,30 @@ static void cmd_server_add(const char *data)
cmd_params_free(free_arg);
}
-/* SYNTAX: SERVER REMOVE <address> [<port>] */
+/* SYNTAX: SERVER REMOVE <address> [<port>] [<network>] */
static void cmd_server_remove(const char *data)
{
SERVER_SETUP_REC *rec;
- char *addr, *port;
+ char *addr, *port, *chatnet;
void *free_arg;
- if (!cmd_get_params(data, &free_arg, 2, &addr, &port))
+ if (!cmd_get_params(data, &free_arg, 3, &addr, &port, &chatnet))
return;
if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
- if (*port == '\0')
- rec = server_setup_find(addr, -1, NULL);
+ if (*port == '\0') {
+ if (*chatnet == '\0')
+ rec = server_setup_find(addr, -1, NULL);
+ else
+ rec = server_setup_find(addr, -1, chatnet);
+ }
else
- rec = server_setup_find_port(addr, atoi(port));
+ {
+ if (*chatnet == '\0')
+ rec = server_setup_find(addr, atoi(port), NULL);
+ else
+ rec = server_setup_find(addr, atoi(port), chatnet);
+ }
if (rec == NULL)
printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, TXT_SETUPSERVER_NOT_FOUND, addr, port);