Added SILC Thread Queue API
[crypto.git] / apps / irssi / src / fe-common / core / fe-server.c
index d8f9d13725960836612abdc6a46ca48c2befaaa6..5ecacbbc871f49b8d25196a74838fca4ebaac303 100644 (file)
@@ -117,7 +117,7 @@ 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);
 
        rec = server_setup_find_port(addr, port);
        if (rec == NULL) {
@@ -144,6 +144,35 @@ static void cmd_server_add(const char *data)
         else if (g_hash_table_lookup(optlist, "4"))
                rec->family = AF_INET;
 
+       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;
@@ -226,6 +255,17 @@ static void cmd_server_connect(const char *data)
        cmd_params_free(free_arg);
 }
 
+static void server_command(const char *data, SERVER_REC *server,
+                          WI_ITEM_REC *item)
+{
+       if (server == NULL) {
+               /* this command accepts non-connected server too */
+               server = active_win->connect_server;
+       }
+
+       signal_continue(3, data, server, item);
+}
+
 static void sig_server_looking(SERVER_REC *server)
 {
        g_return_if_fail(server != NULL);
@@ -238,10 +278,15 @@ static void sig_server_connecting(SERVER_REC *server, IPADDR *ip)
        char ipaddr[MAX_IP_LEN];
 
        g_return_if_fail(server != NULL);
-       g_return_if_fail(ip != NULL);
 
-       net_ip2host(ip, ipaddr);
-       printformat(server, NULL, MSGLEVEL_CLIENTNOTICE, TXT_CONNECTING,
+       if (ip == NULL)
+               ipaddr[0] = '\0';
+       else
+               net_ip2host(ip, ipaddr);
+
+       printformat(server, NULL, MSGLEVEL_CLIENTNOTICE,
+                   !server->connrec->reconnecting ?
+                   TXT_CONNECTING : TXT_RECONNECTING,
                    server->connrec->address, ipaddr, server->connrec->port);
 }
 
@@ -324,7 +369,9 @@ void fe_server_init(void)
        command_bind("server connect", NULL, (SIGNAL_FUNC) cmd_server_connect);
        command_bind("server add", NULL, (SIGNAL_FUNC) cmd_server_add);
        command_bind("server remove", NULL, (SIGNAL_FUNC) cmd_server_remove);
-       command_set_options("server add", "4 6 auto noauto proxy noproxy -host -port");
+       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 +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);
@@ -346,6 +393,8 @@ void fe_server_deinit(void)
        command_unbind("server connect", (SIGNAL_FUNC) cmd_server_connect);
        command_unbind("server add", (SIGNAL_FUNC) cmd_server_add);
        command_unbind("server remove", (SIGNAL_FUNC) cmd_server_remove);
+       command_unbind("server", (SIGNAL_FUNC) server_command);
+       command_unbind("disconnect", (SIGNAL_FUNC) server_command);
 
        signal_remove("server looking", (SIGNAL_FUNC) sig_server_looking);
        signal_remove("server connecting", (SIGNAL_FUNC) sig_server_connecting);