summaryrefslogtreecommitdiff
path: root/src/common
diff options
context:
space:
mode:
authorSebastien Helleu <flashcode@flashtux.org>2004-12-27 16:22:39 +0000
committerSebastien Helleu <flashcode@flashtux.org>2004-12-27 16:22:39 +0000
commitf4f2ec3668624b8cf29b9dab734f9069d90a8fec (patch)
tree1559d5284d4d839044759bbafc7f5a4b60c62d55 /src/common
parent486e55be0255d22a2530068d2a684273003c944e (diff)
downloadweechat-f4f2ec3668624b8cf29b9dab734f9069d90a8fec.zip
auto-reconnection to server (new options: server_autoreconnect (on/off), server_autoreconnect_delay (in seconds)), disconnections are now managed without problem by WeeChat
Diffstat (limited to 'src/common')
-rw-r--r--src/common/command.c24
-rw-r--r--src/common/weechat.c6
-rw-r--r--src/common/weeconfig.c15
3 files changed, 30 insertions, 15 deletions
diff --git a/src/common/command.c b/src/common/command.c
index 1c2af058c..6a5a1a663 100644
--- a/src/common/command.c
+++ b/src/common/command.c
@@ -1026,7 +1026,6 @@ int
weechat_cmd_connect (int argc, char **argv)
{
t_irc_server *ptr_server;
- t_irc_channel *ptr_channel;
/* make gcc happy */
(void) argc;
@@ -1048,13 +1047,9 @@ weechat_cmd_connect (int argc, char **argv)
}
if (server_connect (ptr_server))
{
+ ptr_server->reconnect_start = 0;
+ ptr_server->reconnect_join = (ptr_server->channels) ? 1 : 0;
irc_login (ptr_server);
- for (ptr_channel = ptr_server->channels; ptr_channel;
- ptr_channel = ptr_channel->next_channel)
- {
- if (ptr_channel->type == CHAT_CHANNEL)
- server_sendf (ptr_server, "JOIN %s\r\n", ptr_channel->name);
- }
}
}
else
@@ -1082,14 +1077,17 @@ weechat_cmd_disconnect (int argc, char **argv)
ptr_server = server_search (argv[0]);
if (ptr_server)
{
- if (!ptr_server->is_connected)
+ if ((!ptr_server->is_connected) && (ptr_server->reconnect_start == 0))
{
- gui_printf (NULL,
+ gui_printf (ptr_server->buffer,
_("%s not connected to server \"%s\"!\n"),
WEECHAT_ERROR, argv[0]);
return -1;
}
- server_disconnect (ptr_server);
+ if (ptr_server->reconnect_start > 0)
+ gui_printf (ptr_server->buffer,
+ _("Auto-reconnection is cancelled\n"));
+ server_disconnect (ptr_server, 0);
gui_draw_buffer_status (gui_current_window->buffer, 1);
}
else
@@ -1603,8 +1601,10 @@ weechat_cmd_server (int argc, char **argv)
}
/* create new server */
- new_server = server_new (server.name, server.autoconnect, 0,
- server.address, server.port, server.password,
+ new_server = server_new (server.name, server.autoconnect,
+ server.autoreconnect,
+ server.autoreconnect_delay,
+ 0, server.address, server.port, server.password,
server.nick1, server.nick2, server.nick3,
server.username, server.realname,
server.command, 1, server.autojoin, 1);
diff --git a/src/common/weechat.c b/src/common/weechat.c
index c22d8201e..6d424a17a 100644
--- a/src/common/weechat.c
+++ b/src/common/weechat.c
@@ -228,8 +228,10 @@ wee_parse_args (int argc, char *argv[])
}
else
{
- if (!server_new (server_tmp.name, 0, 1,
- server_tmp.address, server_tmp.port,
+ if (!server_new (server_tmp.name, server_tmp.autoconnect,
+ server_tmp.autoreconnect,
+ server_tmp.autoreconnect_delay,
+ 1, server_tmp.address, server_tmp.port,
server_tmp.password, server_tmp.nick1,
server_tmp.nick2, server_tmp.nick3,
NULL, NULL, NULL, 0, server_tmp.autojoin, 1))
diff --git a/src/common/weeconfig.c b/src/common/weeconfig.c
index 7569b7079..e3c0ca190 100644
--- a/src/common/weeconfig.c
+++ b/src/common/weeconfig.c
@@ -534,6 +534,14 @@ t_config_option weechat_options_server[] =
N_("automatically connect to server when WeeChat is starting"),
OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
NULL, NULL, &(cfg_server.autoconnect), NULL, NULL },
+ { "server_autoreconnect", N_("automatically reconnect to server"),
+ N_("automatically reconnect to server when disconnected"),
+ OPTION_TYPE_BOOLEAN, BOOL_FALSE, BOOL_TRUE, BOOL_TRUE,
+ NULL, NULL, &(cfg_server.autoreconnect), NULL, NULL },
+ { "server_autoreconnect_delay", N_("delay before trying again to reconnect"),
+ N_("delay (in deconds) before trying again to reconnect to server"),
+ OPTION_TYPE_INT, 0, 65535, 30,
+ NULL, NULL, &(cfg_server.autoreconnect_delay), NULL, NULL },
{ "server_address", N_("server address or hostname"),
N_("IP address or hostname of IRC server"),
OPTION_TYPE_STRING, 0, 0, 0,
@@ -815,7 +823,8 @@ config_allocate_server (char *filename, int line_number)
return 0;
}
if (!server_new (cfg_server.name,
- cfg_server.autoconnect, 0, cfg_server.address, cfg_server.port,
+ cfg_server.autoconnect, cfg_server.autoreconnect,
+ cfg_server.autoreconnect_delay, 0, cfg_server.address, cfg_server.port,
cfg_server.password, cfg_server.nick1, cfg_server.nick2,
cfg_server.nick3, cfg_server.username, cfg_server.realname,
cfg_server.command, cfg_server.command_delay, cfg_server.autojoin,
@@ -1374,6 +1383,10 @@ config_write (char *config_name)
fprintf (file, "server_name=%s\n", ptr_server->name);
fprintf (file, "server_autoconnect=%s\n",
(ptr_server->autoconnect) ? "on" : "off");
+ fprintf (file, "server_autoreconnect=%s\n",
+ (ptr_server->autoreconnect) ? "on" : "off");
+ fprintf (file, "server_autoreconnect_delay=%d\n",
+ ptr_server->autoreconnect_delay);
fprintf (file, "server_address=%s\n", ptr_server->address);
fprintf (file, "server_port=%d\n", ptr_server->port);
fprintf (file, "server_password=%s\n",