diff --git a/docs/manual.txt b/docs/manual.txt index f51d3cf7..7065cfb8 100644 --- a/docs/manual.txt +++ b/docs/manual.txt @@ -417,20 +417,34 @@ 5.4 Server settings - /SERVER -add [-auto] [-ircnet ] [-host ] - [-cmdspeed ] [-cmdmax ]
- [ [ []]] + /SERVER -add [-auto | -noauto] [-ircnet ] [-host ] + [-cmdspeed ] [-cmdmax ] [-port ] +
[ []] - -auto: Automatically connect to server at startup + -auto: Automatically connect to server at startup (default) + -noauto: Don't connect to server at startup -ircnet: Specify what IRC network this server belongs to -host: Specify what host name to use, if you have multiple -cmdspeed: Same as /SET cmd_queue_speed, see section 3.1 -cmdmax: Same as /SET cmd_max_at_once, see section 3.1 + -port: This is pretty much like the port argument later, except + this can be used to modify existing server's port. /SERVER -remove
[] /SERVER -list + Servers are identified by their name and port. You can have multiple + entries for the same server name but in different ports. This is + useful for IRC proxies, in one port you could have IRCNet proxy, + another port would have EFNet, etc. + + If you wish to change existing server's port to something else, use + -port command. For example if you had irc.server.org in port 6667 + and you wanted to change it to port 6668, use command: + + /SERVER -add -port 6668 irc.server.org 6667 + After connected to server, Irssi can automatically change your user mode. You can set it with /SET usermode , default is +i. diff --git a/src/fe-common/irc/fe-irc-server.c b/src/fe-common/irc/fe-irc-server.c index 30e09886..ee0978d7 100644 --- a/src/fe-common/irc/fe-irc-server.c +++ b/src/fe-common/irc/fe-irc-server.c @@ -81,14 +81,14 @@ static void print_reconnects(void) static void server_add(const char *data) { SETUP_SERVER_REC *rec; - char *params, *args, *ircnet, *host, *cmdspeed, *cmdmax; - char *addr, *portstr, *password, *nick; + char *params, *args, *ircnet, *host, *cmdspeed, *cmdmax, *portarg; + char *addr, *portstr, *password; int port; - args = "ircnet host cmdspeed cmdmax"; + args = "ircnet host cmdspeed cmdmax port"; params = cmd_get_params(data, 9 | PARAM_FLAG_MULTIARGS, &args, &ircnet, &host, &cmdspeed, &cmdmax, - &addr, &portstr, &password, &nick); + &portarg, &addr, &portstr, &password); if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS); port = *portstr == '\0' ? 6667 : atoi(portstr); @@ -98,17 +98,19 @@ static void server_add(const char *data) rec->address = g_strdup(addr); rec->port = port; } else { - g_free_and_null(rec->ircnet); - g_free_and_null(rec->password); - g_free_and_null(rec->own_host); + if (*portarg != '\0') rec->port = atoi(portarg); + if (stristr(args, "-ircnet")) g_free_and_null(rec->ircnet); + if (*password != '\0') g_free_and_null(rec->password); + if (stristr(args, "-host")) g_free_and_null(rec->own_host); } - rec->autoconnect = stristr(args, "-auto") != NULL; + if (stristr(args, "-auto")) rec->autoconnect = TRUE; + if (stristr(args, "-noauto")) rec->autoconnect = FALSE; if (*ircnet != '\0') rec->ircnet = g_strdup(ircnet); - if (*password != '\0') rec->password = g_strdup(password); + if (*password != '\0' && strcmp(password, "-") != 0) rec->password = g_strdup(password); if (*host != '\0') rec->own_host = g_strdup(host); - rec->cmd_queue_speed = atoi(cmdspeed); - rec->max_cmds_at_once = atoi(cmdmax); + if (*cmdspeed != '\0') rec->cmd_queue_speed = atoi(cmdspeed); + if (*cmdmax != '\0') rec->max_cmds_at_once = atoi(cmdmax); server_setup_add(rec); printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE, IRCTXT_SETUPSERVER_ADDED, addr, port); @@ -180,7 +182,7 @@ static void cmd_server(const char *data) return; } - args = "ircnet host"; + args = "ircnet host"; /* should be same as in connect_server() in src/irc/core/irc-commands.c */ params = cmd_get_params(data, 4 | PARAM_FLAG_MULTIARGS, &args, &ircnetarg, &hostarg, &addr); diff --git a/src/irc/core/server-setup.c b/src/irc/core/server-setup.c index 191d4b34..324a4575 100644 --- a/src/irc/core/server-setup.c +++ b/src/irc/core/server-setup.c @@ -296,7 +296,7 @@ void server_setup_add(SETUP_SERVER_REC *rec) { if (g_slist_find(setupservers, rec) != NULL) { setupserver_config_remove(rec); - setupservers = g_slist_append(setupservers, rec); + setupservers = g_slist_remove(setupservers, rec); } setupservers = g_slist_append(setupservers, rec);