1
0
mirror of https://github.com/weechat/weechat.git synced 2026-07-05 01:03:14 +02:00

xfer: add option xfer.file.auto_check_crc32 (patch #7963)

Thanks to Andrew Potter for the patch.
This commit is contained in:
Sebastien Helleu
2014-01-06 11:21:12 +01:00
parent 0ac504a18b
commit 646a072511
26 changed files with 779 additions and 78 deletions
+1
View File
@@ -96,6 +96,7 @@ http://weechat.org/files/releasenotes/ReleaseNotes-devel.html[release notes]
* lua: fix crash on calls to callbacks during load of script
* python: fix load of scripts with python >= 3.3
* ruby: fix ruby init with ruby >= 2.0 (bug #41115)
* xfer: add option xfer.file.auto_check_crc32 (patch #7963)
== Version 0.4.2 (2013-10-06)
+5
View File
@@ -58,6 +58,11 @@
** Typ: Zeichenkette
** Werte: beliebige Zeichenkette (Standardwert: `""`)
* [[option_xfer.file.auto_check_crc32]] *xfer.file.auto_check_crc32*
** Beschreibung: `automatically check CRC32 file checksum if it is found in the filename (8 hexadecimal chars)`
** Typ: boolesch
** Werte: on, off (Standardwert: `off`)
* [[option_xfer.file.auto_rename]] *xfer.file.auto_rename*
** Beschreibung: `eingehende Dateien werden automatisch umbenannt um ein Überschreiben zu vermeiden (dabei wird dem Dateinamen '.1', '.2', ... hinzugefügt)`
** Typ: boolesch
+5
View File
@@ -58,6 +58,11 @@
** type: string
** values: any string (default value: `""`)
* [[option_xfer.file.auto_check_crc32]] *xfer.file.auto_check_crc32*
** description: `automatically check CRC32 file checksum if it is found in the filename (8 hexadecimal chars)`
** type: boolean
** values: on, off (default value: `off`)
* [[option_xfer.file.auto_rename]] *xfer.file.auto_rename*
** description: `rename incoming files if already exists (add ".1", ".2", ...)`
** type: boolean
+5
View File
@@ -58,6 +58,11 @@
** type: chaîne
** valeurs: toute chaîne (valeur par défaut: `""`)
* [[option_xfer.file.auto_check_crc32]] *xfer.file.auto_check_crc32*
** description: `vérifier automatiquement la somme de contrôle CRC32 du fichier si elle est trouvée dans le nom de fichier (8 caractères hexadécimaux)`
** type: booléen
** valeurs: on, off (valeur par défaut: `off`)
* [[option_xfer.file.auto_rename]] *xfer.file.auto_rename*
** description: `renommer les fichiers reçus s'ils existent déjà (ajoute ".1", ".2", ...)`
** type: booléen
+5
View File
@@ -58,6 +58,11 @@
** tipo: stringa
** valori: qualsiasi stringa (valore predefinito: `""`)
* [[option_xfer.file.auto_check_crc32]] *xfer.file.auto_check_crc32*
** descrizione: `automatically check CRC32 file checksum if it is found in the filename (8 hexadecimal chars)`
** tipo: bool
** valori: on, off (valore predefinito: `off`)
* [[option_xfer.file.auto_rename]] *xfer.file.auto_rename*
** descrizione: `rinomina i file in ingresso se esistenti (aggiunge ".1", ".2", ...)`
** tipo: bool
+5
View File
@@ -58,6 +58,11 @@
** タイプ: 文字列
** 値: 未制約文字列 (デフォルト値: `""`)
* [[option_xfer.file.auto_check_crc32]] *xfer.file.auto_check_crc32*
** 説明: `automatically check CRC32 file checksum if it is found in the filename (8 hexadecimal chars)`
** タイプ: ブール
** 値: on, off (デフォルト値: `off`)
* [[option_xfer.file.auto_rename]] *xfer.file.auto_rename*
** 説明: `既に存在する場合、受信ファイルをリネームする (".1"、".2"、...を追加)`
** タイプ: ブール
+5
View File
@@ -58,6 +58,11 @@
** typ: ciąg
** wartości: dowolny ciąg (domyślna wartość: `""`)
* [[option_xfer.file.auto_check_crc32]] *xfer.file.auto_check_crc32*
** opis: `automatically check CRC32 file checksum if it is found in the filename (8 hexadecimal chars)`
** typ: bool
** wartości: on, off (domyślna wartość: `off`)
* [[option_xfer.file.auto_rename]] *xfer.file.auto_rename*
** opis: `zmień nazwę pliku przychodzącego jeśli juz istnieje (dodaj ".1", ".2", ...)`
** typ: bool
+34 -6
View File
@@ -20,8 +20,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-12-31 10:03+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:16+0100\n"
"Last-Translator: Jiri Golembiovsky <golemj@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: cs\n"
@@ -9573,6 +9573,21 @@ msgstr "selhalo"
msgid "aborted"
msgstr "zrušeno"
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
msgid "CRC error"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "%s%s: soubor %s %s %s: %s"
@@ -9601,6 +9616,10 @@ msgstr "%s%s: ruším aktivní xfer: \"%s\" od %s"
msgid "%s%s: not enough memory for new xfer"
msgstr "%s%s: nedostatek paměti pro nový xfer"
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s%s: chyba inicializace TLS"
#, fuzzy, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -9829,6 +9848,11 @@ msgid ""
"\"nick\" (for all servers); example: \"freenode.FlashCode,andrew\""
msgstr ""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
"přejmenovat příchozí soubory, jestliže již existují (přídat \".1\", "
@@ -9900,6 +9924,14 @@ msgstr "%s%s: nemohu zapisovat do lokálního souboru"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s%s: nemohu se připojit k odesílateli"
#, fuzzy, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s%s: špatné parametry pro funkci \"%s\" (skript: %s)"
#, fuzzy, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "%s%s: chyba při načítání souboru \"%s\""
#, c-format
msgid "%s%s: unable to fork"
msgstr "%s%s: nemohu provést fork"
@@ -9961,7 +9993,3 @@ msgstr ""
msgid "Constants"
msgstr ""
#, fuzzy
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr "Připojeno na %s (%d.%d.%d.%d) přes xfer rozhovor"
+35 -6
View File
@@ -22,8 +22,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat 0.4.3-dev\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-12-31 10:03+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:16+0100\n"
"Last-Translator: Nils Görs <weechatter@arcor.de>\n"
"Language-Team: German <weechatter@arcor.de>\n"
"Language: de\n"
@@ -10660,6 +10660,22 @@ msgstr "fehlgeschlagen"
msgid "aborted"
msgstr "abgebrochen"
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
#, fuzzy
msgid "CRC error"
msgstr "Fehler"
#, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "%s%s: Datei %s %s %s (%ld.%ld.%ld.%ld): %s"
@@ -10689,6 +10705,10 @@ msgid "%s%s: not enough memory for new xfer"
msgstr ""
"%s%s: Für einen neuen Transfer steht nicht ausreichend Speicher zur Verfügung"
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s%s: TLS Initialisierungsfehler"
#, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -10928,6 +10948,11 @@ msgstr ""
"speziellen Server) oder \"nick\" (global, für alle Server); Beispiel: "
"\"freenode.FlashCode,andrew\""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
"eingehende Dateien werden automatisch umbenannt um ein Überschreiben zu "
@@ -11002,6 +11027,14 @@ msgstr "%s%s: Die lokale Datei kann nicht erstellt werden"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s%s: ACK kann nicht an Absender verschickt werden"
#, fuzzy, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s%s: Fehlerhafte Argumente für die Funktion \"%s\" (Skript: %s)"
#, fuzzy, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "%s%s: Fehler beim Laden der Datei \"%s\""
#, c-format
msgid "%s%s: unable to fork"
msgstr "%s%s: es kann kein fork erstellt werden"
@@ -11064,7 +11097,3 @@ msgstr "Type"
msgid "Constants"
msgstr "Konstanten"
#, fuzzy
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr "Verbindung zu %s (%ld.%ld.%ld.%ld) via Transfer-Chat aufgebaut"
+35 -6
View File
@@ -22,8 +22,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-12-31 10:04+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:16+0100\n"
"Last-Translator: Elián Hanisch <lambdae2@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: es\n"
@@ -9830,6 +9830,22 @@ msgstr "falló"
msgid "aborted"
msgstr "abortado"
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
#, fuzzy
msgid "CRC error"
msgstr "error"
#, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "%s%s: archivo %s %s %s (%ld.%ld.%ld.%ld): %s"
@@ -9858,6 +9874,10 @@ msgstr "%s%s: abortando la transferencia activa: \"%s\" desde %s"
msgid "%s%s: not enough memory for new xfer"
msgstr "%s%s: no hay memoria suficiente para una nueva transferencia"
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s%s: error de inicialización de TLS"
#, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -10094,6 +10114,11 @@ msgid ""
"\"nick\" (for all servers); example: \"freenode.FlashCode,andrew\""
msgstr ""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
"renombrar los archivos entrantes si ya existen (añadir \".1\", \".2\", ...)"
@@ -10165,6 +10190,14 @@ msgstr "%s%s: no es posible escribir el archivo local"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s%s: no es posible conectarse al transmisor"
#, fuzzy, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s%s: argumentos incorrectos para la función \"%s\" (script: %s)"
#, fuzzy, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "%s%s: error mientras se cargaba el archivo \"%s\""
#, c-format
msgid "%s%s: unable to fork"
msgstr "%s%s: no es posible bifurcarse"
@@ -10227,7 +10260,3 @@ msgstr "Tipo"
msgid "Constants"
msgstr "Constantes"
#, fuzzy
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr "Conectado a %s (%ld.%ld.%ld.%ld) vía charla xfer"
+36 -5
View File
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2014-01-02 15:19+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:23+0100\n"
"Last-Translator: Sébastien Helleu <flashcode@flashtux.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: fr\n"
@@ -10384,6 +10384,21 @@ msgstr "échoué"
msgid "aborted"
msgstr "interrompu"
msgid "hashing"
msgstr "hachage"
msgid "CRC in progress"
msgstr "CRC en cours"
msgid "CRC OK"
msgstr "CRC OK"
msgid "wrong CRC"
msgstr "mauvais CRC"
msgid "CRC error"
msgstr "erreur CRC"
#, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "%s%s: fichier %s %s %s (%ld.%ld.%ld.%ld): %s"
@@ -10412,6 +10427,10 @@ msgstr "%s%s: abandon du xfer actif: \"%s\" de %s"
msgid "%s%s: not enough memory for new xfer"
msgstr "%s%s: pas assez de mémoire pour un nouveau xfer"
#, c-format
msgid "%s%s: hashing error"
msgstr "%s%s: erreur de hash"
#, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -10653,6 +10672,13 @@ msgstr ""
"format est \"serveur.pseudo\" (pour un serveur spécifique) ou \"pseudo"
"\" (pour tous les serveurs); exemple: \"freenode.FlashCode,andrew\""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
"vérifier automatiquement la somme de contrôle CRC32 du fichier si elle est "
"trouvée dans le nom de fichier (8 caractères hexadécimaux)"
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
"renommer les fichiers reçus s'ils existent déjà (ajoute \".1\", \".2\", ...)"
@@ -10724,6 +10750,14 @@ msgstr "%s%s: impossible d'écrire dans le fichier local"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s%s: impossible d'envoyer l'accusé de réception à l'envoyeur"
#, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s%s: mauvais CRC32 pour le fichier %s"
#, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "%s%s: erreur CRC32 durant la reprise"
#, c-format
msgid "%s%s: unable to fork"
msgstr "%s%s: impossible de créer un processus"
@@ -10786,6 +10820,3 @@ msgstr "Type"
msgid "Constants"
msgstr "Constantes"
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr "%sConnecté à %s (%ld.%ld.%ld.%ld) via discussion xfer"
+34 -8
View File
@@ -20,8 +20,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-12-31 10:04+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:16+0100\n"
"Last-Translator: Andras Voroskoi <voroskoi@frugalware.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: hu\n"
@@ -8984,6 +8984,21 @@ msgstr "Sikertelen"
msgid "aborted"
msgstr "Megszakítva"
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
msgid "CRC error"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "DCC: fájl %s%s%s"
@@ -9014,6 +9029,10 @@ msgstr "\"%s\" aktív DCC megszakítása a következővel: %s\n"
msgid "%s%s: not enough memory for new xfer"
msgstr "%s nincs elegendő memória új DCC számára\n"
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s gnutls inicializációs hiba\n"
#, fuzzy, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -9246,6 +9265,11 @@ msgid ""
"\"nick\" (for all servers); example: \"freenode.FlashCode,andrew\""
msgstr ""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
#, fuzzy
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
@@ -9319,6 +9343,14 @@ msgstr "%s DCC: nem sikerült a helyi fájlt írni\n"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s DCC: nem sikerült kapcsolódni a küldőhöz\n"
#, fuzzy, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s rossz argumentum a \"%s\" parancsnak\n"
#, fuzzy, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "Nem sikerült a(z) \"%s\" naplófájlt írni\n"
#, fuzzy, c-format
msgid "%s%s: unable to fork"
msgstr "%s DCC: nem sikerült forkolni\n"
@@ -9383,9 +9415,3 @@ msgstr ""
msgid "Constants"
msgstr ""
#, fuzzy
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr ""
#~ "Csatlakozás a %s%s %s(%s%d.%d.%d.%d%s)%s partnerhez DCC beszélgetésen "
#~ "keresztül\n"
+35 -6
View File
@@ -20,8 +20,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-12-31 10:05+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:16+0100\n"
"Last-Translator: Esteban I. Ruiz Moreno <exio4.com@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: it\n"
@@ -9986,6 +9986,22 @@ msgstr "fallito"
msgid "aborted"
msgstr "annullato"
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
#, fuzzy
msgid "CRC error"
msgstr "errore"
#, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
@@ -10014,6 +10030,10 @@ msgstr "%s%s: annullamento xfer attivo: \"%s\" da %s"
msgid "%s%s: not enough memory for new xfer"
msgstr "%s%s: memoria non sufficiente per nuovo xfer"
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s%s: errore avvio TLS"
#, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -10242,6 +10262,11 @@ msgid ""
"\"nick\" (for all servers); example: \"freenode.FlashCode,andrew\""
msgstr ""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
"rinomina i file in ingresso se esistenti (aggiunge \".1\", \".2\", ...)"
@@ -10311,6 +10336,14 @@ msgstr "%s%s: impossibile scrivere il file locale"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s%s: impossibile inviare ACK al mittente"
#, fuzzy, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s%s: argomenti errati per la funzione \"%s\" (script: %s)"
#, fuzzy, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "%s%s: errore durante il caricamento del file \"%s\""
#, c-format
msgid "%s%s: unable to fork"
msgstr "%s%s: impossibile effettuare il fork"
@@ -10375,7 +10408,3 @@ msgstr "Tipo"
msgid "Constants"
msgstr "Costanti"
#, fuzzy
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr "Connesso a %s (%ld.%ld.%ld.%ld) via chat xfer"
+35 -6
View File
@@ -20,8 +20,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-12-31 10:05+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:16+0100\n"
"Last-Translator: AYANOKOUZI, Ryuunosuke <i38w7i3@yahoo.co.jp>\n"
"Language-Team: Japanese <https://github.com/l/WeeChat>\n"
"Language: ja\n"
@@ -9964,6 +9964,22 @@ msgstr "失敗"
msgid "aborted"
msgstr "中止"
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
#, fuzzy
msgid "CRC error"
msgstr "エラー"
#, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "%s%s: ファイル %s %s %s (%ld.%ld.%ld.%ld): %s"
@@ -9992,6 +10008,10 @@ msgstr "%s%s: アクティブな xfer を中断しています: \"%s\" %s から
msgid "%s%s: not enough memory for new xfer"
msgstr "%s%s: 新しい xfer 用のメモリ不足"
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s%s: TLS 初期化エラー"
#, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -10221,6 +10241,11 @@ msgstr ""
"ト; フォーマットは \"server.nick\" (サーバを特定する場合) または \"nick\" (す"
"べてのサーバ); 例: \"freenode.FlashCode,andrew\""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
"既に存在する場合、受信ファイルをリネームする (\".1\"、\".2\"、...を追加)"
@@ -10290,6 +10315,14 @@ msgstr "%s%s: ローカルファイルに書き込めません"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s%s: 送信者に ACK を送信できません"
#, fuzzy, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s%s: 関数 \"%s\" の不正な引数 (スクリプト: %s)"
#, fuzzy, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "%s%s: ファイル \"%s\" の読み込み中にエラー"
#, c-format
msgid "%s%s: unable to fork"
msgstr "%s%s: フォークできません"
@@ -10352,7 +10385,3 @@ msgstr "タイプ"
msgid "Constants"
msgstr "定数"
#, fuzzy
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr "xfer チャットで %s (%ld.%ld.%ld.%ld) に接続"
+35 -6
View File
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-12-31 10:05+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:17+0100\n"
"Last-Translator: Krzysztof Korościk <soltys@szluug.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: pl\n"
@@ -10205,6 +10205,22 @@ msgstr "nie powodzenie"
msgid "aborted"
msgstr "przerwano"
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
#, fuzzy
msgid "CRC error"
msgstr "błąd"
#, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "%s%s: plik %s %s %s (%ld.%ld.%ld.%ld): %s"
@@ -10233,6 +10249,10 @@ msgstr "%s%s: przerywam aktywny xfer: \"%s\" od %s"
msgid "%s%s: not enough memory for new xfer"
msgstr "%s%s: za mało pamięci na nowy xfer"
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s%s: błąd inicjacji TLS"
#, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -10464,6 +10484,11 @@ msgstr ""
"serwera) lub \"nick\" (dla wszystkich serwerów; przykład \"freenode."
"FlashCode,andrew\""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
"zmień nazwę pliku przychodzącego jeśli juz istnieje (dodaj \".1\", "
@@ -10532,6 +10557,14 @@ msgstr "%s%s: nie można zapisać pliku"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s%s: nie można wysłać ACK do nadawcy"
#, fuzzy, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s%s: nieprawidłowe argumenty dla funkcji \"%s\" (skrypt: %s)"
#, fuzzy, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "%s%s: błąd podczas ładowania pliku \"%s\""
#, c-format
msgid "%s%s: unable to fork"
msgstr "%s%s: nie można uruchomić procesu potomnego"
@@ -10591,7 +10624,3 @@ msgstr "Typ"
msgid "Constants"
msgstr "Stałe"
#, fuzzy
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr "Połączono z %s (%ld.%ld.%ld.%ld) poprzez rozmowę xfer"
+34 -6
View File
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-12-31 10:06+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:17+0100\n"
"Last-Translator: Sergio Durigan Junior <sergiosdj@gmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: pt_BR\n"
@@ -9198,6 +9198,21 @@ msgstr "falhou"
msgid "aborted"
msgstr "abortado"
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
msgid "CRC error"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "%s%s: arquivo %s %s %s: %s"
@@ -9226,6 +9241,10 @@ msgstr "%s%s: abortando transferência ativa: \"%s\" de %s"
msgid "%s%s: not enough memory for new xfer"
msgstr "%s%s: memória insuficiente para nova transferência"
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s%s: erro de inicialização do TLS"
#, fuzzy, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -9462,6 +9481,11 @@ msgid ""
"\"nick\" (for all servers); example: \"freenode.FlashCode,andrew\""
msgstr ""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
"renomear arquivos recebidos se nome já existir (adiciona \".1\", \".2\", ...)"
@@ -9533,6 +9557,14 @@ msgstr "%s%s: não foi possível escrever o arquivo local"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s%s: não foi possível conectar ao remetente"
#, fuzzy, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s%s: argumentos inválidos para a função \"%s\" (script: %s)"
#, fuzzy, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "%s%s: erro na leitura do arquivo \"%s\""
#, c-format
msgid "%s%s: unable to fork"
msgstr "%s%s: não foi possível efetuar o fork"
@@ -9595,7 +9627,3 @@ msgstr ""
msgid "Constants"
msgstr ""
#, fuzzy
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr "Conectado a %s (%d.%d.%d.%d) via chat de transferência"
+34 -6
View File
@@ -21,8 +21,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-12-31 10:06+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:17+0100\n"
"Last-Translator: Aleksey V Zapparov AKA ixti <ixti@member.fsf.org>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: ru\n"
@@ -9011,6 +9011,21 @@ msgstr "Неудача"
msgid "aborted"
msgstr "Отменено"
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
msgid "CRC error"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr "DCC: файл %s%s%s"
@@ -9041,6 +9056,10 @@ msgstr "Отменяю активное DCC-сединение: \"%s\" от %s\n
msgid "%s%s: not enough memory for new xfer"
msgstr "%s недостаточно памяти для нового DCC\n"
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s ошибка инициализации gnutls\n"
#, fuzzy, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -9270,6 +9289,11 @@ msgid ""
"\"nick\" (for all servers); example: \"freenode.FlashCode,andrew\""
msgstr ""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
#, fuzzy
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
@@ -9344,6 +9368,14 @@ msgstr "%s DCC: не могу записать локальный файл\n"
msgid "%s%s: unable to send ACK to sender"
msgstr "%s DCC: не могу соединиться с отправителем\n"
#, fuzzy, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr "%s некорректные аргументы команды \"%s\"\n"
#, fuzzy, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr "Не могу записать лог-файл \"%s\"\n"
#, fuzzy, c-format
msgid "%s%s: unable to fork"
msgstr "%s DCC: не могу forkнуться\n"
@@ -9406,7 +9438,3 @@ msgstr ""
msgid "Constants"
msgstr ""
#, fuzzy
#~ msgid "%sConnected to %s (%ld.%ld.%ld.%ld) via xfer chat"
#~ msgstr "Соединён с %s%s %s(%s%d.%d.%d.%d%s)%s DCC-чатом\n"
+35 -2
View File
@@ -20,8 +20,8 @@ msgid ""
msgstr ""
"Project-Id-Version: WeeChat\n"
"Report-Msgid-Bugs-To: flashcode@flashtux.org\n"
"POT-Creation-Date: 2014-01-02 15:18+0100\n"
"PO-Revision-Date: 2013-11-09 10:13+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2014-01-06 10:17+0100\n"
"Last-Translator: Hasan Kiran <sunder67@hotmail.com>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
"Language: tr\n"
@@ -8062,6 +8062,22 @@ msgstr "başarısız"
msgid "aborted"
msgstr ""
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
#, fuzzy
msgid "CRC error"
msgstr "hata"
#, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr ""
@@ -8090,6 +8106,10 @@ msgstr ""
msgid "%s%s: not enough memory for new xfer"
msgstr ""
#, fuzzy, c-format
msgid "%s%s: hashing error"
msgstr "%s%s: hata: %s"
#, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -8290,6 +8310,11 @@ msgid ""
"\"nick\" (for all servers); example: \"freenode.FlashCode,andrew\""
msgstr ""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
@@ -8351,6 +8376,14 @@ msgstr ""
msgid "%s%s: unable to send ACK to sender"
msgstr ""
#, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr ""
#, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr ""
#, c-format
msgid "%s%s: unable to fork"
msgstr ""
+33 -1
View File
@@ -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-01-02 15:18+0100\n"
"POT-Creation-Date: 2014-01-06 11:16+0100\n"
"PO-Revision-Date: 2013-02-14 18:20+0100\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: weechat-dev <weechat-dev@nongnu.org>\n"
@@ -8018,6 +8018,21 @@ msgstr ""
msgid "aborted"
msgstr ""
msgid "hashing"
msgstr ""
msgid "CRC in progress"
msgstr ""
msgid "CRC OK"
msgstr ""
msgid "wrong CRC"
msgstr ""
msgid "CRC error"
msgstr ""
#, c-format
msgid "%s%s: file %s %s %s (%ld.%ld.%ld.%ld): %s"
msgstr ""
@@ -8046,6 +8061,10 @@ msgstr ""
msgid "%s%s: not enough memory for new xfer"
msgstr ""
#, c-format
msgid "%s%s: hashing error"
msgstr ""
#, c-format
msgid ""
"%s: incoming file from %s (%ld.%ld.%ld.%ld, %s.%s), name: %s, %llu bytes "
@@ -8246,6 +8265,11 @@ msgid ""
"\"nick\" (for all servers); example: \"freenode.FlashCode,andrew\""
msgstr ""
msgid ""
"automatically check CRC32 file checksum if it is found in the filename (8 "
"hexadecimal chars)"
msgstr ""
msgid "rename incoming files if already exists (add \".1\", \".2\", ...)"
msgstr ""
@@ -8307,6 +8331,14 @@ msgstr ""
msgid "%s%s: unable to send ACK to sender"
msgstr ""
#, c-format
msgid "%s%s: wrong CRC32 for file %s"
msgstr ""
#, c-format
msgid "%s%s: CRC32 error while resuming"
msgstr ""
#, c-format
msgid "%s%s: unable to fork"
msgstr ""
+17 -3
View File
@@ -44,7 +44,7 @@ xfer_buffer_refresh (const char *hotlist)
{
struct t_xfer *ptr_xfer, *xfer_selected;
char str_color[256], suffix[32], status[64], date[128], eta[128];
char str_ip[32];
char str_ip[32], str_hash[128];
char *progress_bar, *str_pos, *str_total, *str_bytes_per_sec;
int i, length, line, progress_bar_size, num_bars;
unsigned long long pos, pct_complete;
@@ -103,9 +103,22 @@ xfer_buffer_refresh (const char *hotlist)
ptr_xfer->remote_address & 0xff);
}
str_hash[0] = '\0';
if (ptr_xfer->hash_target
&& ptr_xfer->hash_handle
&& (ptr_xfer->hash_status != XFER_HASH_STATUS_UNKNOWN)
&& ((ptr_xfer->status == XFER_STATUS_ACTIVE)
|| (ptr_xfer->status == XFER_STATUS_DONE)
|| (ptr_xfer->status == XFER_STATUS_HASHING)))
{
snprintf (str_hash, sizeof (str_hash),
" (%s)",
_(xfer_hash_status_string[ptr_xfer->hash_status]));
}
/* display first line with remote nick, filename and plugin name/id */
weechat_printf_y (xfer_buffer, (line * 2) + 2,
"%s%s%-24s %s%s%s%s (%s.%s)%s",
"%s%s%-24s %s%s%s%s (%s.%s)%s%s",
weechat_color(str_color),
(line == xfer_buffer_selected_line) ?
"*** " : " ",
@@ -117,7 +130,8 @@ xfer_buffer_refresh (const char *hotlist)
suffix,
ptr_xfer->plugin_name,
ptr_xfer->plugin_id,
str_ip);
str_ip,
str_hash);
snprintf (status, sizeof (status),
"%s", _(xfer_status_string[ptr_xfer->status]));
+7 -1
View File
@@ -57,6 +57,7 @@ struct t_config_option *xfer_config_network_timeout;
struct t_config_option *xfer_config_file_auto_accept_chats;
struct t_config_option *xfer_config_file_auto_accept_files;
struct t_config_option *xfer_config_file_auto_accept_nicks;
struct t_config_option *xfer_config_file_auto_check_crc32;
struct t_config_option *xfer_config_file_auto_rename;
struct t_config_option *xfer_config_file_auto_resume;
struct t_config_option *xfer_config_file_convert_spaces;
@@ -65,7 +66,6 @@ struct t_config_option *xfer_config_file_upload_path;
struct t_config_option *xfer_config_file_use_nick_in_filename;
/*
* Callback for changes on an option that requires a refresh of xfer list.
*/
@@ -287,6 +287,12 @@ xfer_config_init ()
"specific server) or \"nick\" (for all servers); example: "
"\"freenode.FlashCode,andrew\""),
NULL, 0, 0, "", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);
xfer_config_file_auto_check_crc32 = weechat_config_new_option (
xfer_config_file, ptr_section,
"auto_check_crc32", "boolean",
N_("automatically check CRC32 file checksum if it is found in the "
"filename (8 hexadecimal chars)"),
NULL, 0, 0, "off", NULL, 0, NULL, NULL, NULL, NULL, NULL, NULL);
xfer_config_file_auto_rename = weechat_config_new_option (
xfer_config_file, ptr_section,
"auto_rename", "boolean",
+1
View File
@@ -47,6 +47,7 @@ struct t_config_option *xfer_config_file_auto_accept_files;
struct t_config_option *xfer_config_file_auto_accept_nicks;
extern struct t_config_option *xfer_config_file_auto_rename;
extern struct t_config_option *xfer_config_file_auto_resume;
extern struct t_config_option *xfer_config_file_auto_check_crc32;
extern struct t_config_option *xfer_config_file_convert_spaces;
extern struct t_config_option *xfer_config_file_download_path;
extern struct t_config_option *xfer_config_file_upload_path;
+148 -4
View File
@@ -21,6 +21,7 @@
#include <stdlib.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
@@ -31,6 +32,7 @@
#include <time.h>
#include <netdb.h>
#include <errno.h>
#include <gcrypt.h>
#include "../weechat-plugin.h"
#include "xfer.h"
@@ -218,6 +220,79 @@ xfer_dcc_recv_file_send_ack (struct t_xfer *xfer)
return 2;
}
/*
* Reads a resumed xfer from disk for hashing.
*
* Returns:
* 1: OK
* 0: error
*/
int
xfer_dcc_resume_hash (struct t_xfer *xfer)
{
char *buf;
unsigned long long total_read;
ssize_t length_buf, to_read, num_read;
int ret, fd;
total_read = 0;
ret = 1;
fd = 0;
length_buf = 1024 * 1024;
buf = malloc (length_buf);
if (!buf)
return 0;
while (fd <= 0)
{
fd = open (xfer->local_filename, O_RDONLY);
if (fd < 0)
{
if (errno == EINTR)
continue;
fd = 0;
ret = 0;
break;
}
}
if (fd)
{
while (total_read < xfer->start_resume)
{
to_read = xfer->start_resume - total_read;
if (to_read > length_buf)
num_read = read (fd, buf, length_buf);
else
num_read = read (fd, buf, to_read);
if (num_read > 0)
{
gcry_md_write (*xfer->hash_handle, buf, num_read);
total_read += num_read;
}
else if (num_read < 0)
{
if (errno == EINTR)
continue;
ret = 0;
break;
}
}
while (close (fd) < 0)
{
if (errno != EINTR)
break;
}
}
free (buf);
return ret;
}
/*
* Child process for receiving file with DCC protocol.
*/
@@ -230,6 +305,26 @@ xfer_dcc_recv_file_child (struct t_xfer *xfer)
time_t last_sent, new_time;
unsigned long long pos_last_ack;
fd_set read_fds, write_fds, except_fds;
ssize_t written, total_written;
unsigned char *bin_hash;
char hash[9];
/* if resuming, hash the portion of the file we have */
if ((xfer->start_resume > 0) && xfer->hash_handle)
{
xfer_network_write_pipe (xfer, XFER_STATUS_HASHING,
XFER_NO_ERROR);
if (!xfer_dcc_resume_hash (xfer))
{
gcry_md_close (*xfer->hash_handle);
free (xfer->hash_handle);
xfer->hash_handle = NULL;
xfer_network_write_pipe (xfer, XFER_STATUS_HASHING,
XFER_ERROR_HASH_RESUME_ERROR);
}
xfer_network_write_pipe (xfer, XFER_STATUS_CONNECTING,
XFER_NO_ERROR);
}
/* first connect to sender (blocking) */
if (!weechat_network_connect_to (xfer->proxy, xfer->sock,
@@ -289,6 +384,8 @@ xfer_dcc_recv_file_child (struct t_xfer *xfer)
}
else
{
total_written = 0;
if (num_read == 0)
{
xfer_network_write_pipe (xfer, XFER_STATUS_FAILED,
@@ -296,11 +393,30 @@ xfer_dcc_recv_file_child (struct t_xfer *xfer)
return;
}
if (write (xfer->file, buffer, num_read) == -1)
/* bytes received, write to disk */
while (total_written < num_read)
{
xfer_network_write_pipe (xfer, XFER_STATUS_FAILED,
XFER_ERROR_WRITE_LOCAL);
return;
written = write (xfer->file,
buffer + total_written,
num_read - total_written);
if (written < 0)
{
if (errno == EINTR)
continue;
xfer_network_write_pipe (xfer, XFER_STATUS_FAILED,
XFER_ERROR_WRITE_LOCAL);
return;
}
else
{
if (xfer->hash_handle)
{
gcry_md_write (*xfer->hash_handle,
buffer + total_written,
written);
}
total_written += written;
}
}
xfer->pos += (unsigned long long) num_read;
@@ -308,6 +424,34 @@ xfer_dcc_recv_file_child (struct t_xfer *xfer)
/* file received OK? */
if (xfer->pos >= xfer->size)
{
/* check hash and report result to pipe */
if (xfer->hash_handle)
{
gcry_md_final (*xfer->hash_handle);
bin_hash = gcry_md_read (*xfer->hash_handle, 0);
if (bin_hash)
{
snprintf (hash, 9, "%.2X%.2X%.2X%.2X",
bin_hash[0], bin_hash[1], bin_hash[2],
bin_hash[3]);
if (weechat_strcasecmp (hash,
xfer->hash_target) == 0)
{
xfer_network_write_pipe (xfer,
XFER_STATUS_HASHED,
XFER_NO_ERROR);
}
else
{
xfer_network_write_pipe (xfer,
XFER_STATUS_HASHED,
XFER_ERROR_HASH_MISMATCH);
}
}
}
fsync (xfer->file);
/*
* extra delay before sending ACK, otherwise the send of ACK
* may fail
+26
View File
@@ -151,11 +151,28 @@ xfer_network_child_read_cb (void *arg_xfer, int fd)
_("%s%s: unable to send ACK to sender"),
weechat_prefix ("error"), XFER_PLUGIN_NAME);
break;
case XFER_ERROR_HASH_MISMATCH:
weechat_printf (NULL,
_("%s%s: wrong CRC32 for file %s"),
weechat_prefix ("error"), XFER_PLUGIN_NAME,
xfer->filename);
xfer->hash_status = XFER_HASH_STATUS_MISMATCH;
break;
case XFER_ERROR_HASH_RESUME_ERROR:
weechat_printf (NULL,
_("%s%s: CRC32 error while resuming"),
weechat_prefix ("error"), XFER_PLUGIN_NAME);
xfer->hash_status = XFER_HASH_STATUS_RESUME_ERROR;
break;
}
/* read new DCC status */
switch (bufpipe[0] - '0')
{
case XFER_STATUS_CONNECTING:
xfer->status = XFER_STATUS_CONNECTING;
xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE);
break;
case XFER_STATUS_ACTIVE:
if (xfer->status == XFER_STATUS_CONNECTING)
{
@@ -176,6 +193,15 @@ xfer_network_child_read_cb (void *arg_xfer, int fd)
xfer_close (xfer, XFER_STATUS_FAILED);
xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE);
break;
case XFER_STATUS_HASHING:
xfer->status = XFER_STATUS_HASHING;
xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE);
break;
case XFER_STATUS_HASHED:
if (bufpipe[1] - '0' == XFER_NO_ERROR)
xfer->hash_status = XFER_HASH_STATUS_MATCH;
xfer_buffer_refresh (WEECHAT_HOTLIST_MESSAGE);
break;
}
}
+112 -6
View File
@@ -30,6 +30,7 @@
#include <sys/socket.h>
#include <netinet/in.h>
#include <netdb.h>
#include <gcrypt.h>
#include "../weechat-plugin.h"
#include "xfer.h"
@@ -51,19 +52,25 @@ WEECHAT_PLUGIN_LICENSE(WEECHAT_LICENSE);
struct t_weechat_plugin *weechat_xfer_plugin = NULL;
char *xfer_type_string[] = /* strings for types */
char *xfer_type_string[] = /* strings for types */
{ "file_recv", "file_send", "chat_recv",
"chat_send"
};
char *xfer_protocol_string[] = /* strings for protocols */
char *xfer_protocol_string[] = /* strings for protocols */
{ "none", "dcc"
};
char *xfer_status_string[] = /* strings for status */
char *xfer_status_string[] = /* strings for status */
{ N_("waiting"), N_("connecting"),
N_("active"), N_("done"), N_("failed"),
N_("aborted")
N_("aborted"), N_("hashing")
};
char *xfer_hash_status_string[] = /* strings for hash status */
{ "?",
N_("CRC in progress"), N_("CRC OK"),
N_("wrong CRC"), N_("CRC error")
};
struct t_xfer *xfer_list = NULL; /* list of files/chats */
@@ -72,7 +79,6 @@ int xfer_count = 0; /* number of xfer */
int xfer_signal_upgrade_received = 0; /* signal "upgrade" received ? */
void xfer_disconnect_all ();
@@ -567,6 +573,59 @@ xfer_nick_auto_accepted (const char *server, const char *nick)
return rc;
}
/*
* Searches CRC32 in a filename.
*
* If more than one CRC32 are found, the last one is returned
* (with the higher index in filename).
*
* The chars before/after CRC32 must be either beginning/end of string or
* non-hexadecimal chars.
*
* Examples:
*
* test_filename => -1 (not found: no CRC32)
* test_1234abcd => 5 ("1234abcd")
* 1234abcd_test => 0 ("1234abcd")
* 1234abcd_12345678 => 9 ("12345678")
* 123456789abcdef => -1 (not found: missing delimiter around CRC32)
*
* Returns pointer to last CRC32 in string, NULL if no CRC32 was found.
*/
const char *
xfer_filename_crc32 (const char *filename)
{
int length;
const char *ptr_string, *ptr_crc32;
length = 0;
ptr_crc32 = NULL;
ptr_string = filename;
while (ptr_string && ptr_string[0])
{
if (((ptr_string[0] >= '0') && (ptr_string[0] <= '9'))
|| ((ptr_string[0] >= 'A') && (ptr_string[0] <= 'F'))
|| ((ptr_string[0] >= 'a') && (ptr_string[0] <= 'f')))
{
length++;
}
else
{
if (length == 8)
ptr_crc32 = ptr_string - 8;
length = 0;
}
ptr_string = weechat_utf8_next_char (ptr_string);
}
if (length == 8)
ptr_crc32 = ptr_string - 8;
return ptr_crc32;
}
/*
* Adds a xfer to list.
*
@@ -582,7 +641,7 @@ xfer_new (const char *plugin_name, const char *plugin_id,
int port, int sock, const char *local_filename)
{
struct t_xfer *new_xfer;
const char *ptr_color;
const char *ptr_color, *ptr_crc32;
new_xfer = xfer_alloc ();
if (!new_xfer)
@@ -634,6 +693,36 @@ xfer_new (const char *plugin_name, const char *plugin_id,
else
xfer_file_find_filename (new_xfer);
new_xfer->hash_handle = NULL;
new_xfer->hash_target = NULL;
new_xfer->hash_status = XFER_HASH_STATUS_UNKNOWN;
if ((type == XFER_TYPE_FILE_RECV)
&& weechat_config_boolean (xfer_config_file_auto_check_crc32))
{
ptr_crc32 = xfer_filename_crc32 (new_xfer->filename);
if (ptr_crc32)
{
new_xfer->hash_handle = malloc (sizeof (gcry_md_hd_t));
if (new_xfer->hash_handle)
{
if (gcry_md_open (new_xfer->hash_handle, GCRY_MD_CRC32, 0) == 0)
{
new_xfer->hash_target = weechat_strndup (ptr_crc32, 8);
new_xfer->hash_status = XFER_HASH_STATUS_IN_PROGRESS;
}
else
{
free (new_xfer->hash_handle);
new_xfer->hash_handle = NULL;
weechat_printf (NULL,
_("%s%s: hashing error"),
weechat_prefix ("error"), XFER_PLUGIN_NAME);
}
}
}
}
/* write info message on core buffer */
switch (type)
{
@@ -788,6 +877,13 @@ xfer_free (struct t_xfer *xfer)
free (xfer->unterminated_message);
if (xfer->local_filename)
free (xfer->local_filename);
if (xfer->hash_handle)
{
gcry_md_close (*xfer->hash_handle);
free (xfer->hash_handle);
}
if (xfer->hash_target)
free (xfer->hash_target);
free (xfer);
@@ -1450,6 +1546,12 @@ xfer_add_to_infolist (struct t_infolist *infolist, struct t_xfer *xfer)
snprintf (value, sizeof (value), "%llu", xfer->eta);
if (!weechat_infolist_new_var_string (ptr_item, "eta", value))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "hash_target", xfer->hash_target))
return 0;
if (!weechat_infolist_new_var_integer (ptr_item, "hash_status", xfer->hash_status))
return 0;
if (!weechat_infolist_new_var_string (ptr_item, "hash_status_string", xfer_hash_status_string[xfer->hash_status]))
return 0;
return 1;
}
@@ -1512,6 +1614,10 @@ xfer_print_log ()
weechat_log_printf (" last_activity . . . : %ld", ptr_xfer->last_activity);
weechat_log_printf (" bytes_per_sec . . . : %llu", ptr_xfer->bytes_per_sec);
weechat_log_printf (" eta . . . . . . . . : %llu", ptr_xfer->eta);
weechat_log_printf (" hash_target . . . . : '%s'", ptr_xfer->hash_target);
weechat_log_printf (" hash_status . . . . : %d (%s)",
ptr_xfer->hash_status,
xfer_hash_status_string[ptr_xfer->hash_status]);
weechat_log_printf (" prev_xfer . . . . . : 0x%lx", ptr_xfer->prev_xfer);
weechat_log_printf (" next_xfer . . . . . : 0x%lx", ptr_xfer->next_xfer);
}
+22
View File
@@ -21,6 +21,7 @@
#define __WEECHAT_XFER_H 1
#include <unistd.h>
#include <gcrypt.h>
#define weechat_plugin weechat_xfer_plugin
#define XFER_PLUGIN_NAME "xfer"
@@ -57,6 +58,8 @@ enum t_xfer_status
XFER_STATUS_DONE, /* transfer done */
XFER_STATUS_FAILED, /* transfer failed */
XFER_STATUS_ABORTED, /* transfer aborted by user */
XFER_STATUS_HASHING, /* partial local file is being hashed*/
XFER_STATUS_HASHED, /* received file has been hashed */
/* number of xfer status */
XFER_NUM_STATUS,
};
@@ -75,10 +78,25 @@ enum t_xfer_error
XFER_ERROR_RECV_BLOCK, /* unable to recv block from sender */
XFER_ERROR_WRITE_LOCAL, /* unable to write to local file */
XFER_ERROR_SEND_ACK, /* unable to send ACK to sender */
XFER_ERROR_HASH_MISMATCH, /* CRC32 does not match */
XFER_ERROR_HASH_RESUME_ERROR, /* other error with CRC32 hash */
/* number of errors */
XFER_NUM_ERRORS,
};
/* hash status */
enum t_xfer_hash_status
{
XFER_HASH_STATUS_UNKNOWN = 0, /* hashing not being performed */
XFER_HASH_STATUS_IN_PROGRESS, /* hash in progress */
XFER_HASH_STATUS_MATCH, /* hash finished and matches target */
XFER_HASH_STATUS_MISMATCH, /* hash finished with mismatch */
XFER_HASH_STATUS_RESUME_ERROR, /* hash failed while resuming */
/* number of hash status */
XFER_NUM_HASH_STATUS,
};
/* xfer block size */
#define XFER_BLOCKSIZE_MIN 1024 /* min block size */
@@ -153,6 +171,9 @@ struct t_xfer
time_t last_activity; /* time of last byte received/sent */
unsigned long long bytes_per_sec; /* bytes per second */
unsigned long long eta; /* estimated time of arrival */
gcry_md_hd_t *hash_handle; /* handle for CRC32 hash */
char *hash_target; /* the CRC32 hash to check against */
enum t_xfer_hash_status hash_status; /* hash status */
struct t_xfer *prev_xfer; /* link to previous xfer */
struct t_xfer *next_xfer; /* link to next xfer */
};
@@ -161,6 +182,7 @@ extern struct t_weechat_plugin *weechat_xfer_plugin;
extern char *xfer_type_string[];
extern char *xfer_protocol_string[];
extern char *xfer_status_string[];
extern char *xfer_hash_status_string[];
extern struct t_xfer *xfer_list, *last_xfer;
extern int xfer_count;