Merge Irssi 0.8.16-rc1
[silc.git] / apps / irssi / src / fe-common / core / fe-server.c
index f452d0a14d1aeb1874bd9eb1bc5c089d8d934215..e4b32bdbbe9826e7683875e90a255039bc275823 100644 (file)
@@ -13,9 +13,9 @@
     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
     GNU General Public License for more details.
 
-    You should have received a copy of the GNU General Public License
-    along with this program; if not, write to the Free Software
-    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+    You should have received a copy of the GNU General Public License along
+    with this program; if not, write to the Free Software Foundation, Inc.,
+    51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
 */
 
 #include "module.h"
@@ -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;
 
@@ -117,9 +117,12 @@ static void cmd_server_add(const char *data)
                return;
 
        if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
-       port = *portstr == '\0' ? 6667 : atoi(portstr);
+       port = *portstr == '\0' ? DEFAULT_SERVER_ADD_PORT : atoi(portstr);
+
+       chatnet = g_hash_table_lookup(optlist, "network");
+
+       rec = server_setup_find(addr, port, chatnet);
 
-       rec = server_setup_find_port(addr, port);
        if (rec == NULL) {
                rec = create_server_setup(optlist);
                if (rec == NULL) {
@@ -147,6 +150,32 @@ static void cmd_server_add(const char *data)
        if (g_hash_table_lookup(optlist, "ssl"))
                rec->use_ssl = TRUE;
 
+       value = g_hash_table_lookup(optlist, "ssl_cert");
+       if (value != NULL && *value != '\0')
+               rec->ssl_cert = g_strdup(value);
+
+       value = g_hash_table_lookup(optlist, "ssl_pkey");
+       if (value != NULL && *value != '\0')
+               rec->ssl_pkey = g_strdup(value);
+
+       if (g_hash_table_lookup(optlist, "ssl_verify"))
+               rec->ssl_verify = TRUE;
+
+       value = g_hash_table_lookup(optlist, "ssl_cafile");
+       if (value != NULL && *value != '\0')
+               rec->ssl_cafile = g_strdup(value);
+
+       value = g_hash_table_lookup(optlist, "ssl_capath");
+       if (value != NULL && *value != '\0')
+               rec->ssl_capath = g_strdup(value);
+
+       if ((rec->ssl_cafile != NULL && rec->ssl_cafile[0] != '\0')
+       ||  (rec->ssl_capath != NULL && rec->ssl_capath[0] != '\0'))
+               rec->ssl_verify = TRUE;
+
+       if ((rec->ssl_cert != NULL && rec->ssl_cert[0] != '\0') || rec->ssl_verify == TRUE)
+               rec->use_ssl = TRUE;
+
        if (g_hash_table_lookup(optlist, "auto")) rec->autoconnect = TRUE;
        if (g_hash_table_lookup(optlist, "noauto")) rec->autoconnect = FALSE;
        if (g_hash_table_lookup(optlist, "proxy")) rec->no_proxy = FALSE;
@@ -168,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);
@@ -258,7 +296,9 @@ static void sig_server_connecting(SERVER_REC *server, IPADDR *ip)
        else
                net_ip2host(ip, ipaddr);
 
-       printformat(server, NULL, MSGLEVEL_CLIENTNOTICE, TXT_CONNECTING,
+       printformat(server, NULL, MSGLEVEL_CLIENTNOTICE,
+                   !server->connrec->reconnecting ?
+                   TXT_CONNECTING : TXT_RECONNECTING,
                    server->connrec->address, ipaddr, server->connrec->port);
 }
 
@@ -343,7 +383,7 @@ void fe_server_init(void)
        command_bind("server remove", NULL, (SIGNAL_FUNC) cmd_server_remove);
        command_bind_first("server", NULL, (SIGNAL_FUNC) server_command);
        command_bind_first("disconnect", NULL, (SIGNAL_FUNC) server_command);
-       command_set_options("server add", "4 6 ssl auto noauto proxy noproxy -host -port");
+       command_set_options("server add", "4 6 ssl +ssl_cert +ssl_pkey ssl_verify +ssl_cafile +ssl_capath auto noauto proxy noproxy -host -port");
 
        signal_add("server looking", (SIGNAL_FUNC) sig_server_looking);
        signal_add("server connecting", (SIGNAL_FUNC) sig_server_connecting);