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) {
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;
+ if (g_hash_table_lookup(optlist, "noproxy")) rec->no_proxy = TRUE;
if (*password != '\0' && strcmp(password, "-") != 0) rec->password = g_strdup(password);
value = g_hash_table_lookup(optlist, "host");
if (*addr == '\0') cmd_param_error(CMDERR_NOT_ENOUGH_PARAMS);
if (*port == '\0')
- rec = server_setup_find(addr, -1);
+ rec = server_setup_find(addr, -1, NULL);
else
rec = server_setup_find_port(addr, atoi(port));
cmd_params_free(free_arg);
}
-static void cmd_server(const char *data, SERVER_REC *server, void *item)
+static void cmd_server(const char *data)
{
- GHashTable *optlist;
- char *addr;
- void *free_arg;
-
- if (*data == '\0') {
- if (servers == NULL && lookup_servers == NULL &&
- reconnects == NULL) {
- printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
- TXT_NO_CONNECTED_SERVERS);
- } else {
- print_servers();
- print_lookup_servers();
- print_reconnects();
- }
-
- signal_stop();
+ if (*data != '\0')
return;
- }
- if (g_strncasecmp(data, "add ", 4) == 0 ||
- g_strncasecmp(data, "remove ", 7) == 0 ||
- g_strcasecmp(data, "list") == 0 ||
- g_strncasecmp(data, "list ", 5) == 0) {
- command_runsub("server", data, server, item);
- signal_stop();
- return;
+ if (servers == NULL && lookup_servers == NULL &&
+ reconnects == NULL) {
+ printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
+ TXT_NO_CONNECTED_SERVERS);
+ } else {
+ print_servers();
+ print_lookup_servers();
+ print_reconnects();
}
+ signal_stop();
+}
+
+static void cmd_server_connect(const char *data)
+{
+ GHashTable *optlist;
+ char *addr;
+ void *free_arg;
+
if (!cmd_get_params(data, &free_arg, 1 | PARAM_FLAG_OPTIONS,
"connect", &optlist, &addr))
return;
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);
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);
}
if (msg == NULL) {
/* no message so this wasn't unexpected fail - send
connection_lost message instead */
- printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
+ printformat(server, NULL, MSGLEVEL_CLIENTNOTICE,
TXT_CONNECTION_LOST, server->connrec->address);
} else {
- printformat(NULL, NULL, MSGLEVEL_CLIENTERROR,
+ printformat(server, NULL, MSGLEVEL_CLIENTERROR,
TXT_CANT_CONNECT, server->connrec->address, server->connrec->port, msg);
}
}
{
g_return_if_fail(server != NULL);
- printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
+ printformat(server, NULL, MSGLEVEL_CLIENTNOTICE,
TXT_CONNECTION_LOST, server->connrec->address);
}
{
g_return_if_fail(server != NULL);
- printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
+ printformat(server, NULL, MSGLEVEL_CLIENTNOTICE,
TXT_SERVER_QUIT, server->connrec->address, msg);
}
{
g_return_if_fail(server != NULL);
- printformat(NULL, NULL, MSGLEVEL_CLIENTNOTICE,
- TXT_LAG_DISCONNECTED, server->connrec->address, time(NULL)-server->lag_sent);
+ printformat(server, NULL, MSGLEVEL_CLIENTNOTICE,
+ TXT_LAG_DISCONNECTED, server->connrec->address,
+ time(NULL)-server->lag_sent.tv_sec);
}
static void sig_server_reconnect_removed(RECONNECT_REC *reconnect)
void fe_server_init(void)
{
command_bind("server", NULL, (SIGNAL_FUNC) cmd_server);
+ 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 -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);
void fe_server_deinit(void)
{
command_unbind("server", (SIGNAL_FUNC) cmd_server);
+ 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);