From fdfee08cf83f5547cdf07bda1f3745073056caa0 Mon Sep 17 00:00:00 2001 From: Sebastien Helleu Date: Sun, 23 Feb 2014 20:32:42 +0100 Subject: [PATCH] relay: add option relay.network.clients_purge_delay --- ChangeLog | 1 + doc/de/autogen/user/relay_options.txt | 5 +++++ doc/en/autogen/user/relay_options.txt | 5 +++++ doc/fr/autogen/user/relay_options.txt | 5 +++++ doc/it/autogen/user/relay_options.txt | 5 +++++ doc/ja/autogen/user/relay_options.txt | 5 +++++ doc/pl/autogen/user/relay_options.txt | 5 +++++ po/cs.po | 7 ++++++- po/de.po | 7 ++++++- po/es.po | 7 ++++++- po/fr.po | 11 +++++++++-- po/hu.po | 7 ++++++- po/it.po | 7 ++++++- po/ja.po | 7 ++++++- po/pl.po | 7 ++++++- po/pt_BR.po | 7 ++++++- po/ru.po | 7 ++++++- po/tr.po | 7 ++++++- po/weechat.pot | 7 ++++++- src/plugins/relay/relay-client.c | 28 ++++++++++++++++++++++----- src/plugins/relay/relay-config.c | 8 ++++++++ src/plugins/relay/relay-config.h | 1 + 22 files changed, 138 insertions(+), 18 deletions(-) diff --git a/ChangeLog b/ChangeLog index 96c42b60a..7323b07d5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -48,6 +48,7 @@ http://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes] * lua: fix interpreter used after unload of a script * perl: fix context used after unload of a script * python: fix interpreter used after unload of a script +* relay: add option relay.network.clients_purge_delay * relay: fix freeze after /upgrade when many disconnected clients still exist * relay: fix NULL pointer when reading buffer lines for irc backlog * scripts: fix crash when a signal is received with type "int" and NULL pointer diff --git a/doc/de/autogen/user/relay_options.txt b/doc/de/autogen/user/relay_options.txt index 4def4a4ae..4190b2aef 100644 --- a/doc/de/autogen/user/relay_options.txt +++ b/doc/de/autogen/user/relay_options.txt @@ -88,6 +88,11 @@ ** Typ: Zeichenkette ** Werte: beliebige Zeichenkette (Standardwert: `""`) +* [[option_relay.network.clients_purge_delay]] *relay.network.clients_purge_delay* +** Beschreibung: `delay for purging disconnected clients (in minutes, 0 = purge clients immediately, -1 = never purge)` +** Typ: integer +** Werte: -1 .. 43200 (Standardwert: `0`) + * [[option_relay.network.compression_level]] *relay.network.compression_level* ** Beschreibung: `Kompressionsstärke der Pakete die durch das WeeChat Protokoll an den Client gesendet werden sollen (0 = Kompression deaktiviert, 1 = niedrige Kompression ... 9 = stärkste Kompression)` ** Typ: integer diff --git a/doc/en/autogen/user/relay_options.txt b/doc/en/autogen/user/relay_options.txt index 114d257bd..70bfe3d3f 100644 --- a/doc/en/autogen/user/relay_options.txt +++ b/doc/en/autogen/user/relay_options.txt @@ -88,6 +88,11 @@ ** type: string ** values: any string (default value: `""`) +* [[option_relay.network.clients_purge_delay]] *relay.network.clients_purge_delay* +** description: `delay for purging disconnected clients (in minutes, 0 = purge clients immediately, -1 = never purge)` +** type: integer +** values: -1 .. 43200 (default value: `0`) + * [[option_relay.network.compression_level]] *relay.network.compression_level* ** description: `compression level for packets sent to client with WeeChat protocol (0 = disable compression, 1 = low compression ... 9 = best compression)` ** type: integer diff --git a/doc/fr/autogen/user/relay_options.txt b/doc/fr/autogen/user/relay_options.txt index 6a4fbb434..9c234541b 100644 --- a/doc/fr/autogen/user/relay_options.txt +++ b/doc/fr/autogen/user/relay_options.txt @@ -88,6 +88,11 @@ ** type: chaîne ** valeurs: toute chaîne (valeur par défaut: `""`) +* [[option_relay.network.clients_purge_delay]] *relay.network.clients_purge_delay* +** description: `délai pour purger les clients déconnectés (en minutes, 0 = purger les clients immédiatement, -1 = ne jamais purger)` +** type: entier +** valeurs: -1 .. 43200 (valeur par défaut: `0`) + * [[option_relay.network.compression_level]] *relay.network.compression_level* ** description: `niveau de compression pour les paquets envoyés au client avec le protocole WeeChat (0 = désactiver la compression, 1 = peu de compression ... 9 = meilleure compression)` ** type: entier diff --git a/doc/it/autogen/user/relay_options.txt b/doc/it/autogen/user/relay_options.txt index 9254c72ff..22b29063d 100644 --- a/doc/it/autogen/user/relay_options.txt +++ b/doc/it/autogen/user/relay_options.txt @@ -88,6 +88,11 @@ ** tipo: stringa ** valori: qualsiasi stringa (valore predefinito: `""`) +* [[option_relay.network.clients_purge_delay]] *relay.network.clients_purge_delay* +** descrizione: `delay for purging disconnected clients (in minutes, 0 = purge clients immediately, -1 = never purge)` +** tipo: intero +** valori: -1 .. 43200 (valore predefinito: `0`) + * [[option_relay.network.compression_level]] *relay.network.compression_level* ** descrizione: `livello di compressione per i pacchetti inviati al client con il protocollo WeeChat (0 = disabilita compressione, 1 = compressione bassa ... 9 = compressione migliore)` ** tipo: intero diff --git a/doc/ja/autogen/user/relay_options.txt b/doc/ja/autogen/user/relay_options.txt index d4d5b8d63..c70cc639f 100644 --- a/doc/ja/autogen/user/relay_options.txt +++ b/doc/ja/autogen/user/relay_options.txt @@ -88,6 +88,11 @@ ** タイプ: 文字列 ** 値: 未制約文字列 (デフォルト値: `""`) +* [[option_relay.network.clients_purge_delay]] *relay.network.clients_purge_delay* +** 説明: `delay for purging disconnected clients (in minutes, 0 = purge clients immediately, -1 = never purge)` +** タイプ: 整数 +** 値: -1 .. 43200 (デフォルト値: `0`) + * [[option_relay.network.compression_level]] *relay.network.compression_level* ** 説明: `WeeChat プロトコルでクライアントに送信するパケットの圧縮レベル (0 = 圧縮しない、1 = 低圧縮 ... 9 = 高圧縮)` ** タイプ: 整数 diff --git a/doc/pl/autogen/user/relay_options.txt b/doc/pl/autogen/user/relay_options.txt index 5179bf009..205916525 100644 --- a/doc/pl/autogen/user/relay_options.txt +++ b/doc/pl/autogen/user/relay_options.txt @@ -88,6 +88,11 @@ ** typ: ciąg ** wartości: dowolny ciąg (domyślna wartość: `""`) +* [[option_relay.network.clients_purge_delay]] *relay.network.clients_purge_delay* +** opis: `delay for purging disconnected clients (in minutes, 0 = purge clients immediately, -1 = never purge)` +** typ: liczba +** wartości: -1 .. 43200 (domyślna wartość: `0`) + * [[option_relay.network.compression_level]] *relay.network.compression_level* ** opis: `stopień kompresji pakietów wysyłanych do klienta za pomocą protokołu WeeChat (0 = kompresja wyłączona, 1 = niska kompresja ... 9 = najwyższa kompresja)` ** typ: liczba diff --git a/po/cs.po b/po/cs.po index 425a5e039..8bcd3fbd5 100644 --- a/po/cs.po +++ b/po/cs.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-20 12:24+0100\n" "Last-Translator: Jiri Golembiovsky \n" "Language-Team: weechat-dev \n" @@ -8864,6 +8864,11 @@ msgstr "" "rozhranních, použijte \"127.0.0.1\" pro povolení připojení pouze z lokálního " "počítače)" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/de.po b/po/de.po index 9267aa20c..2c9e34671 100644 --- a/po/de.po +++ b/po/de.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-20 12:24+0100\n" "Last-Translator: Nils Görs \n" "Language-Team: German \n" @@ -9862,6 +9862,11 @@ msgstr "" "Interfaces möglich. Wird die Adresse \"127.0.0.1\" genutzt kann nur eine " "Verbindung mit dem lokalen Rechner hergestellt werden)" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/es.po b/po/es.po index 126b2ed41..4a6f2370f 100644 --- a/po/es.po +++ b/po/es.po @@ -22,7 +22,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-20 12:25+0100\n" "Last-Translator: Elián Hanisch \n" "Language-Team: weechat-dev \n" @@ -9149,6 +9149,11 @@ msgstr "" "interfaces, usa \"127.0.0.1\" para permitir conexiones de la máquina local " "solamente)" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/fr.po b/po/fr.po index d360c7080..29e4f652a 100644 --- a/po/fr.po +++ b/po/fr.po @@ -21,8 +21,8 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" -"PO-Revision-Date: 2014-02-21 17:57+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" +"PO-Revision-Date: 2014-02-23 20:29+0100\n" "Last-Translator: Sébastien Helleu \n" "Language-Team: weechat-dev \n" "Language: fr\n" @@ -9622,6 +9622,13 @@ msgstr "" "interfaces, utiliser \"127.0.0.1\" pour autoriser les connections depuis la " "machine locale seulement)" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" +"délai pour purger les clients déconnectés (en minutes, 0 = purger les " +"clients immédiatement, -1 = ne jamais purger)" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/hu.po b/po/hu.po index 7290b2674..e4d8dc65b 100644 --- a/po/hu.po +++ b/po/hu.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-20 12:25+0100\n" "Last-Translator: Andras Voroskoi \n" "Language-Team: weechat-dev \n" @@ -8290,6 +8290,11 @@ msgid "" "\"127.0.0.1\" to allow connections from local machine only)" msgstr "" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/it.po b/po/it.po index 766bfae6f..3d7b70f65 100644 --- a/po/it.po +++ b/po/it.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-20 12:25+0100\n" "Last-Translator: Esteban I. Ruiz Moreno \n" "Language-Team: weechat-dev \n" @@ -9293,6 +9293,11 @@ msgstr "" "le interfacce, usare \"127.0.0.1\" per consentire le connessioni solo dalla " "macchina locale)" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/ja.po b/po/ja.po index 8759acc9a..f46a2acc5 100644 --- a/po/ja.po +++ b/po/ja.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-20 12:25+0100\n" "Last-Translator: AYANOKOUZI, Ryuunosuke \n" "Language-Team: Japanese \n" @@ -9274,6 +9274,11 @@ msgstr "" "割り当てるアドレス (空の場合、全てのインターフェイスからの接続を受け付け" "る、\"127.0.0.1\" を使えばローカルマシンからの接続のみ許可)" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/pl.po b/po/pl.po index 857514d0e..c38cf698c 100644 --- a/po/pl.po +++ b/po/pl.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-20 12:25+0100\n" "Last-Translator: Krzysztof Korościk \n" "Language-Team: weechat-dev \n" @@ -9449,6 +9449,11 @@ msgstr "" "interfejsach, użyj \"127.0.0.1\", aby pozwolić tylko na połączenia z tej " "maszyny)" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/pt_BR.po b/po/pt_BR.po index 6345e8f36..7cef52516 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-20 12:25+0100\n" "Last-Translator: Sergio Durigan Junior \n" "Language-Team: weechat-dev \n" @@ -8509,6 +8509,11 @@ msgstr "" "endereço para associação (se vazio, a conexão será possível em todas as " "interfaces, use \"127.0.0.1\" para permitir somente conexões locais)" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/ru.po b/po/ru.po index 9270f4fb8..d8a74c378 100644 --- a/po/ru.po +++ b/po/ru.po @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-20 12:25+0100\n" "Last-Translator: Aleksey V Zapparov AKA ixti \n" "Language-Team: weechat-dev \n" @@ -8317,6 +8317,11 @@ msgid "" "\"127.0.0.1\" to allow connections from local machine only)" msgstr "" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/tr.po b/po/tr.po index ea4884ff7..b620481dd 100644 --- a/po/tr.po +++ b/po/tr.po @@ -20,7 +20,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2014-02-16 11:21+0100\n" "Last-Translator: Hasan Kiran \n" "Language-Team: weechat-dev \n" @@ -7418,6 +7418,11 @@ msgid "" "\"127.0.0.1\" to allow connections from local machine only)" msgstr "" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/po/weechat.pot b/po/weechat.pot index a6771a0a7..03f79ec9b 100644 --- a/po/weechat.pot +++ b/po/weechat.pot @@ -21,7 +21,7 @@ msgid "" msgstr "" "Project-Id-Version: WeeChat 0.4.1-dev\n" "Report-Msgid-Bugs-To: flashcode@flashtux.org\n" -"POT-Creation-Date: 2014-02-21 17:56+0100\n" +"POT-Creation-Date: 2014-02-23 20:28+0100\n" "PO-Revision-Date: 2013-02-14 18:20+0100\n" "Last-Translator: FULL NAME \n" "Language-Team: weechat-dev \n" @@ -7378,6 +7378,11 @@ msgid "" "\"127.0.0.1\" to allow connections from local machine only)" msgstr "" +msgid "" +"delay for purging disconnected clients (in minutes, 0 = purge clients " +"immediately, -1 = never purge)" +msgstr "" + msgid "" "compression level for packets sent to client with WeeChat protocol (0 = " "disable compression, 1 = low compression ... 9 = best compression)" diff --git a/src/plugins/relay/relay-client.c b/src/plugins/relay/relay-client.c index dd5a58582..2584fd4d2 100644 --- a/src/plugins/relay/relay-client.c +++ b/src/plugins/relay/relay-client.c @@ -822,18 +822,34 @@ relay_client_send (struct t_relay_client *client, const char *data, int relay_client_timer_cb (void *data, int remaining_calls) { - struct t_relay_client *ptr_client; - int num_sent, i; + struct t_relay_client *ptr_client, *ptr_next_client; + int num_sent, i, purge_delay; char *buf; + time_t current_time; /* make C compiler happy */ (void) data; (void) remaining_calls; - for (ptr_client = relay_clients; ptr_client; - ptr_client = ptr_client->next_client) + purge_delay = weechat_config_integer (relay_config_network_clients_purge_delay); + + current_time = time (NULL); + + ptr_client = relay_clients; + while (ptr_client) { - if (ptr_client->sock >= 0) + ptr_next_client = ptr_client->next_client; + + if (RELAY_CLIENT_HAS_ENDED(ptr_client)) + { + if ((purge_delay >= 0) + && (current_time >= ptr_client->end_time + (purge_delay * 60))) + { + relay_client_free (ptr_client); + relay_buffer_refresh (NULL); + } + } + else if (ptr_client->sock >= 0) { while (ptr_client->outqueue) { @@ -960,6 +976,8 @@ relay_client_timer_cb (void *data, int remaining_calls) } } } + + ptr_client = ptr_next_client; } return WEECHAT_RC_OK; diff --git a/src/plugins/relay/relay-config.c b/src/plugins/relay/relay-config.c index e0e46cbe1..0ca6c4fa0 100644 --- a/src/plugins/relay/relay-config.c +++ b/src/plugins/relay/relay-config.c @@ -52,6 +52,7 @@ struct t_config_option *relay_config_color_text_selected; struct t_config_option *relay_config_network_allowed_ips; struct t_config_option *relay_config_network_bind_address; +struct t_config_option *relay_config_network_clients_purge_delay; struct t_config_option *relay_config_network_compression_level; struct t_config_option *relay_config_network_ipv6; struct t_config_option *relay_config_network_max_clients; @@ -604,6 +605,13 @@ relay_config_init () "local machine only)"), NULL, 0, 0, "", NULL, 0, NULL, NULL, &relay_config_change_network_bind_address_cb, NULL, NULL, NULL); + relay_config_network_clients_purge_delay = weechat_config_new_option ( + relay_config_file, ptr_section, + "clients_purge_delay", "integer", + N_("delay for purging disconnected clients (in minutes, 0 = purge " + "clients immediately, -1 = never purge)"), + NULL, -1, 60 * 24 * 30, "0", NULL, 0, + NULL, NULL, NULL, NULL, NULL, NULL); relay_config_network_compression_level = weechat_config_new_option ( relay_config_file, ptr_section, "compression_level", "integer", diff --git a/src/plugins/relay/relay-config.h b/src/plugins/relay/relay-config.h index a26cd9023..7cda6a25b 100644 --- a/src/plugins/relay/relay-config.h +++ b/src/plugins/relay/relay-config.h @@ -38,6 +38,7 @@ extern struct t_config_option *relay_config_color_text_selected; extern struct t_config_option *relay_config_network_allowed_ips; extern struct t_config_option *relay_config_network_bind_address; +extern struct t_config_option *relay_config_network_clients_purge_delay; extern struct t_config_option *relay_config_network_compression_level; extern struct t_config_option *relay_config_network_ipv6; extern struct t_config_option *relay_config_network_max_clients;