diff options
author | Sébastien Helleu <flashcode@flashtux.org> | 2021-12-24 15:14:56 +0100 |
---|---|---|
committer | Sébastien Helleu <flashcode@flashtux.org> | 2021-12-24 16:45:57 +0100 |
commit | 498194f6fc39ce96f17f5002aab7b0aa0a5e6f67 (patch) | |
tree | 80b2d9c1ec6b43fe86aacdf8e0e93c07232966a0 | |
parent | d5c391b1ee57730ed6f94c3d7ee5661ceaff35f5 (diff) | |
download | weechat-498194f6fc39ce96f17f5002aab7b0aa0a5e6f67.zip |
relay: add zstd compression in weechat protocol
Option relay.network.compression_level is renamed to relay.network.compression
and is now a percentage between 0 (no compression) to 100 (best compression,
slowest).
Compression is now disabled by default in weechat protocol and must be enabled
via the `handshake` command (option `compression` has been removed from `init`
command).
36 files changed, 441 insertions, 870 deletions
diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index a608e855a..dd80f6246 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,7 +35,7 @@ jobs: sudo apt-add-repository --yes ppa:ondrej/php sudo apt-get update -qq sudo apt-get --yes purge php8.1-dev - sudo apt-get --yes --no-install-recommends install devscripts equivs python3-pip libenchant-dev autopoint cmake ninja-build lcov pkg-config libncursesw5-dev gem2deb libperl-dev python2-dev python3-dev libaspell-dev liblua5.3-dev tcl8.6-dev guile-2.0-dev libv8-dev libcurl4-gnutls-dev libgcrypt20-dev libgnutls28-dev zlib1g-dev curl libcpputest-dev php8.0-dev libphp8.0-embed libargon2-0-dev libsodium-dev pylint python3-bandit asciidoctor + sudo apt-get --yes --no-install-recommends install devscripts equivs python3-pip libenchant-dev autopoint cmake ninja-build lcov pkg-config libncursesw5-dev gem2deb libperl-dev python2-dev python3-dev libaspell-dev liblua5.3-dev tcl8.6-dev guile-2.0-dev libv8-dev libcurl4-gnutls-dev libgcrypt20-dev libgnutls28-dev libzstd-dev zlib1g-dev curl libcpputest-dev php8.0-dev libphp8.0-embed libargon2-0-dev libsodium-dev pylint python3-bandit asciidoctor sudo -H pip3 install --ignore-installed msgcheck - name: Test patches diff --git a/CMakeLists.txt b/CMakeLists.txt index e7a361d7c..0d1ba5aac 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -196,7 +196,10 @@ list(APPEND EXTRA_LIBS gnutls) # Check for zlib find_package(ZLIB REQUIRED) -add_definitions(-DHAVE_ZLIB) + +# Check for zstd +include(FindPkgConfig) +pkg_check_modules(LIBZSTD REQUIRED libzstd) # Check for iconv find_package(Iconv) diff --git a/ChangeLog.adoc b/ChangeLog.adoc index fb4b547e9..25e68d79d 100644 --- a/ChangeLog.adoc +++ b/ChangeLog.adoc @@ -18,6 +18,10 @@ https://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes] [[v3.5]] == Version 3.5 (under dev) +New features:: + + * relay: add `zstd` (https://facebook.github.io/zstd/[Zstandard]) compression in weechat protocol, remove option `compression` from `init` command, rename option relay.network.compression_level to relay.network.compression + Bug fixes:: * irc: fix display of IRC numeric messages with no parameters diff --git a/ReleaseNotes.adoc b/ReleaseNotes.adoc index 2cf8ee423..a731ceefb 100644 --- a/ReleaseNotes.adoc +++ b/ReleaseNotes.adoc @@ -17,6 +17,31 @@ https://weechat.org/files/changelog/ChangeLog-devel.html[ChangeLog] (file _ChangeLog.adoc_ in sources). +[[v3.5]] +== Version 3.5 (under dev) + +[[v3.5_relay_weechat_compression_zstd]] +=== Compression "zstandard" in relay + +Relay of type "weechat" now offers a compression with https://facebook.github.io/zstd/[Zstandard], +which allows better compression and is much faster than zlib for both compression and decompression. + +The new compression type is `zstd`, and the default compression is now `off` +instead of `zlib`: the compression must now be explicitly given in the +link:https://weechat.org/doc/relay#command_handshake[handshake] command. + +The option `compression` in link:https://weechat.org/doc/relay#command_handshake[init] +command has been removed, it is now ignored and must be given in the +link:https://weechat.org/doc/relay#command_handshake[handshake] command +(it was deprecated since WeeChat 2.9). + +The option relay.network.compression_level has been renamed to relay.network.compression +and is now a percentage between `0` and `100`: + +* `0`: disable compression +* `1`: low compression (fast) +* `100`: best compression (slow) + [[v3.4]] == Version 3.4 (2021-12-18) diff --git a/configure.ac b/configure.ac index 75fa0b47f..bfb6d7234 100644 --- a/configure.ac +++ b/configure.ac @@ -1176,6 +1176,27 @@ else fi # ------------------------------------------------------------------------------ +# zstd +# ------------------------------------------------------------------------------ + +AC_CHECK_HEADER(zstd.h,ac_found_zstd_header="yes",ac_found_zstd_header="no") +AC_CHECK_LIB(zstd,ZSTD_compress,ac_found_zstd_lib="yes",ac_found_zstd_lib="no") + +AC_MSG_CHECKING(for zstd headers and libraries) +if test "x$ac_found_zstd_header" = "xno" -o "x$ac_found_zstd_lib" = "xno" ; then + AC_MSG_RESULT(no) + AC_MSG_ERROR([ +*** zstd was not found. You may want to get it from https://github.com/facebook/zstd +*** or try to install it with your software package manager.]) +else + AC_MSG_RESULT(yes) + ZSTD_CFLAGS=`pkg-config libzstd --cflags` + ZSTD_LFLAGS=`pkg-config libzstd --libs` + AC_SUBST(ZSTD_CFLAGS) + AC_SUBST(ZSTD_LFLAGS) +fi + +# ------------------------------------------------------------------------------ # curl # ------------------------------------------------------------------------------ diff --git a/debian-devel/control b/debian-devel/control index 31e09cccd..6cc1b8c92 100644 --- a/debian-devel/control +++ b/debian-devel/control @@ -19,6 +19,7 @@ Build-Depends: libcurl4-gnutls-dev, libgcrypt20-dev, libgnutls28-dev, + libzstd-dev, zlib1g-dev Standards-Version: 4.6.0.1 Homepage: https://weechat.org/ diff --git a/debian-stable/control b/debian-stable/control index a4a515ac4..77c78e4ad 100644 --- a/debian-stable/control +++ b/debian-stable/control @@ -19,6 +19,7 @@ Build-Depends: libcurl4-gnutls-dev, libgcrypt20-dev, libgnutls28-dev, + libzstd-dev, zlib1g-dev Standards-Version: 4.6.0.1 Homepage: https://weechat.org/ diff --git a/doc/de/weechat_user.de.adoc b/doc/de/weechat_user.de.adoc index 0747034af..27d92319c 100644 --- a/doc/de/weechat_user.de.adoc +++ b/doc/de/weechat_user.de.adoc @@ -107,9 +107,12 @@ WeeChat *erforderlich* sind: | pkg-config | | entdeckt installierte Bibliotheken. | libncursesw5-dev ^(2)^ | | Ncurses Oberfläche. | libcurl4-gnutls-dev | | URL Transfer. -| zlib1g-dev | | Kompression für Pakete, die mittels Relay- (WeeChat Protokoll), Script-Erweiterung übertragen werden. | libgcrypt20-dev | | Geschützte Daten, IRC SASL Authentifikation. | libgnutls28-dev | ≥ 2.2.0 ^(3)^ | SSL Verbindung zu einem IRC Server, Unterstützung von SSL in der Relay-Erweiterung, IRC SASL Authentifikation (ECDSA-NIST256P-CHALLENGE). +// TRANSLATION MISSING +| zlib1g-dev | | Compression of messages (WeeChat -> client) with https://zlib.net/[zlib] in relay plugin (weechat protocol), Script-Erweiterung übertragen werden. +// TRANSLATION MISSING +| libzstd-dev | | Compression of messages (WeeChat -> client) with https://facebook.github.io/zstd/[Zstandard] in relay plugin (weechat protocol). |=== [NOTE] diff --git a/doc/en/weechat_relay_protocol.en.adoc b/doc/en/weechat_relay_protocol.en.adoc index 33ac9f14c..683a72c39 100644 --- a/doc/en/weechat_relay_protocol.en.adoc +++ b/doc/en/weechat_relay_protocol.en.adoc @@ -103,7 +103,7 @@ List of available commands (detail in next chapters): [[command_handshake]] === handshake -_WeeChat ≥ 2.9._ +_WeeChat ≥ 2.9, updated in version 3.5._ Perform an handshake between the client and WeeChat: this is required in most cases to know the session settings and prepare the authentication with the @@ -127,10 +127,15 @@ Arguments: *** _sha512_: password salted and hashed with SHA512 algorithm *** _pbkdf2+sha256_: password salted and hashed with PBKDF2 algorithm (using SHA256 hash) *** _pbkdf2+sha512_: password salted and hashed with PBKDF2 algorithm (using SHA512 hash) -** _compression_: compression type: -*** _zlib_: enable _zlib_ compression for messages sent by _relay_ - (enabled by default if _relay_ supports _zlib_ compression) -*** _off_: disable compression +** _compression_: list of supported compression types supported by the client + (separated by colons and sorted from most important to the fallback value); + if compression is enabled, messages from _relay_ to client are compressed + to save bandwidth; allowed values are: +*** _off_: no compression (default if option is not given) +*** _zlib_: compress with https://zlib.net/[zlib] _(WeeChat ≥ 0.3.7)_ +*** _zstd_: compress with https://facebook.github.io/zstd/[Zstandard]: better + compression and much faster than _zlib_ for both compression and decompression + _(WeeChat ≥ 3.5)_ Notes about option _password_hash_algo_: @@ -169,8 +174,9 @@ WeeChat replies with a hashtable containing the following keys and values: and the user password (the _relay_ nonce + the client nonce is the salt used in the password hash algorithm) * _compression_: compression type: -** _zlib_: messages are compressed with _zlib_ ** _off_: messages are not compressed +** _zlib_: messages are compressed with https://zlib.net/[zlib] +** _zstd_: messages are compressed with https://facebook.github.io/zstd/[Zstandard] [TIP] With WeeChat ≤ 2.8, the command _handshake_ is not implemented, WeeChat silently @@ -196,7 +202,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -216,7 +222,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -236,7 +242,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -248,10 +254,11 @@ the password is "test" in this example: init password_hash=pbkdf2+sha256:85b1ee00695a5b254e14f4885538df0da4b73207f5aae4:100000:ba7facc3edb89cd06ae810e29ced85980ff36de2bb596fcf513aaab626876440 ---- -* Only "sha256" and "sha512" are supported by the client, disable compression: +* Only "sha256" and "sha512" are supported by the client, enable zstd (preferred) +or zlib compression: ---- -(handshake) handshake password_hash_algo=sha256:sha512,compression=off +(handshake) handshake password_hash_algo=sha256:sha512,compression=zstd:zlib ---- Response: @@ -264,7 +271,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'off', + 'compression': 'zstd', } ---- @@ -298,12 +305,6 @@ Arguments: factor, in addition to the password (option _relay.network.totp_secret_ in WeeChat) _(WeeChat ≥ 2.4)_ -** _compression_: compression type (*deprecated* since version 2.9, it is kept - for compatibility reasons but should be sent in the - <<command_handshake,handshake command>>): -*** _zlib_: enable _zlib_ compression for messages sent by _relay_ - (enabled by default if _relay_ supports _zlib_ compression) -*** _off_: disable compression [NOTE] With WeeChat ≥ 1.6, commas can be escaped in the value, for example @@ -1379,7 +1380,8 @@ Messages are sent as binary data, using following format (with size in bytes): (including this field) * _compression_ (byte): flag: ** _0x00_: following data is not compressed -** _0x01_: following data is compressed with _zlib_ +** _0x01_: following data is compressed with https://zlib.net/[zlib] +** _0x02_: following data is compressed with https://facebook.github.io/zstd/[Zstandard] * _id_ (string, 4 bytes + content): identifier sent by client (before command name); it can be empty (string with zero length and no content) if no identifier was given in command @@ -1389,8 +1391,9 @@ Messages are sent as binary data, using following format (with size in bytes): [[message_compression]] === Compression -If flag _compression_ is equal to 0x01, then *all* data after is compressed -with _zlib_, and therefore must be uncompressed before being processed. +If flag _compression_ is equal to 0x01 or 0x02, then *all* data after is compressed +with https://zlib.net/[zlib] or https://facebook.github.io/zstd/[Zstandard], +and therefore must be uncompressed before being processed. [[message_identifier]] === Identifier diff --git a/doc/en/weechat_user.en.adoc b/doc/en/weechat_user.en.adoc index d7d3b6fbf..98bb045d1 100644 --- a/doc/en/weechat_user.en.adoc +++ b/doc/en/weechat_user.en.adoc @@ -101,9 +101,10 @@ WeeChat: | pkg-config | | Detect installed libraries. | libncursesw5-dev ^(2)^ | | Ncurses interface. | libcurl4-gnutls-dev | | URL transfer. -| zlib1g-dev | | Compression of packets in relay plugin (weechat protocol), script plugin. | libgcrypt20-dev | | Secured data, IRC SASL authentication. | libgnutls28-dev | ≥ 2.2.0 ^(3)^ | SSL connection to IRC server, support of SSL in relay plugin, IRC SASL authentication (ECDSA-NIST256P-CHALLENGE). +| zlib1g-dev | | Compression of messages (WeeChat -> client) with https://zlib.net/[zlib] in relay plugin (weechat protocol), script plugin. +| libzstd-dev | | Compression of messages (WeeChat -> client) with https://facebook.github.io/zstd/[Zstandard] in relay plugin (weechat protocol). |=== [NOTE] diff --git a/doc/fr/weechat_relay_protocol.fr.adoc b/doc/fr/weechat_relay_protocol.fr.adoc index bcca20f81..51a5b7e13 100644 --- a/doc/fr/weechat_relay_protocol.fr.adoc +++ b/doc/fr/weechat_relay_protocol.fr.adoc @@ -24,7 +24,7 @@ Les termes suivants sont utilisés dans ce document : * _relay_ : il s'agit de l'extension "relay" de WeeChat, qui agit comme un "serveur" et autorise les _clients_ à se connecter * _client_ : il s'agit d'un autre logiciel, connecté au _relay_ via une - connexion réseau; dans la plupart des cas, ce _client_ est une interface + connexion réseau ; dans la plupart des cas, ce _client_ est une interface distante. [[network_diagram]] @@ -79,7 +79,7 @@ Les commandes ont le format : Les champs sont : * _id_ : identifiant du message (facultatif) qui sera envoyée dans la réponse de - _relay_; elle doit être entre parenthèses, et ne doit pas commencer par un + _relay_ ; elle doit être entre parenthèses, et ne doit pas commencer par un underscore (les identifiants commençant par un underscore sont réservés pour les messages _évènements_ de WeeChat) * _commande_ : une commande (voir le tableau ci-dessous) @@ -107,7 +107,7 @@ Liste des commandes disponibles (détail dans les chapitres suivants) : [[command_handshake]] === handshake -_WeeChat ≥ 2.9._ +_WeeChat ≥ 2.9, mis à jour dans la version 3.5._ Effectuer une poignée de main entre le client et WeeChat : cela est obligatoire dans la plupart des cas pour connaître les paramètres de la session et préparer @@ -133,10 +133,16 @@ Paramètres : (avec un hachage SHA256) *** _pbkdf2+sha512_ : mot de passe salé et haché avec l'algorithme PBKDF2 (avec un hachage SHA512) -** _compression_ : type de compression : -*** _zlib_ : activer la compression _zlib_ pour les messages envoyés par _relay_ - (activée par défaut si _relay_ supporte la compression _zlib_) -*** _off_ : désactiver la compression +** _compression_ : liste des types de compression supportées par le client + (séparées par des deux-points et triées de la plus importante à la valeur + par défaut) ; si la compression est activée, les messages de _relay_ vers + le client sont compressés pour économiser de la bande passante ; + les valeurs autorisées sont : +*** _off_ : pas de compression (par défaut si l'option n'est pas donnée) +*** _zlib_ : compresser avec https://zlib.net/[zlib] _(WeeChat ≥ 0.3.7)_ +*** _zstd_ : compresser avec https://facebook.github.io/zstd/[Zstandard] : + meilleure compression et bien plus rapide que _zlib_ pour la compression et + la décompression _(WeeChat ≥ 3.5)_ Notes à propos de l'option _password_hash_algo_ : @@ -178,8 +184,9 @@ suivantes : _relay_ + le nonce client constituent le sel utilisé dans l'algorithme de hachage du mot de passe) * _compression_ : type de compression : -** _zlib_ : les messages sont compressés avec _zlib_ ** _off_ : les messages ne sont pas compressés +** _zlib_ : les messages sont compressés avec https://zlib.net/[zlib] +** _zstd_ : les messages sont compressés avec https://facebook.github.io/zstd/[Zstandard] [TIP] Avec WeeChat ≤ 2.8, la commande _handshake_ n'est pas implémentée, WeeChat ignore @@ -204,7 +211,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -224,7 +231,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -244,7 +251,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -256,10 +263,11 @@ le mot de passe est "test" dans cet exemple : init password_hash=pbkdf2+sha256:85b1ee00695a5b254e14f4885538df0da4b73207f5aae4:100000:ba7facc3edb89cd06ae810e29ced85980ff36de2bb596fcf513aaab626876440 ---- -* Seulement "sha256" et "sha512" sont supportés par le client, désactiver la compression : +* Seulement "sha256" et "sha512" sont supportés par le client, activer la +compression zstd (préférée) ou zlib : ---- -(handshake) handshake password_hash_algo=sha256:sha512,compression=off +(handshake) handshake password_hash_algo=sha256:sha512,compression=zstd:zlib ---- Réponse : @@ -272,7 +280,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'off', + 'compression': 'zstd', } ---- @@ -306,12 +314,6 @@ Paramètres : One-Time Password) utilisé comme second facteur d'authentification, en plus du mot de passe (option _relay.network.totp_secret_ dans WeeChat) _(WeeChat ≥ 2.4)_ -** _compression_ : type de compression (*obsolète* depuis la version 2.9, gardé - pour des raisons de compatibilité mais devrait être envoyé dans la - <<command_handshake,commande handshake>>) : -*** _zlib_ : activer la compression _zlib_ pour les messages envoyés par _relay_ - (activée par défaut si _relay_ supporte la compression _zlib_) -*** _off_ : désactiver la compression [NOTE] Avec WeeChat ≥ 1.6, les virgules peuvent être échappées dans la valeur, @@ -1157,16 +1159,16 @@ Syntaxe : Paramètres : * _tampon_ : pointeur (par exemple : "0x1234abcd") ou nom complet du tampon (par exemple : - _core.weechat_ ou _irc.libera.#weechat_); le nom "*" peut être utilisé pour + _core.weechat_ ou _irc.libera.#weechat_) ; le nom "*" peut être utilisé pour spécifier tous les tampons * _options_ : un ou plusieurs mots-clés, séparés par des virgules (par défaut _buffers,upgrade,buffer,nicklist_ pour "*" et _buffer,nicklist_ pour un tampon) : ** _buffers_ : recevoir les signaux à propos des tampons (ouverts/fermés, - déplacés, renommés, mélangés, masqués/démasqués); peut être utilisé seulement + déplacés, renommés, mélangés, masqués/démasqués) ; peut être utilisé seulement avec "*" _(WeeChat ≥ 0.4.1)_ ** _upgrade_ : recevoir les signaux à propos de la mise à jour de WeeChat - (mise à jour, fin de mise à jour); peut être utilisé seulement avec "*" + (mise à jour, fin de mise à jour) ; peut être utilisé seulement avec "*" _(WeeChat ≥ 0.4.1)_ ** _buffer_ : recevoir les signaux à propos du tampon (nouvelles lignes, type changé, titre changé, variable locale ajoutée/supprimée, et les même signaux @@ -1225,11 +1227,11 @@ Syntaxe : Paramètres : * _tampon_ : pointeur (par exemple : "0x1234abcd") ou nom complet du tampon (par exemple : - _core.weechat_ ou _irc.libera.#weechat_); le nom "*" peut être utilisé pour + _core.weechat_ ou _irc.libera.#weechat_) ; le nom "*" peut être utilisé pour spécifier tous les tampons * _options_ : un ou plusieurs mots-clés, séparés par des virgules (le défaut est _buffers,upgrade,buffer,nicklist_ pour "*" et _buffer,nicklist_ pour un - tampon); voir <<command_sync,la commande sync>> pour les valeurs + tampon) ; voir <<command_sync,la commande sync>> pour les valeurs [NOTE] En utilisant le tampon "*", les autres tampons synchronisés (en utilisant un @@ -1399,9 +1401,10 @@ suivant (avec la taille en octets) : (en incluant ce champ) * _compression_ (octet) : drapeau : ** _0x00_ : les données qui suivent ne sont pas compressées -** _0x01_ : les données qui suivent sont compressées avec _zlib_ +** _0x01_ : les données qui suivent sont compressées avec https://zlib.net/[zlib] +** _0x02_ : les données qui suivent sont compressées avec https://facebook.github.io/zstd/[Zstandard] * _id_ (chaîne, 4 octets + contenu) : l'identifiant envoyé par le client - (avant le nom de la commande); il peut être vide (chaîne avec une longueur + (avant le nom de la commande) ; il peut être vide (chaîne avec une longueur de zéro sans contenu) si l'identifiant n'était pas donné dans la commande * _type_ (3 caractères) : un type : 3 lettres (voir le tableau ci-dessous) * _objet_ : un objet (voir tableau ci-dessous) @@ -1409,9 +1412,9 @@ suivant (avec la taille en octets) : [[message_compression]] === Compression -Si le drapeau de _compression_ est égal à 0x01, alors *toutes* les données après -sont compressées avec _zlib_, et par conséquent doivent être décompressées avant -d'être utilisées. +Si le drapeau de _compression_ est égal à 0x01 ou 0x02, alors *toutes* les données +après sont compressées avec https://zlib.net/[zlib] ou https://facebook.github.io/zstd/[Zstandard], +et par conséquent doivent être décompressées avant d'être utilisées. [[message_identifier]] === Identifiant @@ -2473,7 +2476,7 @@ Une chaîne _NULL_ (pointeur NULL en C) a une longueur de -1 : [[object_buffer]] ==== Tampon de données -Même format que l'objet <<object_string,chaîne>>; le contenu est simplement un +Même format que l'objet <<object_string,chaîne>> ; le contenu est simplement un tableau d'octets. [[object_pointer]] @@ -2556,7 +2559,7 @@ objets). .... * _h-path_ (chaîne) : chemin utilise pour atteindre le hdata (exemple : - _buffer/lines/line/line_data_); le dernier élément du chemin est le hdata + _buffer/lines/line/line_data_) ; le dernier élément du chemin est le hdata retourné * _keys_ (chaînes) : chaîne avec une liste de _clé:type_ (séparés par des virgules), exemple : _number:int,name:str_ diff --git a/doc/fr/weechat_user.fr.adoc b/doc/fr/weechat_user.fr.adoc index 48949e51f..dfcbfe7cb 100644 --- a/doc/fr/weechat_user.fr.adoc +++ b/doc/fr/weechat_user.fr.adoc @@ -104,9 +104,10 @@ Le tableau suivant liste les paquets *requis* pour compiler WeeChat : | pkg-config | | Détection des bibliothèques installées. | libncursesw5-dev ^(2)^ | | Interface ncurses. | libcurl4-gnutls-dev | | Transfert d'URL. -| zlib1g-dev | | Compression des paquets dans l'extension relay (protocole weechat), extension script. | libgcrypt20-dev | | Données sécurisées, authentification IRC SASL. | libgnutls28-dev | ≥ 2.2.0 ^(3)^ | Connexion SSL au serveur IRC, support SSL dans l'extension relay, authentification IRC SASL (ECDSA-NIST256P-CHALLENGE). +| zlib1g-dev | | Compression des messages (WeeChat -> client) avec https://zlib.net/[zlib] dans l'extension relay (protocole weechat), extension script. +| libzstd-dev | | Compression des messages (WeeChat -> client) avec https://facebook.github.io/zstd/[Zstandard] dans l'extension relay (protocole weechat). |=== [NOTE] diff --git a/doc/it/weechat_user.it.adoc b/doc/it/weechat_user.it.adoc index c3e1602dc..6c5406d08 100644 --- a/doc/it/weechat_user.it.adoc +++ b/doc/it/weechat_user.it.adoc @@ -122,11 +122,13 @@ WeeChat: | libncursesw5-dev ^(2)^ | | Interfaccia ncurses. | libcurl4-gnutls-dev | | Trasferimento URL. // TRANSLATION MISSING -| zlib1g-dev | | Compression of packets in relay plugin (weechat protocol), script plugin. -// TRANSLATION MISSING | libgcrypt20-dev | | Secured data, IRC SASL authentication. // TRANSLATION MISSING | libgnutls28-dev | ≥ 2.2.0 ^(3)^ | Connessione SSL al server IRC, support of SSL in relay plugin, IRC SASL authentication (ECDSA-NIST256P-CHALLENGE). +// TRANSLATION MISSING +| zlib1g-dev | | Compression of messages (WeeChat -> client) with https://zlib.net/[zlib] in relay plugin (weechat protocol), script plugin. +// TRANSLATION MISSING +| libzstd-dev | | Compression of messages (WeeChat -> client) with https://facebook.github.io/zstd/[Zstandard] in relay plugin (weechat protocol). |=== [NOTE] diff --git a/doc/ja/weechat_relay_protocol.ja.adoc b/doc/ja/weechat_relay_protocol.ja.adoc index e004d5221..ab4833517 100644 --- a/doc/ja/weechat_relay_protocol.ja.adoc +++ b/doc/ja/weechat_relay_protocol.ja.adoc @@ -112,7 +112,7 @@ _リレー_ プラグインは _IRC プロキシ_ のように振舞います ( [[command_handshake]] === handshake -_WeeChat ≥ 2.9._ +_WeeChat ≥ 2.9, updated in version 3.5._ Perform an handshake between the client and WeeChat: this is required in most cases to know the session settings and prepare the authentication with the @@ -136,10 +136,16 @@ Arguments: *** _sha512_: password salted and hashed with SHA512 algorithm *** _pbkdf2+sha256_: password salted and hashed with PBKDF2 algorithm (using SHA256 hash) *** _pbkdf2+sha512_: password salted and hashed with PBKDF2 algorithm (using SHA512 hash) -** _compression_: compression type: -*** _zlib_: enable _zlib_ compression for messages sent by _relay_ - (enabled by default if _relay_ supports _zlib_ compression) -*** _off_: disable compression +// TRANSLATION MISSING +** _compression_: list of supported compression types supported by the client + (separated by colons and sorted from most important to the fallback value); + if compression is enabled, messages from _relay_ to client are compressed + to save bandwidth; allowed values are: +*** _off_: no compression (default if option is not given) +*** _zlib_: compress with https://zlib.net/[zlib] _(WeeChat ≥ 0.3.7)_ +*** _zstd_: compress with https://facebook.github.io/zstd/[Zstandard]: better + compression and much faster than _zlib_ for both compression and decompression + _(WeeChat ≥ 3.5)_ Notes about option _password_hash_algo_: @@ -178,8 +184,9 @@ WeeChat replies with a hashtable containing the following keys and values: and the user password (the _relay_ nonce + the client nonce is the salt used in the password hash algorithm) * _compression_: compression type: -** _zlib_: messages are compressed with _zlib_ ** _off_: messages are not compressed +** _zlib_: messages are compressed with https://zlib.net/[zlib] +** _zstd_: messages are compressed with https://facebook.github.io/zstd/[Zstandard] [TIP] With WeeChat ≤ 2.8, the command _handshake_ is not implemented, WeeChat silently @@ -205,7 +212,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -225,7 +232,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -245,7 +252,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -257,10 +264,11 @@ the password is "test" in this example: init password_hash=pbkdf2+sha256:85b1ee00695a5b254e14f4885538df0da4b73207f5aae4:100000:ba7facc3edb89cd06ae810e29ced85980ff36de2bb596fcf513aaab626876440 ---- -* Only "sha256" and "sha512" are supported by the client, disable compression: +* Only "sha256" and "sha512" are supported by the client, enable zstd (preferred) +or zlib compression: ---- -(handshake) handshake password_hash_algo=sha256:sha512,compression=off +(handshake) handshake password_hash_algo=sha256:sha512,compression=zstd:zlib ---- Response: @@ -273,7 +281,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'off', + 'compression': 'zstd', } ---- @@ -310,13 +318,6 @@ _handshake_), without warning. ** _totp_: パスワードに加えた二要素認証で利用する時間ベースのワンタイムパスワード (TOTP) (WeeChat の _relay.network.totp_secret_ オプション) _(WeeChat バージョン 2.4 で利用可能)_ -// TRANSLATION MISSING -** _compression_: 圧縮タイプ (*deprecated* since version 2.9, it is kept - for compatibility reasons but should be sent in the - <<command_handshake,handshake command>>): -*** _zlib_: _リレー_ から受信するメッセージに対して _zlib_ 圧縮を使う - (_リレー_ が _zlib_ 圧縮をサポートしている場合、デフォルトで有効化されます) -*** _off_: 圧縮を使わない [NOTE] WeeChat バージョン 1.6 以上の場合、コンマをエスケープすることで value にコンマを設定可能です。例えば @@ -1409,7 +1410,8 @@ quit (このフィールドを含む) * _compression_ (バイト型): フラグ: ** _0x00_: これ以降のデータは圧縮されていません -** _0x01_: これ以降のデータは _zlib_ で圧縮されています +** _0x01_: これ以降のデータは https://zlib.net/[zlib] で圧縮されています +** _0x02_: これ以降のデータは https://facebook.github.io/zstd/[Zstandard] で圧縮されています * _id_ (文字列型、4 バイト + 内容): クライアントが送信した識別子 (コマンド名の前につけられる); コマンドに識別子が含まれない場合は空文字列でも可 (内容を含まない長さゼロの文字列) @@ -1419,8 +1421,10 @@ quit [[message_compression]] === 圧縮 -_compression_ フラグが 0x01 の場合、これ以降の *全ての* データは _zlib_ -で圧縮されているため、処理前に必ず展開してください。 +// TRANSLATION MISSING +If flag _compression_ is equal to 0x01 or 0x02, then *all* data after is compressed +with https://zlib.net/[zlib] or https://facebook.github.io/zstd/[Zstandard], +and therefore must be uncompressed before being processed. [[message_identifier]] === 識別子 diff --git a/doc/ja/weechat_user.ja.adoc b/doc/ja/weechat_user.ja.adoc index 61be32a7d..7b33ff049 100644 --- a/doc/ja/weechat_user.ja.adoc +++ b/doc/ja/weechat_user.ja.adoc @@ -108,9 +108,12 @@ WeeChat: | pkg-config | | インストール済みライブラリを検出 | libncursesw5-dev ^(2)^ | | ncurses インターフェース | libcurl4-gnutls-dev | | URL 転送 -| zlib1g-dev | | relay プラグインでパケットを圧縮 (weechat プロトコル)、スクリプトプラグイン | libgcrypt20-dev | | 保護データ、IRC SASL 認証 | libgnutls28-dev | 2.2.0 以上 ^(3)^ | IRC サーバへの SSL 接続、IRC SASL 認証 (ECDSA-NIST256P-CHALLENGE) +// TRANSLATION MISSING +| zlib1g-dev | | Compression of messages (WeeChat -> client) with https://zlib.net/[zlib] in relay plugin (weechat protocol), script plugin. +// TRANSLATION MISSING +| libzstd-dev | | Compression of messages (WeeChat -> client) with https://facebook.github.io/zstd/[Zstandard] in relay plugin (weechat protocol). |=== [NOTE] diff --git a/doc/pl/weechat_user.pl.adoc b/doc/pl/weechat_user.pl.adoc index 4fc43dc08..61ed32766 100644 --- a/doc/pl/weechat_user.pl.adoc +++ b/doc/pl/weechat_user.pl.adoc @@ -107,9 +107,12 @@ WeeChat: | pkg-config | | Wykrywa zainstalowane biblioteki. | libncursesw5-dev ^(2)^ | | Interfejs ncurses. | libcurl4-gnutls-dev | | Transfer URL. -| zlib1g-dev | | Kompresja pakietów we wtyczce relay (protokół weechat), wtyczka script. | libgcrypt20-dev | | Zabezpieczone dane, uwierzytelnianie IRC SASL. | libgnutls28-dev | ≥ 2.2.0 ^(3)^ | Połączenia SSL z serwerami IRC, wsparcie dla SSL we wtyczce relay, uwierzytelnianie IRC SASL (ECDSA-NIST256P-CHALLENGE). +// TRANSLATION MISSING +| zlib1g-dev | | Compression of messages (WeeChat -> client) with https://zlib.net/[zlib] in relay plugin (weechat protocol), script plugin. +// TRANSLATION MISSING +| libzstd-dev | | Compression of messages (WeeChat -> client) with https://facebook.github.io/zstd/[Zstandard] in relay plugin (weechat protocol). |=== [NOTE] diff --git a/doc/sr/weechat_relay_protocol.sr.adoc b/doc/sr/weechat_relay_protocol.sr.adoc index 3f9856460..fbf67e515 100644 --- a/doc/sr/weechat_relay_protocol.sr.adoc +++ b/doc/sr/weechat_relay_protocol.sr.adoc @@ -97,7 +97,8 @@ _клијенти_ су повезани са _релејем_ као што ј [[command_handshake]] === handshake -_WeeChat ≥ 2.9._ +// TRANSLATION MISSING +_WeeChat ≥ 2.9, updated in version 3.5._ Извршава руковање између клијента и програма WeeChat: ово је у већини случајева неопходно како би се сазнале поставке сесије и припремила аутентификација командом _init_. @@ -118,9 +119,16 @@ _WeeChat ≥ 2.9._ *** _sha512_: лозинка засољена и хеширана SHA512 алгоритмом *** _pbkdf2+sha256_: лозинка засољена и хеширана PBKDF2 алгоритмом (користећи SHA256 хеш) *** _pbkdf2+sha512_: лозинка засољена и хеширана PBKDF2 алгоритмом (користећи SHA512 хеш) -** _compression_: тип компресије: -*** _zlib_: укључује _zlib_ компресију порука које шаље _релеј_ (подразумевано је укључено ако _релеј_ подржава _zlib_ компресију) -*** _off_: искључује компресију +// TRANSLATION MISSING +** _compression_: list of supported compression types supported by the client + (separated by colons and sorted from most important to the fallback value); + if compression is enabled, messages from _relay_ to client are compressed + to save bandwidth; allowed values are: +*** _off_: no compression (default if option is not given) +*** _zlib_: compress with https://zlib.net/[zlib] _(WeeChat ≥ 0.3.7)_ +*** _zstd_: compress with https://facebook.github.io/zstd/[Zstandard]: better + compression and much faster than _zlib_ for both compression and decompression + _(WeeChat ≥ 3.5)_ Напомене у вези опције _password_hash_algo_: @@ -147,8 +155,9 @@ _WeeChat ≥ 2.9._ ** _off_: Time-based One-Time Password (TOTP) је искључена и није потребна у _init_ команди * _nonce_: бафер бајтова који не могу да се предвиде, послат као хексадецимална вредност, којом се спречавају replay напади; ако је _password_hash_algo_ хеш алгоритам, клијент мора да израчуна хеш лозинке над овим нонсом, спојено са клијентовим нонсом и корисничком лозинком (_релеј_ нонс + _клијент_ нонс је со која се користи у алгоритму хеширања лозинке) * _compression_: тип компресије: -** _zlib_: поруке су компресоване са _zlib_ ** _off_: поруке се не компресују +** _zlib_: поруке су компресоване са https://zlib.net/[zlib] +** _zstd_: поруке су компресоване са https://facebook.github.io/zstd/[Zstandard] [TIP] У програму WeeChat верзије ≤ 2.8, команда _handshake_ није имплементирана, програм WeeChat једноставно игнорише ову команду, чак и ако се пошаље пре _init_ команде. + @@ -172,7 +181,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -192,7 +201,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -212,7 +221,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'zlib', + 'compression': 'off', } ---- @@ -222,10 +231,12 @@ htb: { init password_hash=pbkdf2+sha256:85b1ee00695a5b254e14f4885538df0da4b73207f5aae4:100000:ba7facc3edb89cd06ae810e29ced85980ff36de2bb596fcf513aaab626876440 ---- -* Клијент подржава само „sha256” и „sha512”, компресије се искључује: +// TRANSLATION MISSING +* Клијент подржава само „sha256” и „sha512”, компресије се искључује, +enable zstd (preferred) or zlib compression: ---- -(handshake) handshake password_hash_algo=sha256:sha512,compression=off +(handshake) handshake password_hash_algo=sha256:sha512,compression=zstd:zlib ---- Одговор: @@ -238,7 +249,7 @@ htb: { 'password_hash_iterations': '100000', 'totp': 'on', 'nonce': '85B1EE00695A5B254E14F4885538DF0D', - 'compression': 'off', + 'compression': 'zstd', } ---- @@ -264,9 +275,6 @@ _Ажурирано у верзијама 2.4, 2.8, 2.9._ ** _password_: лозинка која се користи за аутентификацију са _релејем_ (опција _relay.network.password_ у програму WeeChat) ** _password_hash_: хеш лозинке која се користи за аутентификацију са _релејем_ (опција _relay.network.password_ у програму WeeChat), погледајте испод за формат _(WeeChat ≥ 2.8)_ ** _totp_: Time-based One-Time Password (TOTP) која се користи као секундарни фактор аутентификације, уз лозинку (опција _relay.network.totp_secret_ у програму WeeChat) _(WeeChat ≥ 2.4)_ -** _compression_: тип компресије (*превазиђено* почевши од верзије 2.9, остало је из разлога компатибилности, али ви требало да се пошаље у <<command_handshake,handshake команди>>): -*** _zlib_: укључује _zlib_ компресију порука које шаље _релеј_ (подразумевано је укључено ако _релеј_ подржава _zlib_ компресију) -*** _off_: искључује компресију [NOTE] У програму WeeChat верзије ≥ 1.6, у вредности могу да се означе запете, на пример `+init password=foo\,bar+` када желите да пошаљете лозинку „foo,bar”. @@ -1292,7 +1300,8 @@ quit * _дужина_ (неозначени цео број, 4 бајта): број бајтова у целој поруци (заједно са овим пољем) * _компресија_ (бајт): заставица: ** _0x00_: подаци који следе нису компресовани -** _0x01_: подаци који следе су компресовани са _zlib_ +** _0x01_: подаци који следе су компресовани са https://zlib.net/[zlib] +** _0x02_: подаци који следе су компресовани са https://facebook.github.io/zstd/[Zstandard] * _id_ (стринг, 4 бајта + садржај): идентификатор који послао клијент (пре имена команде); може бити и празан (стринг дужине нула и без садржаја) ако у команди није био наведен идентификатор * _тип_ (3 карактера): тип: 3 слова (погледајте табелу испод) * _објект_: објекат (погледајте табелу испод) @@ -1300,7 +1309,10 @@ quit [[message_compression]] === Компресија -Ако је вредност заставице _компресија_ 0x01, онда су *сви* подаци компресовани _zlib_ алгоритмом, тако да пре обраде морају да се декомпресују. +// TRANSLATION MISSING +If flag _compression_ is equal to 0x01 or 0x02, then *all* data after is compressed +with https://zlib.net/[zlib] or https://facebook.github.io/zstd/[Zstandard], +and therefore must be uncompressed before being processed. [[message_identifier]] === Идентификатор diff --git a/doc/sr/weechat_user.sr.adoc b/doc/sr/weechat_user.sr.adoc index 22587e0e6..6b25b5fb5 100644 --- a/doc/sr/weechat_user.sr.adoc +++ b/doc/sr/weechat_user.sr.adoc @@ -93,9 +93,12 @@ WeeChat почетна страница се налази на адреси: htt | pkg-config | | Детекција инсталираних библиотека. | libncursesw5-dev ^(2)^ | | Ncurses интерфејс. | libcurl4-gnutls-dev | | URL пренос. -| zlib1g-dev | | Компресија пакета у релеј додатку (weechat протокол), скрипт додатку. | libgcrypt20-dev | | Обезбеђени подаци, IRC SASL аутентификација. | libgnutls28-dev | ≥ 2.2.0 ^(3)^ | SSL веза са IRC сервером, подршка за SSL у релеј додатку, IRC SASL аутентификација (ECDSA-NIST256P-CHALLENGE). +// TRANSLATION MISSING +| zlib1g-dev | | Compression of messages (WeeChat -> client) with https://zlib.net/[zlib] in relay plugin (weechat protocol), script plugin. +// TRANSLATION MISSING +| libzstd-dev | | Compression of messages (WeeChat -> client) with https://facebook.github.io/zstd/[Zstandard] in relay plugin (weechat protocol). |=== [NOTE] diff --git a/src/core/wee-debug.c b/src/core/wee-debug.c index 3315348ab..425451c36 100644 --- a/src/core/wee-debug.c +++ b/src/core/wee-debug.c @@ -33,6 +33,7 @@ #include <gcrypt.h> #include <curl/curl.h> #include <zlib.h> +#include <zstd.h> #include <gnutls/gnutls.h> @@ -580,6 +581,12 @@ debug_libs_cb (const void *pointer, void *data, gui_chat_printf (NULL, " zlib: (?)"); #endif /* ZLIB_VERSION */ + /* display zstd version */ + gui_chat_printf (NULL, " zstd: %d.%d.%d", + ZSTD_VERSION_MAJOR, + ZSTD_VERSION_MINOR, + ZSTD_VERSION_RELEASE); + return WEECHAT_RC_OK; } diff --git a/src/plugins/relay/CMakeLists.txt b/src/plugins/relay/CMakeLists.txt index 451a54030..57e123074 100644 --- a/src/plugins/relay/CMakeLists.txt +++ b/src/plugins/relay/CMakeLists.txt @@ -43,13 +43,16 @@ set_target_properties(relay PROPERTIES PREFIX "") set(LINK_LIBS) -list(APPEND LINK_LIBS ${ZLIB_LIBRARY}) - include_directories(${GNUTLS_INCLUDE_PATH}) list(APPEND LINK_LIBS ${GNUTLS_LIBRARY}) list(APPEND LINK_LIBS ${GCRYPT_LDFLAGS}) +list(APPEND LINK_LIBS ${ZLIB_LIBRARY}) + +include_directories(${ZSTD_INCLUDE_DIRS}) +list(APPEND LINK_LIBS ${LIBZSTD_LDFLAGS}) + target_link_libraries(relay ${LINK_LIBS} coverage_config) install(TARGETS relay LIBRARY DESTINATION ${WEECHAT_LIBDIR}/plugins) diff --git a/src/plugins/relay/Makefile.am b/src/plugins/relay/Makefile.am index 1fcee124f..c84d09569 100644 --- a/src/plugins/relay/Makefile.am +++ b/src/plugins/relay/Makefile.am @@ -17,7 +17,7 @@ # along with WeeChat. If not, see <https://www.gnu.org/licenses/>. # -AM_CPPFLAGS = -DLOCALEDIR=\"$(datadir)/locale\" $(ZLIB_CFLAGS) $(GCRYPT_CFLAGS) $(GNUTLS_CFLAGS) +AM_CPPFLAGS = -DLOCALEDIR=\"$(datadir)/locale\" $(GCRYPT_CFLAGS) $(GNUTLS_CFLAGS) $(ZLIB_CFLAGS) $(ZSTD_CFLAGS) libdir = ${weechat_libdir}/plugins @@ -61,6 +61,6 @@ relay_la_SOURCES = relay.c \ weechat/relay-weechat-protocol.h relay_la_LDFLAGS = -module -no-undefined -relay_la_LIBADD = $(RELAY_LFLAGS) $(ZLIB_LFLAGS) $(GCRYPT_LFLAGS) $(GNUTLS_LFLAGS) +relay_la_LIBADD = $(RELAY_LFLAGS) $(GCRYPT_LFLAGS) $(GNUTLS_LFLAGS) $(ZLIB_LFLAGS) $(ZSTD_LFLAGS) EXTRA_DIST = CMakeLists.txt diff --git a/src/plugins/relay/relay-config.c b/src/plugins/relay/relay-config.c index 790a38a53..3e85e182e 100644 --- a/src/plugins/relay/relay-config.c +++ b/src/plugins/relay/relay-config.c @@ -63,7 +63,7 @@ struct t_config_option *relay_config_network_allowed_ips; struct t_config_option *relay_config_network_auth_timeout; 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_compression; struct t_config_option *relay_config_network_ipv6; struct t_config_option *relay_config_network_max_clients; struct t_config_option *relay_config_network_nonce_size; @@ -1070,13 +1070,16 @@ relay_config_init () "clients immediately, -1 = never purge)"), NULL, -1, 60 * 24 * 30, "0", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); - relay_config_network_compression_level = weechat_config_new_option ( + relay_config_network_compression = weechat_config_new_option ( relay_config_file, ptr_section, - "compression_level", "integer", - N_("compression level for packets sent to client with WeeChat protocol " - "(0 = disable compression, 1 = low compression ... 9 = best " - "compression)"), - NULL, 0, 9, "6", NULL, 0, + "compression", "integer", + N_("compression for packets sent to client with WeeChat " + "protocol: 0 = disable compression, 1 = low compression, fast " + "... 100 = best compression, slow; the value is a percentage " + "converted to 1-9 for zlib and 1-19 for zstd; " + "default value is 20 which is a sane default and offers good " + "compression and speed"), + NULL, 0, 100, "20", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL); relay_config_network_ipv6 = weechat_config_new_option ( relay_config_file, ptr_section, diff --git a/src/plugins/relay/relay-config.h b/src/plugins/relay/relay-config.h index d5b9c9372..41d970bf3 100644 --- a/src/plugins/relay/relay-config.h +++ b/src/plugins/relay/relay-config.h @@ -42,7 +42,7 @@ extern struct t_config_option *relay_config_network_allowed_ips; extern struct t_config_option *relay_config_network_auth_timeout; 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_compression; extern struct t_config_option *relay_config_network_ipv6; extern struct t_config_option *relay_config_network_max_clients; extern struct t_config_option *relay_config_network_nonce_size; diff --git a/src/plugins/relay/weechat/relay-weechat-msg.c b/src/plugins/relay/weechat/relay-weechat-msg.c index 7703604d1..b11c68b88 100644 --- a/src/plugins/relay/weechat/relay-weechat-msg.c +++ b/src/plugins/relay/weechat/relay-weechat-msg.c @@ -29,6 +29,7 @@ #include <errno.h> #include <arpa/inet.h> #include <zlib.h> +#include <zstd.h> #include "../../weechat-plugin.h" #include "../relay.h" @@ -1027,62 +1028,171 @@ relay_weechat_msg_add_nicklist (struct t_relay_weechat_msg *msg, } /* - * Sends a message. + * Compresses the message with zlib. + * + * Returns: + * 1: OK, message compressed and sent + * 0: error, no message sent */ -void -relay_weechat_msg_send (struct t_relay_client *client, - struct t_relay_weechat_msg *msg) +int +relay_weechat_msg_compress_zlib (struct t_relay_client *client, + struct t_relay_weechat_msg *msg) { + char raw_message[1024]; uint32_t size32; - char compression, raw_message[1024]; - int rc; Bytef *dest; uLongf dest_size; struct timeval tv1, tv2; long long time_diff; + int rc, rc_compress, compression, compression_level; + + rc = 0; + dest = NULL; + + dest_size = compressBound (msg->data_size - 5); + dest = malloc (dest_size + 5); + if (!dest) + goto error; + + /* convert % to zlib compression level (1-9) */ + compression = weechat_config_integer (relay_config_network_compression); + compression_level = (((compression - 1) * 9) / 100) + 1; + + gettimeofday (&tv1, NULL); + rc_compress = compress2 ( + dest + 5, + &dest_size, + (Bytef *)(msg->data + 5), + msg->data_size - 5, + compression_level); + gettimeofday (&tv2, NULL); + time_diff = weechat_util_timeval_diff (&tv1, &tv2); + if ((rc_compress != Z_OK) || ((int)dest_size + 5 >= msg->data_size)) + goto error; + + /* set size and compression flag */ + size32 = htonl ((uint32_t)(dest_size + 5)); + memcpy (dest, &size32, 4); + dest[4] = RELAY_WEECHAT_COMPRESSION_ZLIB; + + /* display message in raw buffer */ + snprintf (raw_message, sizeof (raw_message), + "obj: %d/%d bytes (zlib: %d%%, %.2fms), id: %s", + (int)dest_size + 5, + msg->data_size, + 100 - ((((int)dest_size + 5) * 100) / msg->data_size), + ((float)time_diff) / 1000, + msg->id); + + /* send compressed data */ + relay_client_send (client, RELAY_CLIENT_MSG_STANDARD, + (const char *)dest, dest_size + 5, + raw_message); + + rc = 1; + +error: + if (dest) + free (dest); + + return rc; +} + +/* + * Compresses the message with zstd. + * + * Returns: + * 1: OK, message compressed and sent + * 0: error, no message sent + */ + +int +relay_weechat_msg_compress_zstd (struct t_relay_client *client, + struct t_relay_weechat_msg *msg) +{ + char raw_message[1024]; + uint32_t size32; + Bytef *dest; + size_t dest_size, comp_size; + struct timeval tv1, tv2; + long long time_diff; + int rc, compression, compression_level; + + rc = 0; + dest = NULL; + + dest_size = ZSTD_compressBound (msg->data_size - 5); + dest = malloc (dest_size + 5); + if (!dest) + goto error; + + /* convert % to zstd compression level (1-19) */ + compression = weechat_config_integer (relay_config_network_compression); + compression_level = (((compression - 1) * 19) / 100) + 1; + + gettimeofday (&tv1, NULL); + comp_size = ZSTD_compress( + dest + 5, + dest_size, + (void *)(msg->data + 5), + msg->data_size - 5, + compression_level); + gettimeofday (&tv2, NULL); + time_diff = weechat_util_timeval_diff (&tv1, &tv2); + if ((comp_size == 0) || ((int)comp_size + 5 >= msg->data_size)) + goto error; + + /* set size and compression flag */ + size32 = htonl ((uint32_t)(comp_size + 5)); + memcpy (dest, &size32, 4); + dest[4] = RELAY_WEECHAT_COMPRESSION_ZSTD; + + /* display message in raw buffer */ + snprintf (raw_message, sizeof (raw_message), + "obj: %d/%d bytes (zstd: %d%%, %.2fms), id: %s", + (int)comp_size + 5, + msg->data_size, + 100 - ((((int)comp_size + 5) * 100) / msg->data_size), + ((float)time_diff) / 1000, + msg->id); + + /* send compressed data */ + relay_client_send (client, RELAY_CLIENT_MSG_STANDARD, + (const char *)dest, comp_size + 5, + raw_message); + + rc = 1; + +error: + if (dest) + free (dest); - if (weechat_config_integer (relay_config_network_compression_level) > 0) + return rc; +} + +/* + * Sends a message. + */ + +void +relay_weechat_msg_send (struct t_relay_client *client, + struct t_relay_weechat_msg *msg) +{ + char compression, raw_message[1024]; + uint32_t size32; + + if (weechat_config_integer (relay_config_network_compression) > 0) { switch (RELAY_WEECHAT_DATA(client, compression)) { case RELAY_WEECHAT_COMPRESSION_ZLIB: - dest_size = compressBound (msg->data_size - 5); - dest = malloc (dest_size + 5); - if (dest) - { - gettimeofday (&tv1, NULL); - rc = compress2 (dest + 5, &dest_size, - (Bytef *)(msg->data + 5), msg->data_size - 5, - weechat_config_integer (relay_config_network_compression_level)); - gettimeofday (&tv2, NULL); - time_diff = weechat_util_timeval_diff (&tv1, &tv2); - if ((rc == Z_OK) && ((int)dest_size + 5 < msg->data_size)) - { - /* set size and compression flag */ - size32 = htonl ((uint32_t)(dest_size + 5)); - memcpy (dest, &size32, 4); - dest[4] = RELAY_WEECHAT_COMPRESSION_ZLIB; - - /* display message in raw buffer */ - snprintf (raw_message, sizeof (raw_message), - "obj: %d/%d bytes (%d%%, %.2fms), id: %s", - (int)dest_size + 5, - msg->data_size, - 100 - ((((int)dest_size + 5) * 100) / msg->data_size), - ((float)time_diff) / 1000, - msg->id); - - /* send compressed data */ - relay_client_send (client, RELAY_CLIENT_MSG_STANDARD, - (const char *)dest, dest_size + 5, - raw_message); - - free (dest); - return; - } - free (dest); - } + if (relay_weechat_msg_compress_zlib (client, msg)) + return; + break; + case RELAY_WEECHAT_COMPRESSION_ZSTD: + if (relay_weechat_msg_compress_zstd (client, msg)) + return; break; default: break; diff --git a/src/plugins/relay/weechat/relay-weechat-protocol.c b/src/plugins/relay/weechat/relay-weechat-protocol.c index d8f1bf212..49188decb 100644 --- a/src/plugins/relay/weechat/relay-weechat-protocol.c +++ b/src/plugins/relay/weechat/relay-weechat-protocol.c @@ -229,7 +229,7 @@ relay_weechat_protocol_handshake_reply (struct t_relay_client *client, RELAY_WEECHAT_PROTOCOL_CALLBACK(handshake) { - char **options, **auths, *pos; + char **options, **auths, **compressions, *pos; int i, j, index_hash_algo, hash_algo_found, auth_allowed, compression; int password_received, plain_text_password; @@ -292,9 +292,28 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(handshake) } else if (strcmp (options[i], "compression") == 0) { - compression = relay_weechat_compression_search (pos); - if (compression >= 0) - RELAY_WEECHAT_DATA(client, compression) = compression; + compressions = weechat_string_split ( + pos, + ":", + NULL, + WEECHAT_STRING_SPLIT_STRIP_LEFT + | WEECHAT_STRING_SPLIT_STRIP_RIGHT + | WEECHAT_STRING_SPLIT_COLLAPSE_SEPS, + 0, + NULL); + if (compressions) + { + for (j = 0; compressions[j]; j++) + { + compression = relay_weechat_compression_search (compressions[j]); + if (compression >= 0) + { + RELAY_WEECHAT_DATA(client, compression) = compression; + break; + } + } + weechat_string_free_split (compressions); + } } } } @@ -337,12 +356,9 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(handshake) * hash is given in hexadecimal * totp time-based one time password used as secondary * authentication factor - * compression zlib (default) or off * * Message looks like: * init password=mypass - * init password=mypass,compression=zlib - * init password=mypass,compression=off * init password_hash=sha256:71c480df93d6ae2f1efad1447c66c9…,totp=123456 * init password_hash=pbkdf2:sha256:414232…:100000:01757d53157c…,totp=123456 */ @@ -350,7 +366,7 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(handshake) RELAY_WEECHAT_PROTOCOL_CALLBACK(init) { char **options, *pos, *relay_password, *totp_secret, *info_totp_args, *info_totp; - int i, compression, length, password_received, totp_received; + int i, length, password_received, totp_received; RELAY_WEECHAT_PROTOCOL_MIN_ARGS(0); @@ -411,12 +427,6 @@ RELAY_WEECHAT_PROTOCOL_CALLBACK(init) } } } - else if (strcmp (options[i], "compression") == 0) - { - compression = relay_weechat_compression_search (pos); - if (compression >= 0) - RELAY_WEECHAT_DATA(client, compression) = compression; - } } } weechat_string_free_split_command (options); diff --git a/src/plugins/relay/weechat/relay-weechat.c b/src/plugins/relay/weechat/relay-weechat.c index c12bf1cf2..8bdbb28ed 100644 --- a/src/plugins/relay/weechat/relay-weechat.c +++ b/src/plugins/relay/weechat/relay-weechat.c @@ -41,7 +41,7 @@ char *relay_weechat_compression_string[] = /* strings for compression */ -{ "off", "zlib" }; +{ "off", "zlib", "zstd" }; /* @@ -173,7 +173,7 @@ relay_weechat_alloc (struct t_relay_client *client) RELAY_WEECHAT_DATA(client, handshake_done) = 0; RELAY_WEECHAT_DATA(client, password_ok) = 0; RELAY_WEECHAT_DATA(client, totp_ok) = 0; - RELAY_WEECHAT_DATA(client, compression) = RELAY_WEECHAT_COMPRESSION_ZLIB; + RELAY_WEECHAT_DATA(client, compression) = RELAY_WEECHAT_COMPRESSION_OFF; RELAY_WEECHAT_DATA(client, buffers_sync) = weechat_hashtable_new (32, WEECHAT_HASHTABLE_STRING, diff --git a/src/plugins/relay/weechat/relay-weechat.h b/src/plugins/relay/weechat/relay-weechat.h index c8339398b..1229ce8da 100644 --- a/src/plugins/relay/weechat/relay-weechat.h +++ b/src/plugins/relay/weechat/relay-weechat.h @@ -34,6 +34,7 @@ enum t_relay_weechat_compression { RELAY_WEECHAT_COMPRESSION_OFF = 0, /* no compression of binary objects */ RELAY_WEECHAT_COMPRESSION_ZLIB, /* zlib compression */ + RELAY_WEECHAT_COMPRESSION_ZSTD, /* Zstandard compression */ /* number of compressions */ RELAY_WEECHAT_NUM_COMPRESSIONS, }; diff --git a/tools/debian/patches/README b/tools/debian/patches/README index a251bab14..3a2699a55 100644 --- a/tools/debian/patches/README +++ b/tools/debian/patches/README @@ -2,14 +2,3 @@ This directory contains patches that must be applied for some old Debian/Ubuntu versions, in order to build Debian packages. They are automatically applied by the script "tools/build-debian.sh". - -Notes for some versions of distributions: - -* asciidoctor: - - On these distributions, asciidoctor must be installed manually with the command - "gem install asciidoctor" (as root): - - - Debian jessie (8.0) - - Debian wheezy (7.0) - - Ubuntu trusty (14.04) diff --git a/tools/debian/patches/weechat_debian_jessie.patch b/tools/debian/patches/weechat_debian_jessie.patch deleted file mode 100644 index 4f695f2f6..000000000 --- a/tools/debian/patches/weechat_debian_jessie.patch +++ /dev/null @@ -1,217 +0,0 @@ -diff --git a/debian-devel/compat b/debian-devel/compat -index 48082f72f..ec635144f 100644 ---- a/debian-devel/compat -+++ b/debian-devel/compat -@@ -1 +1 @@ --12 -+9 -diff --git a/debian-devel/control b/debian-devel/control -index bf94a36f1..7e7c82a21 100644 ---- a/debian-devel/control -+++ b/debian-devel/control -@@ -3,19 +3,16 @@ Section: net - Priority: optional - Maintainer: Sébastien Helleu <flashcode@flashtux.org> - Build-Depends: -- asciidoctor (>= 1.5.4), -- debhelper (>= 12), -+ debhelper (>= 9), - cmake, pkg-config, - libncursesw5-dev, - gem2deb, - libperl-dev, - python3-dev, - libaspell-dev, -- liblua5.3-dev, -+ liblua5.1-0-dev, - tcl8.6-dev, -- guile-2.2-dev, -- php-dev, libphp-embed, libargon2-0-dev, libsodium-dev, -- libxml2-dev, -+ guile-2.0-dev, - libcurl4-gnutls-dev, - libgcrypt20-dev, - libgnutls28-dev, -@@ -46,7 +43,7 @@ Description: Fast, light and extensible chat client (metapackage) - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -76,7 +73,7 @@ Description: Fast, light and extensible chat client - console client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -107,7 +104,7 @@ Description: Fast, light and extensible chat client - headless client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -232,20 +229,6 @@ Description: Fast, light and extensible chat client - Guile plugin - . - This package provides the Guile scripting API plugin. - --Package: weechat-devel-php --Architecture: any --Depends: -- ${misc:Depends}, -- ${shlibs:Depends}, -- weechat-devel-curses (= ${binary:Version}) | weechat-devel-headless (= ${binary:Version}), -- libphp-embed --Conflicts: weechat-php --Description: Fast, light and extensible chat client - PHP plugin -- WeeChat (Wee Enhanced Environment for Chat) is a fast and light chat client -- for many operating systems. Everything can be done with a keyboard. -- . -- This package provides the PHP scripting API plugin. -- - Package: weechat-devel-doc - Section: doc - Architecture: all -diff --git a/debian-devel/rules b/debian-devel/rules -index 16a5f9516..e42c2a6b2 100755 ---- a/debian-devel/rules -+++ b/debian-devel/rules -@@ -12,6 +12,7 @@ $(BUILDDIR)/Makefile: - -DLIBDIR=/usr/lib/${DEB_HOST_MULTIARCH} \ - -DENABLE_DOC:BOOL=ON \ - -DENABLE_MAN:BOOL=ON \ -+ -DENABLE_PHP:BOOL=OFF \ - -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ - -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="$(CFLAGS) -D_FORTIFY_SOURCE=2" \ - -DCMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING="$(LDFLAGS)" \ -diff --git a/debian-devel/weechat-devel-php.dirs b/debian-devel/weechat-devel-php.dirs -deleted file mode 120000 -index e4853a588..000000000 ---- a/debian-devel/weechat-devel-php.dirs -+++ /dev/null -@@ -1 +0,0 @@ --../debian-stable/weechat-php.dirs -\ No newline at end of file -diff --git a/debian-devel/weechat-devel-php.install b/debian-devel/weechat-devel-php.install -deleted file mode 120000 -index e358b515a..000000000 ---- a/debian-devel/weechat-devel-php.install -+++ /dev/null -@@ -1 +0,0 @@ --../debian-stable/weechat-php.install -\ No newline at end of file -diff --git a/debian-stable/compat b/debian-stable/compat -index 48082f72f..ec635144f 100644 ---- a/debian-stable/compat -+++ b/debian-stable/compat -@@ -1 +1 @@ --12 -+9 -diff --git a/debian-stable/control b/debian-stable/control -index ccf81cac8..d753f6856 100644 ---- a/debian-stable/control -+++ b/debian-stable/control -@@ -3,19 +3,16 @@ Section: net - Priority: optional - Maintainer: Emmanuel Bouthenot <kolter@debian.org> - Build-Depends: -- asciidoctor (>= 1.5.4), -- debhelper (>= 12), -+ debhelper (>= 9), - cmake, pkg-config, - libncursesw5-dev, - gem2deb, - libperl-dev, - python3-dev, - libaspell-dev, -- liblua5.3-dev, -+ liblua5.1-0-dev, - tcl8.6-dev, -- guile-2.2-dev, -- php-dev, libphp-embed, libargon2-0-dev, libsodium-dev, -- libxml2-dev, -+ guile-2.0-dev, - libcurl4-gnutls-dev, - libgcrypt20-dev, - libgnutls28-dev, -@@ -45,7 +42,7 @@ Description: Fast, light and extensible chat client (metapackage) - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -74,7 +71,7 @@ Description: Fast, light and extensible chat client - console client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -104,7 +101,7 @@ Description: Fast, light and extensible chat client - headless client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -221,19 +218,6 @@ Description: Fast, light and extensible chat client - Guile plugin - . - This package provides the Guile scripting API plugin. - --Package: weechat-php --Architecture: any --Depends: -- ${misc:Depends}, -- ${shlibs:Depends}, -- weechat-curses (= ${binary:Version}) | weechat-headless (= ${binary:Version}), -- libphp-embed --Description: Fast, light and extensible chat client - PHP plugin -- WeeChat (Wee Enhanced Environment for Chat) is a fast and light chat client -- for many operating systems. Everything can be done with a keyboard. -- . -- This package provides the PHP scripting API plugin. -- - Package: weechat-doc - Section: doc - Architecture: all -diff --git a/debian-stable/rules b/debian-stable/rules -index 16a5f9516..e42c2a6b2 100755 ---- a/debian-stable/rules -+++ b/debian-stable/rules -@@ -12,6 +12,7 @@ $(BUILDDIR)/Makefile: - -DLIBDIR=/usr/lib/${DEB_HOST_MULTIARCH} \ - -DENABLE_DOC:BOOL=ON \ - -DENABLE_MAN:BOOL=ON \ -+ -DENABLE_PHP:BOOL=OFF \ - -DCMAKE_BUILD_TYPE:STRING=RelWithDebInfo \ - -DCMAKE_C_FLAGS_RELWITHDEBINFO:STRING="$(CFLAGS) -D_FORTIFY_SOURCE=2" \ - -DCMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING="$(LDFLAGS)" \ -diff --git a/debian-stable/weechat-php.dirs b/debian-stable/weechat-php.dirs -deleted file mode 100644 -index 68457717b..000000000 ---- a/debian-stable/weechat-php.dirs -+++ /dev/null -@@ -1 +0,0 @@ --usr/lib -diff --git a/debian-stable/weechat-php.install b/debian-stable/weechat-php.install -deleted file mode 100644 -index 0a1b73563..000000000 ---- a/debian-stable/weechat-php.install -+++ /dev/null -@@ -1 +0,0 @@ --usr/lib/*/weechat/plugins/php.so diff --git a/tools/debian/patches/weechat_debian_wheezy.patch b/tools/debian/patches/weechat_debian_wheezy.patch deleted file mode 100644 index 3ada32109..000000000 --- a/tools/debian/patches/weechat_debian_wheezy.patch +++ /dev/null @@ -1,227 +0,0 @@ -diff --git a/debian-devel/compat b/debian-devel/compat -index 48082f72f..ec635144f 100644 ---- a/debian-devel/compat -+++ b/debian-devel/compat -@@ -1 +1 @@ --12 -+9 -diff --git a/debian-devel/control b/debian-devel/control -index bf94a36f1..8d4d60e9f 100644 ---- a/debian-devel/control -+++ b/debian-devel/control -@@ -3,8 +3,7 @@ Section: net - Priority: optional - Maintainer: Sébastien Helleu <flashcode@flashtux.org> - Build-Depends: -- asciidoctor (>= 1.5.4), -- debhelper (>= 12), -+ debhelper (>= 9), - cmake, pkg-config, - libncursesw5-dev, - gem2deb, -@@ -12,13 +11,11 @@ Build-Depends: - python3-dev, - libaspell-dev, - liblua5.3-dev, -- tcl8.6-dev, -- guile-2.2-dev, -- php-dev, libphp-embed, libargon2-0-dev, libsodium-dev, -- libxml2-dev, -+ tcl8.5-dev, -+ guile-2.0-dev, - libcurl4-gnutls-dev, -- libgcrypt20-dev, -- libgnutls28-dev, -+ libgcrypt11-dev, -+ libgnutls-dev, - zlib1g-dev - Standards-Version: 4.6.0.1 - Homepage: https://weechat.org/ -@@ -46,7 +43,7 @@ Description: Fast, light and extensible chat client (metapackage) - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -76,7 +73,7 @@ Description: Fast, light and extensible chat client - console client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -107,7 +104,7 @@ Description: Fast, light and extensible chat client - headless client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -232,20 +229,6 @@ Description: Fast, light and extensible chat client - Guile plugin - . - This package provides the Guile scripting API plugin. - --Package: weechat-devel-php --Architecture: any --Depends: -- ${misc:Depends}, -- ${shlibs:Depends}, -- weechat-devel-curses (= ${binary:Version}) | weechat-devel-headless (= ${binary:Version}), -- libphp-embed --Conflicts: weechat-php --Description: Fast, light and extensible chat client - PHP plugin -- WeeChat (Wee Enhanced Environment for Chat) is a fast and light chat client -- for many operating systems. Everything can be done with a keyboard. -- . -- This package provides the PHP scripting API plugin. -- - Package: weechat-devel-doc - Section: doc - Architecture: all -diff --git a/debian-devel/rules b/debian-devel/rules -index 16a5f9516..3edb65fa5 100755 ---- a/debian-devel/rules -+++ b/debian-devel/rules -@@ -1,7 +1,5 @@ - #!/usr/bin/make -f - --export DEB_BUILD_MAINT_OPTIONS=hardening=+all -- - BUILDDIR = builddir - - $(BUILDDIR)/Makefile: -diff --git a/debian-devel/weechat-devel-php.dirs b/debian-devel/weechat-devel-php.dirs -deleted file mode 120000 -index e4853a588..000000000 ---- a/debian-devel/weechat-devel-php.dirs -+++ /dev/null -@@ -1 +0,0 @@ --../debian-stable/weechat-php.dirs -\ No newline at end of file -diff --git a/debian-devel/weechat-devel-php.install b/debian-devel/weechat-devel-php.install -deleted file mode 120000 -index e358b515a..000000000 ---- a/debian-devel/weechat-devel-php.install -+++ /dev/null -@@ -1 +0,0 @@ --../debian-stable/weechat-php.install -\ No newline at end of file -diff --git a/debian-stable/compat b/debian-stable/compat -index 48082f72f..ec635144f 100644 ---- a/debian-stable/compat -+++ b/debian-stable/compat -@@ -1 +1 @@ --12 -+9 -diff --git a/debian-stable/control b/debian-stable/control -index ccf81cac8..ee2e092eb 100644 ---- a/debian-stable/control -+++ b/debian-stable/control -@@ -3,8 +3,7 @@ Section: net - Priority: optional - Maintainer: Emmanuel Bouthenot <kolter@debian.org> - Build-Depends: -- asciidoctor (>= 1.5.4), -- debhelper (>= 12), -+ debhelper (>= 9), - cmake, pkg-config, - libncursesw5-dev, - gem2deb, -@@ -12,13 +11,11 @@ Build-Depends: - python3-dev, - libaspell-dev, - liblua5.3-dev, -- tcl8.6-dev, -- guile-2.2-dev, -- php-dev, libphp-embed, libargon2-0-dev, libsodium-dev, -- libxml2-dev, -+ tcl8.5-dev, -+ guile-2.0-dev, - libcurl4-gnutls-dev, -- libgcrypt20-dev, -- libgnutls28-dev, -+ libgcrypt11-dev, -+ libgnutls-dev, - zlib1g-dev - Standards-Version: 4.6.0.1 - Homepage: https://weechat.org/ -@@ -45,7 +42,7 @@ Description: Fast, light and extensible chat client (metapackage) - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -74,7 +71,7 @@ Description: Fast, light and extensible chat client - console client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -104,7 +101,7 @@ Description: Fast, light and extensible chat client - headless client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -221,19 +218,6 @@ Description: Fast, light and extensible chat client - Guile plugin - . - This package provides the Guile scripting API plugin. - --Package: weechat-php --Architecture: any --Depends: -- ${misc:Depends}, -- ${shlibs:Depends}, -- weechat-curses (= ${binary:Version}) | weechat-headless (= ${binary:Version}), -- libphp-embed --Description: Fast, light and extensible chat client - PHP plugin -- WeeChat (Wee Enhanced Environment for Chat) is a fast and light chat client -- for many operating systems. Everything can be done with a keyboard. -- . -- This package provides the PHP scripting API plugin. -- - Package: weechat-doc - Section: doc - Architecture: all -diff --git a/debian-stable/rules b/debian-stable/rules -index 16a5f9516..3edb65fa5 100755 ---- a/debian-stable/rules -+++ b/debian-stable/rules -@@ -1,7 +1,5 @@ - #!/usr/bin/make -f - --export DEB_BUILD_MAINT_OPTIONS=hardening=+all -- - BUILDDIR = builddir - - $(BUILDDIR)/Makefile: -diff --git a/debian-stable/weechat-php.dirs b/debian-stable/weechat-php.dirs -deleted file mode 100644 -index 68457717b..000000000 ---- a/debian-stable/weechat-php.dirs -+++ /dev/null -@@ -1 +0,0 @@ --usr/lib -diff --git a/debian-stable/weechat-php.install b/debian-stable/weechat-php.install -deleted file mode 100644 -index 0a1b73563..000000000 ---- a/debian-stable/weechat-php.install -+++ /dev/null -@@ -1 +0,0 @@ --usr/lib/*/weechat/plugins/php.so diff --git a/tools/debian/patches/weechat_ubuntu_artful.patch b/tools/debian/patches/weechat_ubuntu_artful.patch deleted file mode 120000 index ab23b0230..000000000 --- a/tools/debian/patches/weechat_ubuntu_artful.patch +++ /dev/null @@ -1 +0,0 @@ -weechat_debian_stretch.patch
\ No newline at end of file diff --git a/tools/debian/patches/weechat_ubuntu_bionic.patch b/tools/debian/patches/weechat_ubuntu_bionic.patch index 6e83bab00..c1a9f6d57 120000..100644 --- a/tools/debian/patches/weechat_ubuntu_bionic.patch +++ b/tools/debian/patches/weechat_ubuntu_bionic.patch @@ -1 +1,40 @@ -weechat_ubuntu_disco.patch
\ No newline at end of file +diff --git a/debian-devel/compat b/debian-devel/compat +index 48082f72f..b4de39476 100644 +--- a/debian-devel/compat ++++ b/debian-devel/compat +@@ -1 +1 @@ +-12 ++11 +diff --git a/debian-devel/control b/debian-devel/control +index a6cc3c91c..d078d35b7 100644 +--- a/debian-devel/control ++++ b/debian-devel/control +@@ -4,7 +4,7 @@ Priority: optional + Maintainer: Sébastien Helleu <flashcode@flashtux.org> + Build-Depends: + asciidoctor (>= 1.5.4), +- debhelper (>= 12), ++ debhelper (>= 11), + cmake, pkg-config, + libncursesw5-dev, + gem2deb, +diff --git a/debian-stable/compat b/debian-stable/compat +index 48082f72f..b4de39476 100644 +--- a/debian-stable/compat ++++ b/debian-stable/compat +@@ -1 +1 @@ +-12 ++11 +diff --git a/debian-stable/control b/debian-stable/control +index 1b0a27009..7880ce7bd 100644 +--- a/debian-stable/control ++++ b/debian-stable/control +@@ -4,7 +4,7 @@ Priority: optional + Maintainer: Emmanuel Bouthenot <kolter@debian.org> + Build-Depends: + asciidoctor (>= 1.5.4), +- debhelper (>= 12), ++ debhelper (>= 11), + cmake, pkg-config, + libncursesw5-dev, + gem2deb, diff --git a/tools/debian/patches/weechat_ubuntu_cosmic.patch b/tools/debian/patches/weechat_ubuntu_cosmic.patch deleted file mode 120000 index 6e83bab00..000000000 --- a/tools/debian/patches/weechat_ubuntu_cosmic.patch +++ /dev/null @@ -1 +0,0 @@ -weechat_ubuntu_disco.patch
\ No newline at end of file diff --git a/tools/debian/patches/weechat_ubuntu_disco.patch b/tools/debian/patches/weechat_ubuntu_disco.patch deleted file mode 100644 index c1a9f6d57..000000000 --- a/tools/debian/patches/weechat_ubuntu_disco.patch +++ /dev/null @@ -1,40 +0,0 @@ -diff --git a/debian-devel/compat b/debian-devel/compat -index 48082f72f..b4de39476 100644 ---- a/debian-devel/compat -+++ b/debian-devel/compat -@@ -1 +1 @@ --12 -+11 -diff --git a/debian-devel/control b/debian-devel/control -index a6cc3c91c..d078d35b7 100644 ---- a/debian-devel/control -+++ b/debian-devel/control -@@ -4,7 +4,7 @@ Priority: optional - Maintainer: Sébastien Helleu <flashcode@flashtux.org> - Build-Depends: - asciidoctor (>= 1.5.4), -- debhelper (>= 12), -+ debhelper (>= 11), - cmake, pkg-config, - libncursesw5-dev, - gem2deb, -diff --git a/debian-stable/compat b/debian-stable/compat -index 48082f72f..b4de39476 100644 ---- a/debian-stable/compat -+++ b/debian-stable/compat -@@ -1 +1 @@ --12 -+11 -diff --git a/debian-stable/control b/debian-stable/control -index 1b0a27009..7880ce7bd 100644 ---- a/debian-stable/control -+++ b/debian-stable/control -@@ -4,7 +4,7 @@ Priority: optional - Maintainer: Emmanuel Bouthenot <kolter@debian.org> - Build-Depends: - asciidoctor (>= 1.5.4), -- debhelper (>= 12), -+ debhelper (>= 11), - cmake, pkg-config, - libncursesw5-dev, - gem2deb, diff --git a/tools/debian/patches/weechat_ubuntu_trusty.patch b/tools/debian/patches/weechat_ubuntu_trusty.patch deleted file mode 100644 index 505146a9d..000000000 --- a/tools/debian/patches/weechat_ubuntu_trusty.patch +++ /dev/null @@ -1,199 +0,0 @@ -diff --git a/debian-devel/compat b/debian-devel/compat -index 48082f72f..ec635144f 100644 ---- a/debian-devel/compat -+++ b/debian-devel/compat -@@ -1 +1 @@ --12 -+9 -diff --git a/debian-devel/control b/debian-devel/control -index bf94a36f1..566d71f09 100644 ---- a/debian-devel/control -+++ b/debian-devel/control -@@ -3,8 +3,7 @@ Section: net - Priority: optional - Maintainer: Sébastien Helleu <flashcode@flashtux.org> - Build-Depends: -- asciidoctor (>= 1.5.4), -- debhelper (>= 12), -+ debhelper (>= 9), - cmake, pkg-config, - libncursesw5-dev, - gem2deb, -@@ -13,12 +12,10 @@ Build-Depends: - libaspell-dev, - liblua5.3-dev, - tcl8.6-dev, -- guile-2.2-dev, -- php-dev, libphp-embed, libargon2-0-dev, libsodium-dev, -- libxml2-dev, -+ guile-2.0-dev, - libcurl4-gnutls-dev, -- libgcrypt20-dev, -- libgnutls28-dev, -+ libgcrypt11-dev, -+ libgnutls-dev, - zlib1g-dev - Standards-Version: 4.6.0.1 - Homepage: https://weechat.org/ -@@ -46,7 +43,7 @@ Description: Fast, light and extensible chat client (metapackage) - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -76,7 +73,7 @@ Description: Fast, light and extensible chat client - console client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -107,7 +104,7 @@ Description: Fast, light and extensible chat client - headless client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -232,20 +229,6 @@ Description: Fast, light and extensible chat client - Guile plugin - . - This package provides the Guile scripting API plugin. - --Package: weechat-devel-php --Architecture: any --Depends: -- ${misc:Depends}, -- ${shlibs:Depends}, -- weechat-devel-curses (= ${binary:Version}) | weechat-devel-headless (= ${binary:Version}), -- libphp-embed --Conflicts: weechat-php --Description: Fast, light and extensible chat client - PHP plugin -- WeeChat (Wee Enhanced Environment for Chat) is a fast and light chat client -- for many operating systems. Everything can be done with a keyboard. -- . -- This package provides the PHP scripting API plugin. -- - Package: weechat-devel-doc - Section: doc - Architecture: all -diff --git a/debian-devel/weechat-devel-php.dirs b/debian-devel/weechat-devel-php.dirs -deleted file mode 120000 -index e4853a588..000000000 ---- a/debian-devel/weechat-devel-php.dirs -+++ /dev/null -@@ -1 +0,0 @@ --../debian-stable/weechat-php.dirs -\ No newline at end of file -diff --git a/debian-devel/weechat-devel-php.install b/debian-devel/weechat-devel-php.install -deleted file mode 120000 -index e358b515a..000000000 ---- a/debian-devel/weechat-devel-php.install -+++ /dev/null -@@ -1 +0,0 @@ --../debian-stable/weechat-php.install -\ No newline at end of file -diff --git a/debian-stable/compat b/debian-stable/compat -index 48082f72f..ec635144f 100644 ---- a/debian-stable/compat -+++ b/debian-stable/compat -@@ -1 +1 @@ --12 -+9 -diff --git a/debian-stable/control b/debian-stable/control -index ccf81cac8..b11b9b64e 100644 ---- a/debian-stable/control -+++ b/debian-stable/control -@@ -3,8 +3,7 @@ Section: net - Priority: optional - Maintainer: Emmanuel Bouthenot <kolter@debian.org> - Build-Depends: -- asciidoctor (>= 1.5.4), -- debhelper (>= 12), -+ debhelper (>= 9), - cmake, pkg-config, - libncursesw5-dev, - gem2deb, -@@ -13,12 +12,10 @@ Build-Depends: - libaspell-dev, - liblua5.3-dev, - tcl8.6-dev, -- guile-2.2-dev, -- php-dev, libphp-embed, libargon2-0-dev, libsodium-dev, -- libxml2-dev, -+ guile-2.0-dev, - libcurl4-gnutls-dev, -- libgcrypt20-dev, -- libgnutls28-dev, -+ libgcrypt11-dev, -+ libgnutls-dev, - zlib1g-dev - Standards-Version: 4.6.0.1 - Homepage: https://weechat.org/ -@@ -45,7 +42,7 @@ Description: Fast, light and extensible chat client (metapackage) - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -74,7 +71,7 @@ Description: Fast, light and extensible chat client - console client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -104,7 +101,7 @@ Description: Fast, light and extensible chat client - headless client - - 256 colors support - - incremental text search - - dynamic filtering of buffer content -- - Perl, Python, Ruby, Lua, Tcl, Scheme and PHP scripting -+ - Perl, Python, Ruby, Lua, Tcl and Scheme scripting - - script manager - - spell checking - - highly customizable and extensible -@@ -221,19 +218,6 @@ Description: Fast, light and extensible chat client - Guile plugin - . - This package provides the Guile scripting API plugin. - --Package: weechat-php --Architecture: any --Depends: -- ${misc:Depends}, -- ${shlibs:Depends}, -- weechat-curses (= ${binary:Version}) | weechat-headless (= ${binary:Version}), -- libphp-embed --Description: Fast, light and extensible chat client - PHP plugin -- WeeChat (Wee Enhanced Environment for Chat) is a fast and light chat client -- for many operating systems. Everything can be done with a keyboard. -- . -- This package provides the PHP scripting API plugin. -- - Package: weechat-doc - Section: doc - Architecture: all -diff --git a/debian-stable/weechat-php.dirs b/debian-stable/weechat-php.dirs -deleted file mode 100644 -index 68457717b..000000000 ---- a/debian-stable/weechat-php.dirs -+++ /dev/null -@@ -1 +0,0 @@ --usr/lib -diff --git a/debian-stable/weechat-php.install b/debian-stable/weechat-php.install -deleted file mode 100644 -index 0a1b73563..000000000 ---- a/debian-stable/weechat-php.install -+++ /dev/null -@@ -1 +0,0 @@ --usr/lib/*/weechat/plugins/php.so diff --git a/weechat.cygport.in b/weechat.cygport.in index 27f5457b2..b39674321 100644 --- a/weechat.cygport.in +++ b/weechat.cygport.in @@ -53,7 +53,8 @@ SRC_URI="https://weechat.org/files/src/weechat-${VERSION}.tar.bz2" # Build dependencies only DEPEND="cmake gettext gettext-devel libgnutls-devel libaspell-devel \ libcurl-devel libgcrypt-devel libncurses-devel lua perl pkg-config \ -python3-devel ruby tcl-devel libguile2.2-devel php-devel zlib-devel" +python3-devel ruby tcl-devel libguile2.2-devel php-devel libzstd-devel \ +zlib-devel" # # CMake compilation of WeeChat: |