diff --git a/ChangeLog b/ChangeLog index 7a39c0404..98dbbbb06 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,12 +1,14 @@ WeeChat ChangeLog ================= FlashCode -v0.3.3-dev, 2010-04-20 +v0.3.3-dev, 2010-04-21 Version 0.3.3 (under dev!) -------------------------- +* irc: add new options irc.network.autoreconnect_delay_growing and + irc.network.autoreconnect_delay_max (task #10338) * irc: add new option irc.color.item_buffer_name_ssl (task #10339) * irc: try other nick when connecting to server and receiving message 437 (nick unavailable) diff --git a/doc/en/autogen/user/irc_options.txt b/doc/en/autogen/user/irc_options.txt index c848346ac..3a8e0864a 100644 --- a/doc/en/autogen/user/irc_options.txt +++ b/doc/en/autogen/user/irc_options.txt @@ -193,6 +193,16 @@ ** type: integer ** values: 0 .. 60 (default value: 2) +* *irc.network.autoreconnect_delay_growing* +** description: growing factor for autoreconnect delay to server (1 = always same delay, 2 = delay*2 for each retry, ..) +** type: integer +** values: 1 .. 100 (default value: 2) + +* *irc.network.autoreconnect_delay_max* +** description: maximum autoreconnect delay to server (in seconds, 0 = no maximum) +** type: integer +** values: 0 .. 86400 (default value: 1800) + * *irc.network.away_check* ** description: interval between two checks for away (in minutes, 0 = never check) ** type: integer @@ -271,7 +281,7 @@ * *irc.server_default.autoreconnect_delay* ** description: delay (in seconds) before trying again to reconnect to server ** type: integer -** values: 0 .. 65535 (default value: 30) +** values: 1 .. 65535 (default value: 10) * *irc.server_default.autorejoin* ** description: automatically rejoin channels after kick diff --git a/doc/fr/autogen/user/irc_options.txt b/doc/fr/autogen/user/irc_options.txt index e074f273b..096063e50 100644 --- a/doc/fr/autogen/user/irc_options.txt +++ b/doc/fr/autogen/user/irc_options.txt @@ -193,6 +193,16 @@ ** type: entier ** valeurs: 0 .. 60 (valeur par défaut: 2) +* *irc.network.autoreconnect_delay_growing* +** description: facteur de croissance du délai d'autoreconnection au serveur (1 = toujours le même délai, 2 = délai*2 pour chaque tentative, etc...) +** type: entier +** valeurs: 1 .. 100 (valeur par défaut: 2) + +* *irc.network.autoreconnect_delay_max* +** description: délai maximum d'autoreconnection au serveur (en secondes, 0 = pas de maximum) +** type: entier +** valeurs: 0 .. 86400 (valeur par défaut: 1800) + * *irc.network.away_check* ** description: intervalle entre deux vérifications des absences (en minutes, 0 = ne jamais vérifier) ** type: entier @@ -271,7 +281,7 @@ * *irc.server_default.autoreconnect_delay* ** description: délai (en secondes) avant de tenter une reconnexion au serveur ** type: entier -** valeurs: 0 .. 65535 (valeur par défaut: 30) +** valeurs: 1 .. 65535 (valeur par défaut: 10) * *irc.server_default.autorejoin* ** description: rejoindre automatiquement les canaux après un "kick" diff --git a/doc/it/autogen/user/irc_options.txt b/doc/it/autogen/user/irc_options.txt index ddbe1522e..6a20bd9d6 100644 --- a/doc/it/autogen/user/irc_options.txt +++ b/doc/it/autogen/user/irc_options.txt @@ -193,6 +193,16 @@ ** tipo: intero ** valori: 0 .. 60 (valore predefinito: 2) +* *irc.network.autoreconnect_delay_growing* +** descrizione: growing factor for autoreconnect delay to server (1 = always same delay, 2 = delay*2 for each retry, ..) +** tipo: intero +** valori: 1 .. 100 (valore predefinito: 2) + +* *irc.network.autoreconnect_delay_max* +** descrizione: maximum autoreconnect delay to server (in seconds, 0 = no maximum) +** tipo: intero +** valori: 0 .. 86400 (valore predefinito: 1800) + * *irc.network.away_check* ** descrizione: intervallo tra le due verifiche per l'assenza (in minuti, 0 = nessun check) ** tipo: intero @@ -271,7 +281,7 @@ * *irc.server_default.autoreconnect_delay* ** descrizione: ritardo (in secondi) prima di effettuare una nuova connessione al server ** tipo: intero -** valori: 0 .. 65535 (valore predefinito: 30) +** valori: 1 .. 65535 (valore predefinito: 10) * *irc.server_default.autorejoin* ** descrizione: rientra automaticamente nei canali dopo il kick diff --git a/po/cs.po b/po/cs.po index 74dbde3e0..f49191f9f 100644 --- a/po/cs.po +++ b/po/cs.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.3.3-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2010-04-20 22:08+0200\n" +"POT-Creation-Date: 2010-04-21 23:20+0200\n" "PO-Revision-Date: 2010-04-18 10:50+0200\n" "Last-Translator: Jiri Golembiovsky \n" "Language-Team: weechat-dev \n" @@ -4493,6 +4493,14 @@ msgstr "barva módů kanálu, blízko jména kanálu" msgid "color for buffer name when connected using SSL to server" msgstr "%s%s: nejste připojen k serveru" +msgid "" +"growing factor for autoreconnect delay to server (1 = always same delay, 2 = " +"delay*2 for each retry, ..)" +msgstr "" + +msgid "maximum autoreconnect delay to server (in seconds, 0 = no maximum)" +msgstr "" + msgid "" "timeout (in seconds) between TCP connection to server and message 001 " "received, if this timeout is reached before 001 message is received, WeeChat " @@ -5076,6 +5084,10 @@ msgstr "%s%s: vypršel čas pro sasl autentizaci" msgid "%s: lag is high, disconnecting from server..." msgstr "%s: zpoždění je veliké, odpojuji se od serveru..." +#, fuzzy, c-format +msgid "%s: reconnecting to server in %d %s, %d %s" +msgstr "%s: navazuji nové spojení se serverem za %d %s" + #, c-format msgid "%s: reconnecting to server in %d %s" msgstr "%s: navazuji nové spojení se serverem za %d %s" diff --git a/po/de.po b/po/de.po index 9a1e2350c..d67bfa013 100644 --- a/po/de.po +++ b/po/de.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.3.3-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2010-04-20 22:08+0200\n" +"POT-Creation-Date: 2010-04-21 23:20+0200\n" "PO-Revision-Date: 2010-04-18 10:50+0200\n" "Last-Translator: Nils G \n" "Language-Team: weechat-dev \n" @@ -4664,6 +4664,14 @@ msgstr "Farbe der Channel-Modes (neben dem Channelnamen)" msgid "color for buffer name when connected using SSL to server" msgstr "%s%s: Es besteht keine Verbindung zum Server" +msgid "" +"growing factor for autoreconnect delay to server (1 = always same delay, 2 = " +"delay*2 for each retry, ..)" +msgstr "" + +msgid "maximum autoreconnect delay to server (in seconds, 0 = no maximum)" +msgstr "" + msgid "" "timeout (in seconds) between TCP connection to server and message 001 " "received, if this timeout is reached before 001 message is received, WeeChat " @@ -5248,6 +5256,10 @@ msgstr "%s%s: Zeitüberschreitung bei SASL Authentifizierung" msgid "%s: lag is high, disconnecting from server..." msgstr "%s: Lag ist zu hoch, die Verbindung wird getrennt..." +#, fuzzy, c-format +msgid "%s: reconnecting to server in %d %s, %d %s" +msgstr "%s: Verbinde erneut zum Server in %d %s" + #, c-format msgid "%s: reconnecting to server in %d %s" msgstr "%s: Verbinde erneut zum Server in %d %s" diff --git a/po/es.po b/po/es.po index 1acd466e0..784295213 100644 --- a/po/es.po +++ b/po/es.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.3.3-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2010-04-20 22:08+0200\n" +"POT-Creation-Date: 2010-04-21 23:20+0200\n" "PO-Revision-Date: 2010-04-18 10:50+0200\n" "Last-Translator: Elián Hanisch \n" "Language-Team: weechat-dev \n" @@ -4560,6 +4560,14 @@ msgstr "color para los modos del canal, junto al nombre del canal" msgid "color for buffer name when connected using SSL to server" msgstr "%s%s: no estas conectado a ningún servidor" +msgid "" +"growing factor for autoreconnect delay to server (1 = always same delay, 2 = " +"delay*2 for each retry, ..)" +msgstr "" + +msgid "maximum autoreconnect delay to server (in seconds, 0 = no maximum)" +msgstr "" + msgid "" "timeout (in seconds) between TCP connection to server and message 001 " "received, if this timeout is reached before 001 message is received, WeeChat " @@ -5140,6 +5148,10 @@ msgstr "%s%s: la autenticación SASL agotó el tiempo de espera" msgid "%s: lag is high, disconnecting from server..." msgstr "%s: el retraso es alto, desconectando del servidor..." +#, fuzzy, c-format +msgid "%s: reconnecting to server in %d %s, %d %s" +msgstr "%s: reconectando al servidor en %d %s" + #, c-format msgid "%s: reconnecting to server in %d %s" msgstr "%s: reconectando al servidor en %d %s" diff --git a/po/fr.po b/po/fr.po index 489bddbf8..b1f7e3827 100644 --- a/po/fr.po +++ b/po/fr.po @@ -6,8 +6,8 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.3.3-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2010-04-20 22:08+0200\n" -"PO-Revision-Date: 2010-04-20 22:03+0200\n" +"POT-Creation-Date: 2010-04-21 23:20+0200\n" +"PO-Revision-Date: 2010-04-21 22:17+0200\n" "Last-Translator: FlashCode \n" "Language-Team: weechat-dev \n" "MIME-Version: 1.0\n" @@ -4594,6 +4594,17 @@ msgid "color for buffer name when connected using SSL to server" msgstr "" "couleur pour le nom du tampon lorsque la connexion au serveur utilise SSL" +msgid "" +"growing factor for autoreconnect delay to server (1 = always same delay, 2 = " +"delay*2 for each retry, ..)" +msgstr "" +"facteur de croissance du délai d'autoreconnection au serveur (1 = toujours " +"le même délai, 2 = délai*2 pour chaque tentative, etc...)" + +msgid "maximum autoreconnect delay to server (in seconds, 0 = no maximum)" +msgstr "" +"délai maximum d'autoreconnection au serveur (en secondes, 0 = pas de maximum)" + msgid "" "timeout (in seconds) between TCP connection to server and message 001 " "received, if this timeout is reached before 001 message is received, WeeChat " @@ -5177,6 +5188,10 @@ msgstr "%s%s: délai d'authentification sasl dépassé" msgid "%s: lag is high, disconnecting from server..." msgstr "%s: le lag est élevé, déconnexion du serveur..." +#, c-format +msgid "%s: reconnecting to server in %d %s, %d %s" +msgstr "%s: reconnexion au serveur dans %d %s, %d %s" + #, c-format msgid "%s: reconnecting to server in %d %s" msgstr "%s: reconnexion au serveur dans %d %s" diff --git a/po/hu.po b/po/hu.po index a5d7c555e..ed3293816 100644 --- a/po/hu.po +++ b/po/hu.po @@ -12,7 +12,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.3.3-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2010-04-20 22:08+0200\n" +"POT-Creation-Date: 2010-04-21 23:20+0200\n" "PO-Revision-Date: 2010-04-18 10:51+0200\n" "Last-Translator: Andras Voroskoi \n" "Language-Team: weechat-dev \n" @@ -4311,6 +4311,14 @@ msgstr "szobanevek színe az eseményekben" msgid "color for buffer name when connected using SSL to server" msgstr "%s nincs csatlakozva szerverhez!\n" +msgid "" +"growing factor for autoreconnect delay to server (1 = always same delay, 2 = " +"delay*2 for each retry, ..)" +msgstr "" + +msgid "maximum autoreconnect delay to server (in seconds, 0 = no maximum)" +msgstr "" + msgid "" "timeout (in seconds) between TCP connection to server and message 001 " "received, if this timeout is reached before 001 message is received, WeeChat " @@ -4885,6 +4893,10 @@ msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n" msgid "%s: lag is high, disconnecting from server..." msgstr "%s túl nagy a késés(lag), lecsatlakozás a szerverről...\n" +#, fuzzy, c-format +msgid "%s: reconnecting to server in %d %s, %d %s" +msgstr "%s: Újracsatlakozás a szerverhez %d másodperc múlva\n" + #, fuzzy, c-format msgid "%s: reconnecting to server in %d %s" msgstr "%s: Újracsatlakozás a szerverhez %d másodperc múlva\n" diff --git a/po/it.po b/po/it.po index 8f532bf14..88fb162a2 100644 --- a/po/it.po +++ b/po/it.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: Weechat 0.3.3-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2010-04-20 22:08+0200\n" +"POT-Creation-Date: 2010-04-21 23:20+0200\n" "PO-Revision-Date: 2010-04-18 10:51+0200\n" "Last-Translator: Marco Paolone \n" "Language-Team: weechat-dev \n" @@ -4567,6 +4567,14 @@ msgstr "colore per le modalità dei canali, vicino ai nomi dei canali" msgid "color for buffer name when connected using SSL to server" msgstr "%s%s: non connesso al server" +msgid "" +"growing factor for autoreconnect delay to server (1 = always same delay, 2 = " +"delay*2 for each retry, ..)" +msgstr "" + +msgid "maximum autoreconnect delay to server (in seconds, 0 = no maximum)" +msgstr "" + msgid "" "timeout (in seconds) between TCP connection to server and message 001 " "received, if this timeout is reached before 001 message is received, WeeChat " @@ -5144,6 +5152,10 @@ msgstr "%s%s: timeout dell'autenticazione sasl" msgid "%s: lag is high, disconnecting from server..." msgstr "%s: ritardo eccessivo, disconnessione dal server..." +#, fuzzy, c-format +msgid "%s: reconnecting to server in %d %s, %d %s" +msgstr "%s: riconnessione al server tra %d %s" + #, c-format msgid "%s: reconnecting to server in %d %s" msgstr "%s: riconnessione al server tra %d %s" diff --git a/po/pl.po b/po/pl.po index 4e8805b6b..e78823620 100644 --- a/po/pl.po +++ b/po/pl.po @@ -9,7 +9,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.3.3-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2010-04-20 22:08+0200\n" +"POT-Creation-Date: 2010-04-21 23:20+0200\n" "PO-Revision-Date: 2010-04-18 10:51+0200\n" "Last-Translator: Krzysztof Koroscik \n" "Language-Team: Polish\n" @@ -4538,6 +4538,14 @@ msgstr "kolor trybów kanału, przy nazwie kanału" msgid "color for buffer name when connected using SSL to server" msgstr "%s%s: nie jesteś połączony z serwerem" +msgid "" +"growing factor for autoreconnect delay to server (1 = always same delay, 2 = " +"delay*2 for each retry, ..)" +msgstr "" + +msgid "maximum autoreconnect delay to server (in seconds, 0 = no maximum)" +msgstr "" + msgid "" "timeout (in seconds) between TCP connection to server and message 001 " "received, if this timeout is reached before 001 message is received, WeeChat " @@ -5118,6 +5126,10 @@ msgstr "%s%s: przekroczono czas uwieżyteniania sasl" msgid "%s: lag is high, disconnecting from server..." msgstr "%s: za duze opóźnienie, rozłączam z serwerem..." +#, fuzzy, c-format +msgid "%s: reconnecting to server in %d %s, %d %s" +msgstr "%s: ponowne połączenie za %d %s" + #, c-format msgid "%s: reconnecting to server in %d %s" msgstr "%s: ponowne połączenie za %d %s" diff --git a/po/ru.po b/po/ru.po index 13629359c..b134eac85 100644 --- a/po/ru.po +++ b/po/ru.po @@ -6,7 +6,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.3.3-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2010-04-20 22:08+0200\n" +"POT-Creation-Date: 2010-04-21 23:20+0200\n" "PO-Revision-Date: 2010-04-18 10:51+0200\n" "Last-Translator: Pavel Shevchuk \n" "Language-Team: weechat-dev \n" @@ -4312,6 +4312,14 @@ msgstr "цвет имён при действиях" msgid "color for buffer name when connected using SSL to server" msgstr "%s вы не подключены к серверу\n" +msgid "" +"growing factor for autoreconnect delay to server (1 = always same delay, 2 = " +"delay*2 for each retry, ..)" +msgstr "" + +msgid "maximum autoreconnect delay to server (in seconds, 0 = no maximum)" +msgstr "" + msgid "" "timeout (in seconds) between TCP connection to server and message 001 " "received, if this timeout is reached before 001 message is received, WeeChat " @@ -4893,6 +4901,10 @@ msgstr "Не могу записать лог-файл \"%s\"\n" msgid "%s: lag is high, disconnecting from server..." msgstr "%s задержка слишком высокая, отключаюсь от сервера...\n" +#, fuzzy, c-format +msgid "%s: reconnecting to server in %d %s, %d %s" +msgstr "%s: Повторное подключение к серверу через %d секунд\n" + #, fuzzy, c-format msgid "%s: reconnecting to server in %d %s" msgstr "%s: Повторное подключение к серверу через %d секунд\n" diff --git a/po/weechat.pot b/po/weechat.pot index 18916dfd0..0174a4214 100644 --- a/po/weechat.pot +++ b/po/weechat.pot @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2010-04-20 22:08+0200\n" +"POT-Creation-Date: 2010-04-21 23:20+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -3688,6 +3688,14 @@ msgstr "" msgid "color for buffer name when connected using SSL to server" msgstr "" +msgid "" +"growing factor for autoreconnect delay to server (1 = always same delay, 2 = " +"delay*2 for each retry, ..)" +msgstr "" + +msgid "maximum autoreconnect delay to server (in seconds, 0 = no maximum)" +msgstr "" + msgid "" "timeout (in seconds) between TCP connection to server and message 001 " "received, if this timeout is reached before 001 message is received, WeeChat " @@ -4220,6 +4228,10 @@ msgstr "" msgid "%s: lag is high, disconnecting from server..." msgstr "" +#, c-format +msgid "%s: reconnecting to server in %d %s, %d %s" +msgstr "" + #, c-format msgid "%s: reconnecting to server in %d %s" msgstr "" diff --git a/src/plugins/irc/irc-command.c b/src/plugins/irc/irc-command.c index f384f0c15..9316029d5 100644 --- a/src/plugins/irc/irc-command.c +++ b/src/plugins/irc/irc-command.c @@ -684,6 +684,7 @@ irc_command_connect_one_server (struct t_irc_server *server, int no_join) server->disable_autojoin = no_join; if (irc_server_connect (server)) { + server->reconnect_delay = 0; server->reconnect_start = 0; server->reconnect_join = (server->channels) ? 1 : 0; } @@ -2960,6 +2961,7 @@ irc_command_reconnect_one_server (struct t_irc_server *server, int no_join) server->disable_autojoin = no_join; if (irc_server_connect (server)) { + server->reconnect_delay = 0; server->reconnect_start = 0; server->reconnect_join = (server->channels) ? 1 : 0; } diff --git a/src/plugins/irc/irc-config.c b/src/plugins/irc/irc-config.c index b7c1d3d7d..43e6754f5 100644 --- a/src/plugins/irc/irc-config.c +++ b/src/plugins/irc/irc-config.c @@ -91,6 +91,8 @@ struct t_config_option *irc_config_color_item_buffer_name_ssl; /* IRC config, network section */ +struct t_config_option *irc_config_network_autoreconnect_delay_growing; +struct t_config_option *irc_config_network_autoreconnect_delay_max; struct t_config_option *irc_config_network_connection_timeout; struct t_config_option *irc_config_network_default_msg_part; struct t_config_option *irc_config_network_default_msg_quit; @@ -1056,7 +1058,7 @@ irc_config_server_new_option (struct t_config_file *config_file, config_file, section, option_name, "integer", N_("delay (in seconds) before trying again to reconnect to server"), - NULL, 0, 65535, + NULL, 1, 65535, default_value, value, null_value_allowed, NULL, NULL, @@ -1655,6 +1657,19 @@ irc_config_init () return 0; } + irc_config_network_autoreconnect_delay_growing = weechat_config_new_option ( + irc_config_file, ptr_section, + "autoreconnect_delay_growing", "integer", + N_("growing factor for autoreconnect delay to server (1 = always same " + "delay, 2 = delay*2 for each retry, ..)"), + NULL, 1, 100, "2", NULL, 0, NULL, NULL, + NULL, NULL, NULL, NULL); + irc_config_network_autoreconnect_delay_max = weechat_config_new_option ( + irc_config_file, ptr_section, + "autoreconnect_delay_max", "integer", + N_("maximum autoreconnect delay to server (in seconds, 0 = no maximum)"), + NULL, 0, 3600 * 24, "1800", NULL, 0, NULL, NULL, + NULL, NULL, NULL, NULL); irc_config_network_connection_timeout = weechat_config_new_option ( irc_config_file, ptr_section, "connection_timeout", "integer", diff --git a/src/plugins/irc/irc-config.h b/src/plugins/irc/irc-config.h index 02b2ed4b0..f0ef86f7e 100644 --- a/src/plugins/irc/irc-config.h +++ b/src/plugins/irc/irc-config.h @@ -107,6 +107,8 @@ extern struct t_config_option *irc_config_color_item_away; extern struct t_config_option *irc_config_color_item_channel_modes; extern struct t_config_option *irc_config_color_item_buffer_name_ssl; +extern struct t_config_option *irc_config_network_autoreconnect_delay_growing; +extern struct t_config_option *irc_config_network_autoreconnect_delay_max; extern struct t_config_option *irc_config_network_connection_timeout; extern struct t_config_option *irc_config_network_default_msg_part; extern struct t_config_option *irc_config_network_default_msg_quit; diff --git a/src/plugins/irc/irc-protocol.c b/src/plugins/irc/irc-protocol.c index d43b059e4..9de40246b 100644 --- a/src/plugins/irc/irc-protocol.c +++ b/src/plugins/irc/irc-protocol.c @@ -1784,6 +1784,7 @@ IRC_PROTOCOL_CALLBACK(001) /* connection to IRC server is ok! */ server->is_connected = 1; + server->reconnect_delay = 0; if (server->hook_timer_connection) { weechat_unhook (server->hook_timer_connection); diff --git a/src/plugins/irc/irc-server.c b/src/plugins/irc/irc-server.c index 8141f1ac1..19649fddc 100644 --- a/src/plugins/irc/irc-server.c +++ b/src/plugins/irc/irc-server.c @@ -73,7 +73,7 @@ char *irc_server_option_default[IRC_SERVER_NUM_OPTIONS] = { "", "", "off", "off", "", "2048", "on", "", "plain", "", "", "15", - "off", "on", "30", + "off", "on", "10", "", "", "", "", "", "0", "", "off", "30", }; @@ -356,6 +356,7 @@ irc_server_alloc (const char *name) new_server->nick = NULL; new_server->nick_modes = NULL; new_server->prefix = NULL; + new_server->reconnect_delay = 0; new_server->reconnect_start = 0; new_server->command_time = 0; new_server->reconnect_join = 0; @@ -1858,9 +1859,10 @@ irc_server_timer_cb (void *data, int remaining_calls) /* check if reconnection is pending */ if ((!ptr_server->is_connected) && (ptr_server->reconnect_start > 0) - && (new_time >= (ptr_server->reconnect_start + - IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_AUTORECONNECT_DELAY)))) + && (new_time >= (ptr_server->reconnect_start + ptr_server->reconnect_delay))) + { irc_server_reconnect (ptr_server); + } else { if (ptr_server->is_connected) @@ -2010,21 +2012,57 @@ irc_server_close_connection (struct t_irc_server *server) void irc_server_reconnect_schedule (struct t_irc_server *server) { - int delay; + int minutes, seconds; server->index_current_address = 0; + if (IRC_SERVER_OPTION_BOOLEAN(server, IRC_SERVER_OPTION_AUTORECONNECT)) { + /* growing reconnect delay */ + if (server->reconnect_delay == 0) + server->reconnect_delay = IRC_SERVER_OPTION_INTEGER(server, IRC_SERVER_OPTION_AUTORECONNECT_DELAY); + else + server->reconnect_delay = server->reconnect_delay * weechat_config_integer (irc_config_network_autoreconnect_delay_growing); + if ((weechat_config_integer (irc_config_network_autoreconnect_delay_max) > 0) + && (server->reconnect_delay > weechat_config_integer (irc_config_network_autoreconnect_delay_max))) + server->reconnect_delay = weechat_config_integer (irc_config_network_autoreconnect_delay_max); + server->reconnect_start = time (NULL); - delay = IRC_SERVER_OPTION_INTEGER(server, IRC_SERVER_OPTION_AUTORECONNECT_DELAY); - weechat_printf (server->buffer, - _("%s: reconnecting to server in %d %s"), - IRC_PLUGIN_NAME, - delay, - NG_("second", "seconds", delay)); + + minutes = server->reconnect_delay / 60; + seconds = server->reconnect_delay % 60; + if ((minutes > 0) && (seconds > 0)) + { + weechat_printf (server->buffer, + _("%s: reconnecting to server in %d %s, %d %s"), + IRC_PLUGIN_NAME, + minutes, + NG_("minute", "minutes", minutes), + seconds, + NG_("second", "seconds", seconds)); + } + else if (minutes > 0) + { + weechat_printf (server->buffer, + _("%s: reconnecting to server in %d %s"), + IRC_PLUGIN_NAME, + minutes, + NG_("minute", "minutes", minutes)); + } + else + { + weechat_printf (server->buffer, + _("%s: reconnecting to server in %d %s"), + IRC_PLUGIN_NAME, + seconds, + NG_("second", "seconds", seconds)); + } } else + { + server->reconnect_delay = 0; server->reconnect_start = 0; + } } /* @@ -2855,6 +2893,7 @@ irc_server_reconnect (struct t_irc_server *server) weechat_printf (server->buffer, _("%s: reconnecting to server..."), IRC_PLUGIN_NAME); + server->reconnect_start = 0; server->index_current_address = 0; @@ -2943,7 +2982,10 @@ irc_server_disconnect (struct t_irc_server *server, int reconnect) && IRC_SERVER_OPTION_BOOLEAN(server, IRC_SERVER_OPTION_AUTORECONNECT)) irc_server_reconnect_schedule (server); else + { + server->reconnect_delay = 0; server->reconnect_start = 0; + } /* discard current nick if no reconnection asked */ if (!reconnect && server->nick) @@ -3513,6 +3555,8 @@ irc_server_add_to_infolist (struct t_infolist *infolist, return 0; if (!weechat_infolist_new_var_string (ptr_item, "prefix", server->prefix)) return 0; + if (!weechat_infolist_new_var_integer (ptr_item, "reconnect_delay", server->reconnect_delay)) + return 0; if (!weechat_infolist_new_var_time (ptr_item, "reconnect_start", server->reconnect_start)) return 0; if (!weechat_infolist_new_var_time (ptr_item, "command_time", server->command_time)) @@ -3748,6 +3792,7 @@ irc_server_print_log () weechat_log_printf (" nick . . . . . . . . : '%s'", ptr_server->nick); weechat_log_printf (" nick_modes . . . . . : '%s'", ptr_server->nick_modes); weechat_log_printf (" prefix . . . . . . . : '%s'", ptr_server->prefix); + weechat_log_printf (" reconnect_delay. . . : %d", ptr_server->reconnect_delay); weechat_log_printf (" reconnect_start. . . : %ld", ptr_server->reconnect_start); weechat_log_printf (" command_time . . . . : %ld", ptr_server->command_time); weechat_log_printf (" reconnect_join . . . : %d", ptr_server->reconnect_join); diff --git a/src/plugins/irc/irc-server.h b/src/plugins/irc/irc-server.h index c2c34dae1..adf3e4f2f 100644 --- a/src/plugins/irc/irc-server.h +++ b/src/plugins/irc/irc-server.h @@ -138,6 +138,7 @@ struct t_irc_server char *nick; /* current nickname */ char *nick_modes; /* nick modes */ char *prefix; /* nick prefix allowed (from msg 005) */ + int reconnect_delay; /* current reconnect delay (growing) */ time_t reconnect_start; /* this time + delay = reconnect time */ time_t command_time; /* this time + command_delay = time to */ /* autojoin channels */ diff --git a/src/plugins/irc/irc-upgrade.c b/src/plugins/irc/irc-upgrade.c index 845fa2623..e61f7e1ca 100644 --- a/src/plugins/irc/irc-upgrade.c +++ b/src/plugins/irc/irc-upgrade.c @@ -256,6 +256,7 @@ irc_upgrade_read_cb (void *data, str = weechat_infolist_string (infolist, "prefix"); if (str) irc_upgrade_current_server->prefix = strdup (str); + irc_upgrade_current_server->reconnect_delay = weechat_infolist_integer (infolist, "reconnect_delay"); irc_upgrade_current_server->reconnect_start = weechat_infolist_time (infolist, "reconnect_start"); irc_upgrade_current_server->command_time = weechat_infolist_time (infolist, "command_time"); irc_upgrade_current_server->reconnect_join = weechat_infolist_integer (infolist, "reconnect_join"); diff --git a/src/plugins/irc/irc.c b/src/plugins/irc/irc.c index f180f56ed..fb67c222c 100644 --- a/src/plugins/irc/irc.c +++ b/src/plugins/irc/irc.c @@ -125,8 +125,8 @@ irc_signal_upgrade_cb (void *data, const char *signal, const char *type_data, * after restart */ ptr_server->index_current_address = 0; - ptr_server->reconnect_start = time (NULL) - - IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_AUTORECONNECT_DELAY) - 1; + ptr_server->reconnect_delay = IRC_SERVER_OPTION_INTEGER(ptr_server, IRC_SERVER_OPTION_AUTORECONNECT_DELAY); + ptr_server->reconnect_start = time (NULL) - ptr_server->reconnect_delay - 1; } } if (disconnected > 0)