From 078f7063aef1d4105e71160b8764ab95c2dcdfbe Mon Sep 17 00:00:00 2001 From: Christian Grothoff Date: Thu, 28 May 2015 09:02:31 +0000 Subject: adding --enable-taler-wallet configure option to build a reduced version of libgnunetutil with only the parts needed by GNU Taler wallets --- configure.ac | 18 ++ contrib/gnunet-gns-import.sh | 19 +- po/de.po | 241 ++++++++-------- po/es.po | 252 +++++++++-------- po/fr.po | 233 ++++++++-------- po/sv.po | 242 ++++++++-------- po/vi.po | 245 ++++++++-------- po/zh_CN.po | 239 ++++++++-------- src/Makefile.am | 8 + src/include/Makefile.am | 7 + src/include/gnunet_util_taler_wallet_lib.h | 56 ++++ src/util/Makefile.am | 65 ++++- src/util/configuration.c | 43 --- src/util/configuration_loader.c | 69 +++++ src/util/crypto_ecc.c | 401 --------------------------- src/util/crypto_ecc_setup.c | 431 +++++++++++++++++++++++++++++ src/util/crypto_hash.c | 189 +------------ src/util/crypto_hash_file.c | 215 ++++++++++++++ src/util/disk.c | 139 ---------- src/util/disk_iterator.c | 166 +++++++++++ 20 files changed, 1825 insertions(+), 1453 deletions(-) create mode 100644 src/include/gnunet_util_taler_wallet_lib.h create mode 100644 src/util/configuration_loader.c create mode 100644 src/util/crypto_ecc_setup.c create mode 100644 src/util/crypto_hash_file.c create mode 100644 src/util/disk_iterator.c diff --git a/configure.ac b/configure.ac index 6495cc628..53bb114b7 100644 --- a/configure.ac +++ b/configure.ac @@ -546,6 +546,21 @@ fi AC_CHECK_LIB([kvm],[kvm_open]) AC_CHECK_LIB([kstat],[kstat_open]) + +# should experimental code be compiled (code that may not yet compile)? +AC_MSG_CHECKING(whether to compile GNU Taler Wallet library ONLY) +AC_ARG_ENABLE([taler-wallet], + [AS_HELP_STRING([--taler-wallet], [only compile for Taler wallet])], + [taler_only=${enableval}], + [taler_only=no]) +AC_MSG_RESULT($taler_only) +AM_CONDITIONAL([TALER_ONLY], [test "x$taler_only" = "xyes"]) + +if test "$taler_only" != yes +then + + + # test for libextractor extractor=0 AC_MSG_CHECKING(for libextractor) @@ -581,6 +596,7 @@ fi # restore LIBS LIBS=$SAVE_LIBS + # Check for libltdl header (#2999) ltdl=0 AC_MSG_CHECKING(for libltdl) @@ -618,6 +634,8 @@ fi # restore LIBS LIBS=$SAVE_LIBS +fi + # test for libunistring gl_LIBUNISTRING if test $HAVE_LIBUNISTRING != yes; then diff --git a/contrib/gnunet-gns-import.sh b/contrib/gnunet-gns-import.sh index cd3878e11..6b52d84e6 100755 --- a/contrib/gnunet-gns-import.sh +++ b/contrib/gnunet-gns-import.sh @@ -47,12 +47,29 @@ gnunet-identity -C private-zone $options # Additionally, we create the FS SKS zone gnunet-identity -C sks-zone $options -# Integrate those with the respective subsystems. +#### Integrate those with the respective subsystems #### + +# Zone for shortening by gns-proxy, +# (remove this entry to disable shortening) gnunet-identity -e short-zone -s gns-short $options + +# Default zone for 'gnunet-gns' lookups gnunet-identity -e master-zone -s gns-master $options + +# Default zone for 'gnunet-namestore' operations gnunet-identity -e master-zone -s namestore $options + +# Use master-zone for GNS proxy lookups gnunet-identity -e master-zone -s gns-proxy $options + +# Use master-zone for intercepted DNS queries +# (remove this entry to disable DNS interception by GNS service) +gnunet-identity -e master-zone -s gns-intercept $options + +# 'gns-private' is not yet used (!) gnunet-identity -e private-zone -s gns-private $options + +# 'fs-sks' default ego for gnunet-fs-gtk namespace operations gnunet-identity -e sks-zone -s fs-sks $options # Get the public keys as strings (so we can create PKEY records) diff --git a/po/de.po b/po/de.po index a756e1ab9..0d47bdb14 100644 --- a/po/de.po +++ b/po/de.po @@ -10,7 +10,7 @@ msgid "" msgstr "" "Project-Id-Version: gnunet 0.10.1\n" "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" -"POT-Creation-Date: 2015-04-27 13:05+0200\n" +"POT-Creation-Date: 2015-05-19 11:25+0200\n" "PO-Revision-Date: 2015-03-08 16:16+0100\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" @@ -643,56 +643,56 @@ msgstr "Informationen über andere GNUnet Knoten ausgeben." msgid "Invalid target `%s'\n" msgstr "Ungültiger Parameter: `%s'\n" -#: src/cadet/gnunet-cadet.c:626 +#: src/cadet/gnunet-cadet.c:643 #, fuzzy, c-format msgid "Invalid peer ID `%s'\n" msgstr "Ungültige Antwort auf `%s'.\n" -#: src/cadet/gnunet-cadet.c:669 +#: src/cadet/gnunet-cadet.c:686 #, fuzzy, c-format msgid "Invalid tunnel owner `%s'\n" msgstr "Ungültiger Parameter: `%s'\n" -#: src/cadet/gnunet-cadet.c:735 +#: src/cadet/gnunet-cadet.c:752 msgid "You must NOT give a TARGETwhen using 'request all' options\n" msgstr "" -#: src/cadet/gnunet-cadet.c:832 +#: src/cadet/gnunet-cadet.c:849 msgid "provide information about a particular connection" msgstr "" -#: src/cadet/gnunet-cadet.c:835 +#: src/cadet/gnunet-cadet.c:852 msgid "activate echo mode" msgstr "" -#: src/cadet/gnunet-cadet.c:838 +#: src/cadet/gnunet-cadet.c:855 msgid "dump debug information to STDERR" msgstr "" -#: src/cadet/gnunet-cadet.c:844 +#: src/cadet/gnunet-cadet.c:861 msgid "port to listen to (default; 0)" msgstr "" -#: src/cadet/gnunet-cadet.c:847 +#: src/cadet/gnunet-cadet.c:864 #, fuzzy msgid "provide information about a patricular peer" msgstr "Informationen über andere GNUnet Knoten ausgeben." -#: src/cadet/gnunet-cadet.c:850 +#: src/cadet/gnunet-cadet.c:867 #, fuzzy msgid "provide information about all peers" msgstr "Informationen über andere GNUnet Knoten ausgeben." -#: src/cadet/gnunet-cadet.c:853 +#: src/cadet/gnunet-cadet.c:870 msgid "provide information about a particular tunnel" msgstr "" -#: src/cadet/gnunet-cadet.c:856 +#: src/cadet/gnunet-cadet.c:873 #, fuzzy msgid "provide information about all tunnels" msgstr "Informationen über andere GNUnet Knoten ausgeben." -#: src/cadet/gnunet-service-cadet_peer.c:507 +#: src/cadet/gnunet-service-cadet_peer.c:514 msgid "Wrong CORE service\n" msgstr "" @@ -1469,50 +1469,49 @@ msgstr "# Bytes empfangen über TCP" msgid "# updates to my type map" msgstr "" -#: src/datacache/datacache.c:115 src/datacache/datacache.c:266 +#: src/datacache/datacache.c:119 src/datacache/datacache.c:294 #: src/datastore/gnunet-service-datastore.c:841 msgid "# bytes stored" msgstr "# gespeicherte Bytes" -#: src/datacache/datacache.c:117 src/datacache/datacache.c:268 +#: src/datacache/datacache.c:123 src/datacache/datacache.c:298 msgid "# items stored" msgstr "# gespeicherte Objekte" -#: src/datacache/datacache.c:143 src/datacache/datacache.c:150 -#: src/datastore/gnunet-service-datastore.c:1598 -#: src/datastore/gnunet-service-datastore.c:1609 -#, fuzzy, c-format -msgid "No `%s' specified for `%s' in configuration!\n" -msgstr "In der Konfigurationsdatei wurden keine Anwendungen definiert!\n" - -#: src/datacache/datacache.c:184 +#: src/datacache/datacache.c:202 #, c-format msgid "Loading `%s' datacache plugin\n" msgstr "" -#: src/datacache/datacache.c:192 +#: src/datacache/datacache.c:213 #, fuzzy, c-format msgid "Failed to load datacache plugin for `%s'\n" msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n" -#: src/datacache/datacache.c:295 +#: src/datacache/datacache.c:329 msgid "# requests received" msgstr "# Anfragen empfangen" -#: src/datacache/datacache.c:304 +#: src/datacache/datacache.c:339 msgid "# requests filtered by bloom filter" msgstr "" -#: src/datacache/plugin_datacache_heap.c:406 -msgid "Heap datacache running\n" -msgstr "" +#: src/datacache/datacache.c:367 +#, fuzzy +msgid "# requests for random value received" +msgstr "# Anfragen empfangen" + +#: src/datacache/datacache.c:399 +#, fuzzy +msgid "# proximity search requests received" +msgstr "# Klartext PONG Nachrichten empfangen" -#: src/datacache/plugin_datacache_postgres.c:391 -msgid "Postgres datacache running\n" +#: src/datacache/plugin_datacache_heap.c:466 +msgid "Heap datacache running\n" msgstr "" -#: src/datacache/plugin_datacache_sqlite.c:69 -#: src/datacache/plugin_datacache_sqlite.c:72 +#: src/datacache/plugin_datacache_sqlite.c:77 +#: src/datacache/plugin_datacache_sqlite.c:86 #: src/datastore/plugin_datastore_mysql.c:818 #: src/datastore/plugin_datastore_mysql.c:834 #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 @@ -1527,32 +1526,19 @@ msgstr "" #: src/testbed/gnunet-daemon-latency-logger.c:52 #: src/testbed/gnunet-daemon-testbed-underlay.c:55 #: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:51 -#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:626 -#: src/include/gnunet_common.h:635 src/scalarproduct/scalarproduct.h:35 +#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:667 +#: src/include/gnunet_common.h:676 src/scalarproduct/scalarproduct.h:35 #, c-format msgid "`%s' failed at %s:%d with error: %s\n" msgstr "»%s« schlug bei %s:%d mit dem Fehler %s fehl\n" -#: src/datacache/plugin_datacache_sqlite.c:449 -msgid "Sqlite datacache running\n" -msgstr "" - -#: src/datacache/plugin_datacache_sqlite.c:483 +#: src/datacache/plugin_datacache_sqlite.c:749 #: src/datastore/plugin_datastore_sqlite.c:401 #: src/namecache/plugin_namecache_sqlite.c:292 #: src/namestore/plugin_namestore_sqlite.c:324 msgid "Tried to close sqlite without finalizing all prepared statements.\n" msgstr "" -#: src/datacache/plugin_datacache_sqlite.c:490 -#, c-format -msgid "Failed to close statement %p: %d\n" -msgstr "Anweisung %p konnte nicht geschlossen werden: %d\n" - -#: src/datacache/plugin_datacache_template.c:125 -msgid "Template datacache running\n" -msgstr "" - #: src/datastore/datastore_api.c:310 #, fuzzy msgid "Failed to transmit request to drop database.\n" @@ -1802,6 +1788,12 @@ msgstr "" msgid "Plugin does not support get_keys function. Please fix!\n" msgstr "" +#: src/datastore/gnunet-service-datastore.c:1598 +#: src/datastore/gnunet-service-datastore.c:1609 +#, fuzzy, c-format +msgid "No `%s' specified for `%s' in configuration!\n" +msgstr "In der Konfigurationsdatei wurden keine Anwendungen definiert!\n" + #: src/datastore/gnunet-service-datastore.c:1603 #, fuzzy, c-format msgid "# bytes used in file-sharing datastore `%s'" @@ -2072,112 +2064,130 @@ msgstr "" msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY." msgstr "" -#: src/dht/gnunet-service-dht.c:172 src/dht/gnunet-service-xdht.c:193 +#: src/dht/gnunet-service-dht.c:172 msgid "Failed to connect to transport service!\n" msgstr "Verbindung zum Transportdienst ist fehlgeschlagen!\n" #: src/dht/gnunet-service-dht_clients.c:417 +#: src/dht/gnunet-service-wdht_clients.c:852 #: src/dht/gnunet-service-xdht_clients.c:849 #, fuzzy msgid "# GET requests from clients injected" msgstr "# gap Anfragen mit taktischer Entscheidung: nicht Antworten" #: src/dht/gnunet-service-dht_clients.c:513 +#: src/dht/gnunet-service-wdht_clients.c:937 #: src/dht/gnunet-service-xdht_clients.c:933 #, fuzzy msgid "# PUT requests received from clients" msgstr "Die `%s' Anfrage, die vom Client empfangen wurde, ist beschädigt.\n" #: src/dht/gnunet-service-dht_clients.c:597 +#: src/dht/gnunet-service-wdht_clients.c:1003 #: src/dht/gnunet-service-xdht_clients.c:998 #, fuzzy msgid "# GET requests received from clients" msgstr "Die `%s' Anfrage, die vom Client empfangen wurde, ist beschädigt.\n" #: src/dht/gnunet-service-dht_clients.c:798 +#: src/dht/gnunet-service-wdht_clients.c:1212 #: src/dht/gnunet-service-xdht_clients.c:1200 #, fuzzy msgid "# GET STOP requests received from clients" msgstr "Die `%s' Anfrage, die vom Client empfangen wurde, ist beschädigt.\n" #: src/dht/gnunet-service-dht_clients.c:1040 +#: src/dht/gnunet-service-wdht_clients.c:505 #: src/dht/gnunet-service-xdht_clients.c:503 msgid "# Key match, type mismatches in REPLY to CLIENT" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1053 +#: src/dht/gnunet-service-wdht_clients.c:519 #: src/dht/gnunet-service-xdht_clients.c:517 msgid "# Duplicate REPLIES to CLIENT request dropped" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1098 +#: src/dht/gnunet-service-wdht_clients.c:561 #: src/dht/gnunet-service-xdht_clients.c:559 #, c-format msgid "Unsupported block type (%u) in request!\n" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1121 +#: src/dht/gnunet-service-wdht_clients.c:584 #: src/dht/gnunet-service-xdht_clients.c:582 msgid "# RESULTS queued for clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1175 #: src/dht/gnunet-service-dht_clients.c:1218 +#: src/dht/gnunet-service-wdht_clients.c:638 +#: src/dht/gnunet-service-wdht_clients.c:681 #: src/dht/gnunet-service-xdht_clients.c:636 #: src/dht/gnunet-service-xdht_clients.c:679 msgid "# REPLIES ignored for CLIENTS (no match)" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1185 +#: src/dht/gnunet-service-wdht_clients.c:648 #: src/dht/gnunet-service-xdht_clients.c:646 #, fuzzy msgid "Could not pass reply to client, message too big!\n" msgstr "'join' Nachricht konnte nicht an gnunetd gesendet werden.\n" -#: src/dht/gnunet-service-dht_datacache.c:69 -#: src/dht/gnunet-service-xdht_datacache.c:71 +#: src/dht/gnunet-service-dht_datacache.c:68 #, c-format msgid "%s request received, but have no datacache!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:79 -#: src/dht/gnunet-service-xdht_datacache.c:82 +#: src/dht/gnunet-service-dht_datacache.c:78 +#: src/dht/gnunet-service-wdht_datacache.c:107 +#: src/dht/gnunet-service-xdht_datacache.c:91 msgid "# ITEMS stored in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:176 -#: src/dht/gnunet-service-xdht_datacache.c:230 +#: src/dht/gnunet-service-dht_datacache.c:184 +#: src/dht/gnunet-service-wdht_datacache.c:216 +#: src/dht/gnunet-service-xdht_datacache.c:238 msgid "# Good RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:193 -#: src/dht/gnunet-service-xdht_datacache.c:253 +#: src/dht/gnunet-service-dht_datacache.c:201 +#: src/dht/gnunet-service-wdht_datacache.c:231 +#: src/dht/gnunet-service-xdht_datacache.c:267 msgid "# Duplicate RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:199 -#: src/dht/gnunet-service-xdht_datacache.c:259 +#: src/dht/gnunet-service-dht_datacache.c:207 +#: src/dht/gnunet-service-wdht_datacache.c:237 +#: src/dht/gnunet-service-xdht_datacache.c:273 msgid "# Invalid RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:205 -#: src/dht/gnunet-service-xdht_datacache.c:265 +#: src/dht/gnunet-service-dht_datacache.c:213 +#: src/dht/gnunet-service-wdht_datacache.c:243 +#: src/dht/gnunet-service-xdht_datacache.c:279 msgid "# Irrelevant RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:217 -#: src/dht/gnunet-service-xdht_datacache.c:277 +#: src/dht/gnunet-service-dht_datacache.c:225 +#: src/dht/gnunet-service-wdht_datacache.c:255 +#: src/dht/gnunet-service-xdht_datacache.c:291 msgid "# Unsupported RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:221 -#: src/dht/gnunet-service-xdht_datacache.c:280 +#: src/dht/gnunet-service-dht_datacache.c:229 +#: src/dht/gnunet-service-wdht_datacache.c:258 +#: src/dht/gnunet-service-xdht_datacache.c:294 #, c-format msgid "Unsupported block type (%u) in local response!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:254 -#: src/dht/gnunet-service-xdht_datacache.c:318 +#: src/dht/gnunet-service-dht_datacache.c:262 +#: src/dht/gnunet-service-wdht_datacache.c:295 +#: src/dht/gnunet-service-xdht_datacache.c:334 msgid "# GET requests given to datacache" msgstr "" @@ -2196,7 +2206,7 @@ msgid "# FIND PEER messages initiated" msgstr "# PING Nachrichten erstellt" #: src/dht/gnunet-service-dht_neighbours.c:763 -#: src/dht/gnunet-service-xdht_neighbours.c:6060 +#: src/dht/gnunet-service-xdht_neighbours.c:6062 msgid "# Queued messages discarded (peer disconnected)" msgstr "" @@ -2315,7 +2325,8 @@ msgstr "" msgid "# P2P RESULT bytes received" msgstr "# Bytes empfangen über TCP" -#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-xdht_nse.c:59 +#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-wdht_nse.c:59 +#: src/dht/gnunet-service-xdht_nse.c:59 #, fuzzy msgid "# Network size estimates received" msgstr "# verschlüsselter PING Nachrichten empfangen" @@ -2353,6 +2364,11 @@ msgstr "" msgid "# DHT requests combined" msgstr "# dht Anfragen weitergeleitet" +#: src/dht/gnunet-service-wdht_datacache.c:82 +#, fuzzy +msgid "PUT request received, but have no datacache!\n" +msgstr "Die `%s' Anfrage, die vom Client empfangen wurde, ist beschädigt.\n" + #: src/dht/gnunet-service-xdht_neighbours.c:1832 #, c-format msgid "" @@ -2416,15 +2432,15 @@ msgstr "" #: src/dht/gnunet-service-xdht_neighbours.c:3700 #: src/dht/gnunet-service-xdht_neighbours.c:3938 #: src/dht/gnunet-service-xdht_neighbours.c:4090 -#: src/dht/gnunet-service-xdht_neighbours.c:4240 -#: src/dht/gnunet-service-xdht_neighbours.c:4421 -#: src/dht/gnunet-service-xdht_neighbours.c:4934 -#: src/dht/gnunet-service-xdht_neighbours.c:5327 -#: src/dht/gnunet-service-xdht_neighbours.c:5420 -#: src/dht/gnunet-service-xdht_neighbours.c:5510 -#: src/dht/gnunet-service-xdht_neighbours.c:5614 -#: src/dht/gnunet-service-xdht_neighbours.c:5758 -#: src/dht/gnunet-service-xdht_neighbours.c:5847 +#: src/dht/gnunet-service-xdht_neighbours.c:4242 +#: src/dht/gnunet-service-xdht_neighbours.c:4423 +#: src/dht/gnunet-service-xdht_neighbours.c:4936 +#: src/dht/gnunet-service-xdht_neighbours.c:5329 +#: src/dht/gnunet-service-xdht_neighbours.c:5422 +#: src/dht/gnunet-service-xdht_neighbours.c:5512 +#: src/dht/gnunet-service-xdht_neighbours.c:5616 +#: src/dht/gnunet-service-xdht_neighbours.c:5760 +#: src/dht/gnunet-service-xdht_neighbours.c:5849 #, fuzzy msgid "# Bytes received from other peers" msgstr "# Bytes des Typs %d empfangen" @@ -5933,64 +5949,64 @@ msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" msgid "Failed to get fragment!\n" msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" -#: src/psycstore/gnunet-service-psycstore.c:402 +#: src/psycstore/gnunet-service-psycstore.c:417 #, fuzzy msgid "Failed to get message!\n" msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" -#: src/psycstore/gnunet-service-psycstore.c:433 +#: src/psycstore/gnunet-service-psycstore.c:448 #, fuzzy msgid "Failed to get message fragment!\n" msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" -#: src/psycstore/gnunet-service-psycstore.c:461 +#: src/psycstore/gnunet-service-psycstore.c:476 #, fuzzy msgid "Failed to get master counters!\n" msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" -#: src/psycstore/gnunet-service-psycstore.c:497 -#: src/psycstore/gnunet-service-psycstore.c:570 +#: src/psycstore/gnunet-service-psycstore.c:512 +#: src/psycstore/gnunet-service-psycstore.c:585 msgid "Tried to set invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:513 +#: src/psycstore/gnunet-service-psycstore.c:528 #, fuzzy msgid "Failed to begin modifying state!\n" msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" -#: src/psycstore/gnunet-service-psycstore.c:536 +#: src/psycstore/gnunet-service-psycstore.c:551 #, fuzzy, c-format msgid "Unknown operator: %c\n" msgstr "Unbekannte Operation `%s'\n" -#: src/psycstore/gnunet-service-psycstore.c:546 +#: src/psycstore/gnunet-service-psycstore.c:561 #, fuzzy msgid "Failed to end modifying state!\n" msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" -#: src/psycstore/gnunet-service-psycstore.c:584 +#: src/psycstore/gnunet-service-psycstore.c:599 #, fuzzy msgid "Failed to begin synchronizing state!\n" msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" -#: src/psycstore/gnunet-service-psycstore.c:600 +#: src/psycstore/gnunet-service-psycstore.c:615 #, fuzzy msgid "Failed to end synchronizing state!\n" msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" -#: src/psycstore/gnunet-service-psycstore.c:620 -#: src/psycstore/gnunet-service-psycstore.c:639 +#: src/psycstore/gnunet-service-psycstore.c:635 +#: src/psycstore/gnunet-service-psycstore.c:654 #, fuzzy msgid "Failed to reset state!\n" msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n" -#: src/psycstore/gnunet-service-psycstore.c:662 -#: src/psycstore/gnunet-service-psycstore.c:713 +#: src/psycstore/gnunet-service-psycstore.c:677 +#: src/psycstore/gnunet-service-psycstore.c:728 msgid "Tried to get invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:689 -#: src/psycstore/gnunet-service-psycstore.c:728 +#: src/psycstore/gnunet-service-psycstore.c:704 +#: src/psycstore/gnunet-service-psycstore.c:743 #, fuzzy msgid "Failed to get state variable!\n" msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" @@ -6000,7 +6016,7 @@ msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n" msgid "`%s' failed at %s:%d with error: %s (%d)\n" msgstr "`%s' schlug bei %s:%d mit dem Fehler %s fehl\n" -#: src/psycstore/plugin_psycstore_sqlite.c:1932 +#: src/psycstore/plugin_psycstore_sqlite.c:1936 #, fuzzy msgid "SQLite database running\n" msgstr "SQL Datenbank beschädigt, Ergebnis wird ignoriert.\n" @@ -7988,7 +8004,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2825 -#: src/transport/plugin_transport_udp.c:3335 +#: src/transport/plugin_transport_udp.c:3338 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -8230,36 +8246,36 @@ msgid "" "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3411 -#: src/transport/plugin_transport_udp.c:3510 +#: src/transport/plugin_transport_udp.c:3414 +#: src/transport/plugin_transport_udp.c:3513 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "UDP-Sockets können nicht geöffnet werden\n" -#: src/transport/plugin_transport_udp.c:3429 +#: src/transport/plugin_transport_udp.c:3432 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3520 +#: src/transport/plugin_transport_udp.c:3523 msgid "Failed to open UDP sockets\n" msgstr "UDP-Sockets können nicht geöffnet werden\n" -#: src/transport/plugin_transport_udp.c:3591 -#: src/transport/plugin_transport_udp.c:3605 +#: src/transport/plugin_transport_udp.c:3594 +#: src/transport/plugin_transport_udp.c:3608 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3637 +#: src/transport/plugin_transport_udp.c:3640 #, fuzzy msgid "must be valid IPv4 address" msgstr "»%s« ist keine gültige IP-Adresse.\n" -#: src/transport/plugin_transport_udp.c:3664 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv6 address" msgstr "»%s« ist keine gültige IP-Adresse.\n" -#: src/transport/plugin_transport_udp.c:3730 +#: src/transport/plugin_transport_udp.c:3733 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "UDP-Sockets können nicht geöffnet werden\n" @@ -8582,7 +8598,7 @@ msgid "libgcrypt has not the expected version (version %s is required).\n" msgstr "" "libgcrypt hat nicht die erwartete Version (Version %s wird vorausgesetzt).\n" -#: src/util/crypto_rsa.c:825 +#: src/util/crypto_rsa.c:891 #, fuzzy, c-format msgid "RSA signature verification failed at %s:%d: %s\n" msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n" @@ -9384,22 +9400,25 @@ msgstr "Dienst wird über UDP angeboten" msgid "Setup tunnels via VPN." msgstr "Tunnel über VPN einrichten." -#: src/include/gnunet_common.h:590 src/include/gnunet_common.h:597 -#: src/include/gnunet_common.h:605 +#: src/include/gnunet_common.h:631 src/include/gnunet_common.h:638 +#: src/include/gnunet_common.h:646 #, fuzzy, c-format msgid "Assertion failed at %s:%d.\n" msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n" -#: src/include/gnunet_common.h:617 +#: src/include/gnunet_common.h:658 #, fuzzy, c-format msgid "External protocol violation detected at %s:%d.\n" msgstr "Protokollverletzung auf Socket. Kommando erwartet.\n" -#: src/include/gnunet_common.h:644 src/include/gnunet_common.h:653 +#: src/include/gnunet_common.h:685 src/include/gnunet_common.h:694 #, fuzzy, c-format msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" msgstr "`%s' schlug bei Datei `%s' fehl. Ort: %s:%d. Fehler: %s\n" +#~ msgid "Failed to close statement %p: %d\n" +#~ msgstr "Anweisung %p konnte nicht geschlossen werden: %d\n" + #, fuzzy #~ msgid "Starting default services `%s'\n" #~ msgstr "Collection `%s' begonnen.\n" diff --git a/po/es.po b/po/es.po index 207147b5f..4c950caca 100644 --- a/po/es.po +++ b/po/es.po @@ -7,11 +7,11 @@ msgid "" msgstr "" "Project-Id-Version: gnunet 0.9.5a\n" "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" -"POT-Creation-Date: 2015-04-27 13:05+0200\n" +"POT-Creation-Date: 2015-05-19 11:25+0200\n" "PO-Revision-Date: 2013-02-23 17:50+0100\n" "Last-Translator: Miguel Ángel Arruga Vivas \n" "Language-Team: Spanish \n" -"Language: \n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -699,57 +699,57 @@ msgstr "Imprime información acerca del estado del ATS" msgid "Invalid target `%s'\n" msgstr "Parámetro no válido «%s»\n" -#: src/cadet/gnunet-cadet.c:626 +#: src/cadet/gnunet-cadet.c:643 #, fuzzy, c-format msgid "Invalid peer ID `%s'\n" msgstr "URI no válida: «%s»\n" -#: src/cadet/gnunet-cadet.c:669 +#: src/cadet/gnunet-cadet.c:686 #, fuzzy, c-format msgid "Invalid tunnel owner `%s'\n" msgstr "Formato de tiempo no válido «%s»\n" -#: src/cadet/gnunet-cadet.c:735 +#: src/cadet/gnunet-cadet.c:752 msgid "You must NOT give a TARGETwhen using 'request all' options\n" msgstr "" -#: src/cadet/gnunet-cadet.c:832 +#: src/cadet/gnunet-cadet.c:849 #, fuzzy msgid "provide information about a particular connection" msgstr "proveer información acerca de un túnel en particular" -#: src/cadet/gnunet-cadet.c:835 +#: src/cadet/gnunet-cadet.c:852 msgid "activate echo mode" msgstr "" -#: src/cadet/gnunet-cadet.c:838 +#: src/cadet/gnunet-cadet.c:855 msgid "dump debug information to STDERR" msgstr "" -#: src/cadet/gnunet-cadet.c:844 +#: src/cadet/gnunet-cadet.c:861 msgid "port to listen to (default; 0)" msgstr "" -#: src/cadet/gnunet-cadet.c:847 +#: src/cadet/gnunet-cadet.c:864 #, fuzzy msgid "provide information about a patricular peer" msgstr "proveer información acerca de un túnel en particular" -#: src/cadet/gnunet-cadet.c:850 +#: src/cadet/gnunet-cadet.c:867 #, fuzzy msgid "provide information about all peers" msgstr "proveer información acerca de un túnel en particular" -#: src/cadet/gnunet-cadet.c:853 +#: src/cadet/gnunet-cadet.c:870 msgid "provide information about a particular tunnel" msgstr "proveer información acerca de un túnel en particular" -#: src/cadet/gnunet-cadet.c:856 +#: src/cadet/gnunet-cadet.c:873 #, fuzzy msgid "provide information about all tunnels" msgstr "proveer información acerca de un túnel en particular" -#: src/cadet/gnunet-service-cadet_peer.c:507 +#: src/cadet/gnunet-service-cadet_peer.c:514 msgid "Wrong CORE service\n" msgstr "Servicio principal (CORE) erróneo\n" @@ -1538,51 +1538,50 @@ msgstr "# mapas de tipos recibidos" msgid "# updates to my type map" msgstr "# actualizaciones de mi mapa de tipos" -#: src/datacache/datacache.c:115 src/datacache/datacache.c:266 +#: src/datacache/datacache.c:119 src/datacache/datacache.c:294 #: src/datastore/gnunet-service-datastore.c:841 msgid "# bytes stored" msgstr "# bytes almacenados" -#: src/datacache/datacache.c:117 src/datacache/datacache.c:268 +#: src/datacache/datacache.c:123 src/datacache/datacache.c:298 msgid "# items stored" msgstr "# elementos almacenados" -#: src/datacache/datacache.c:143 src/datacache/datacache.c:150 -#: src/datastore/gnunet-service-datastore.c:1598 -#: src/datastore/gnunet-service-datastore.c:1609 -#, c-format -msgid "No `%s' specified for `%s' in configuration!\n" -msgstr "¡No se ha especificado ningún «%s» para «%s» en la configuración!\n" - -#: src/datacache/datacache.c:184 +#: src/datacache/datacache.c:202 #, c-format msgid "Loading `%s' datacache plugin\n" msgstr "Cargando el módulo de la cache de datos «%s»\n" -#: src/datacache/datacache.c:192 +#: src/datacache/datacache.c:213 #, c-format msgid "Failed to load datacache plugin for `%s'\n" msgstr "" "Se produjo un fallo al cargar el módulo de la cache de datos para «%s»\n" -#: src/datacache/datacache.c:295 +#: src/datacache/datacache.c:329 msgid "# requests received" msgstr "# peticiones recibidas" -#: src/datacache/datacache.c:304 +#: src/datacache/datacache.c:339 msgid "# requests filtered by bloom filter" msgstr "# peticiones filtradas por el «bloomfilter»" -#: src/datacache/plugin_datacache_heap.c:406 +#: src/datacache/datacache.c:367 +#, fuzzy +msgid "# requests for random value received" +msgstr "# peticiones recibidas" + +#: src/datacache/datacache.c:399 +#, fuzzy +msgid "# proximity search requests received" +msgstr "# búsquedas de clientes recibidas" + +#: src/datacache/plugin_datacache_heap.c:466 msgid "Heap datacache running\n" msgstr "Caché de datos de montículo (heap) ejecutándose\n" -#: src/datacache/plugin_datacache_postgres.c:391 -msgid "Postgres datacache running\n" -msgstr "Caché de datos Postgres ejecutándose\n" - -#: src/datacache/plugin_datacache_sqlite.c:69 -#: src/datacache/plugin_datacache_sqlite.c:72 +#: src/datacache/plugin_datacache_sqlite.c:77 +#: src/datacache/plugin_datacache_sqlite.c:86 #: src/datastore/plugin_datastore_mysql.c:818 #: src/datastore/plugin_datastore_mysql.c:834 #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 @@ -1597,17 +1596,13 @@ msgstr "Caché de datos Postgres ejecutándose\n" #: src/testbed/gnunet-daemon-latency-logger.c:52 #: src/testbed/gnunet-daemon-testbed-underlay.c:55 #: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:51 -#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:626 -#: src/include/gnunet_common.h:635 src/scalarproduct/scalarproduct.h:35 +#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:667 +#: src/include/gnunet_common.h:676 src/scalarproduct/scalarproduct.h:35 #, c-format msgid "`%s' failed at %s:%d with error: %s\n" msgstr "«%s» falló en %s: %d con el error: %s\n" -#: src/datacache/plugin_datacache_sqlite.c:449 -msgid "Sqlite datacache running\n" -msgstr "Caché de datos Sqlite ejecutándose\n" - -#: src/datacache/plugin_datacache_sqlite.c:483 +#: src/datacache/plugin_datacache_sqlite.c:749 #: src/datastore/plugin_datastore_sqlite.c:401 #: src/namecache/plugin_namecache_sqlite.c:292 #: src/namestore/plugin_namestore_sqlite.c:324 @@ -1615,15 +1610,6 @@ msgid "Tried to close sqlite without finalizing all prepared statements.\n" msgstr "" "Se intentó cerrar sqlite sin finalizar todas las sentencias preparadas.\n" -#: src/datacache/plugin_datacache_sqlite.c:490 -#, c-format -msgid "Failed to close statement %p: %d\n" -msgstr "Se produjo un fallo al cerrar la sentencia %p: %d\n" - -#: src/datacache/plugin_datacache_template.c:125 -msgid "Template datacache running\n" -msgstr "Caché de datos de plantilla en ejecución\n" - # Miguel: "Drop" en bases de datos es eliminar una tabla # del modelo. #: src/datastore/datastore_api.c:310 @@ -1874,6 +1860,12 @@ msgstr "Reconstruyendo «bloomfilter». Por favor, tenga paciencia.\n" msgid "Plugin does not support get_keys function. Please fix!\n" msgstr "El módulo no soporta la función «get_keys». Por favor, corríjalo.\n" +#: src/datastore/gnunet-service-datastore.c:1598 +#: src/datastore/gnunet-service-datastore.c:1609 +#, c-format +msgid "No `%s' specified for `%s' in configuration!\n" +msgstr "¡No se ha especificado ningún «%s» para «%s» en la configuración!\n" + #: src/datastore/gnunet-service-datastore.c:1603 #, c-format msgid "# bytes used in file-sharing datastore `%s'" @@ -2158,31 +2150,36 @@ msgstr "" "Inicianco una petición «PUT» a la DHT de GNUnet para insertar «DATA» bajo " "«KEY»." -#: src/dht/gnunet-service-dht.c:172 src/dht/gnunet-service-xdht.c:193 +#: src/dht/gnunet-service-dht.c:172 msgid "Failed to connect to transport service!\n" msgstr "¡Se produjo un fallo al conectar con el servicio de transporte!\n" #: src/dht/gnunet-service-dht_clients.c:417 +#: src/dht/gnunet-service-wdht_clients.c:852 #: src/dht/gnunet-service-xdht_clients.c:849 msgid "# GET requests from clients injected" msgstr "# peticiones «GET» inyectadas de clientes" #: src/dht/gnunet-service-dht_clients.c:513 +#: src/dht/gnunet-service-wdht_clients.c:937 #: src/dht/gnunet-service-xdht_clients.c:933 msgid "# PUT requests received from clients" msgstr "# peticiones «PUT» recibidas de clientes" #: src/dht/gnunet-service-dht_clients.c:597 +#: src/dht/gnunet-service-wdht_clients.c:1003 #: src/dht/gnunet-service-xdht_clients.c:998 msgid "# GET requests received from clients" msgstr "# peticiones «GET» recibidas de clientes" #: src/dht/gnunet-service-dht_clients.c:798 +#: src/dht/gnunet-service-wdht_clients.c:1212 #: src/dht/gnunet-service-xdht_clients.c:1200 msgid "# GET STOP requests received from clients" msgstr "# peticiones «GET STOP» recibidas de clientes" #: src/dht/gnunet-service-dht_clients.c:1040 +#: src/dht/gnunet-service-wdht_clients.c:505 #: src/dht/gnunet-service-xdht_clients.c:503 msgid "# Key match, type mismatches in REPLY to CLIENT" msgstr "" @@ -2190,24 +2187,29 @@ msgstr "" "cliente (CLIENT)" #: src/dht/gnunet-service-dht_clients.c:1053 +#: src/dht/gnunet-service-wdht_clients.c:519 #: src/dht/gnunet-service-xdht_clients.c:517 msgid "# Duplicate REPLIES to CLIENT request dropped" msgstr "" "# Peticiones duplicadas de respuestas (REPLIES) a clientes (CLIENT) omitidas" #: src/dht/gnunet-service-dht_clients.c:1098 +#: src/dht/gnunet-service-wdht_clients.c:561 #: src/dht/gnunet-service-xdht_clients.c:559 #, c-format msgid "Unsupported block type (%u) in request!\n" msgstr "¡Tipo de bloque no soportado (%u) en la petición!\n" #: src/dht/gnunet-service-dht_clients.c:1121 +#: src/dht/gnunet-service-wdht_clients.c:584 #: src/dht/gnunet-service-xdht_clients.c:582 msgid "# RESULTS queued for clients" msgstr "# Resultados (RESULTS) encolados para clientes" #: src/dht/gnunet-service-dht_clients.c:1175 #: src/dht/gnunet-service-dht_clients.c:1218 +#: src/dht/gnunet-service-wdht_clients.c:638 +#: src/dht/gnunet-service-wdht_clients.c:681 #: src/dht/gnunet-service-xdht_clients.c:636 #: src/dht/gnunet-service-xdht_clients.c:679 msgid "# REPLIES ignored for CLIENTS (no match)" @@ -2215,55 +2217,63 @@ msgstr "" "# Respuestas (REPLIES) ignoradas para clientes (CLIENTS) (sin coincidencia)" #: src/dht/gnunet-service-dht_clients.c:1185 +#: src/dht/gnunet-service-wdht_clients.c:648 #: src/dht/gnunet-service-xdht_clients.c:646 msgid "Could not pass reply to client, message too big!\n" msgstr "" "¡No se pudo enviar respuesta al cliente, el mensaje es demasiado grande!\n" -#: src/dht/gnunet-service-dht_datacache.c:69 -#: src/dht/gnunet-service-xdht_datacache.c:71 +#: src/dht/gnunet-service-dht_datacache.c:68 #, c-format msgid "%s request received, but have no datacache!\n" msgstr "¡Petición %s recibida, pero no tiene caché de datos!\n" -#: src/dht/gnunet-service-dht_datacache.c:79 -#: src/dht/gnunet-service-xdht_datacache.c:82 +#: src/dht/gnunet-service-dht_datacache.c:78 +#: src/dht/gnunet-service-wdht_datacache.c:107 +#: src/dht/gnunet-service-xdht_datacache.c:91 msgid "# ITEMS stored in datacache" msgstr "# Elementos (ITEMS) almacenados en la caché de datos" -#: src/dht/gnunet-service-dht_datacache.c:176 -#: src/dht/gnunet-service-xdht_datacache.c:230 +#: src/dht/gnunet-service-dht_datacache.c:184 +#: src/dht/gnunet-service-wdht_datacache.c:216 +#: src/dht/gnunet-service-xdht_datacache.c:238 msgid "# Good RESULTS found in datacache" msgstr "# Buenos resultados (RESULTS) encontrados en la caché de datos" -#: src/dht/gnunet-service-dht_datacache.c:193 -#: src/dht/gnunet-service-xdht_datacache.c:253 +#: src/dht/gnunet-service-dht_datacache.c:201 +#: src/dht/gnunet-service-wdht_datacache.c:231 +#: src/dht/gnunet-service-xdht_datacache.c:267 msgid "# Duplicate RESULTS found in datacache" msgstr "# Resultados (RESULTS) duplicados encontrados en la caché de datos" -#: src/dht/gnunet-service-dht_datacache.c:199 -#: src/dht/gnunet-service-xdht_datacache.c:259 +#: src/dht/gnunet-service-dht_datacache.c:207 +#: src/dht/gnunet-service-wdht_datacache.c:237 +#: src/dht/gnunet-service-xdht_datacache.c:273 msgid "# Invalid RESULTS found in datacache" msgstr "# Resultados (RESULTS) no válidos encontrados en la caché de datos" -#: src/dht/gnunet-service-dht_datacache.c:205 -#: src/dht/gnunet-service-xdht_datacache.c:265 +#: src/dht/gnunet-service-dht_datacache.c:213 +#: src/dht/gnunet-service-wdht_datacache.c:243 +#: src/dht/gnunet-service-xdht_datacache.c:279 msgid "# Irrelevant RESULTS found in datacache" msgstr "# Resultados (RESULTS) irrelevantes encontrados en la caché de datos" -#: src/dht/gnunet-service-dht_datacache.c:217 -#: src/dht/gnunet-service-xdht_datacache.c:277 +#: src/dht/gnunet-service-dht_datacache.c:225 +#: src/dht/gnunet-service-wdht_datacache.c:255 +#: src/dht/gnunet-service-xdht_datacache.c:291 msgid "# Unsupported RESULTS found in datacache" msgstr "# Resultados (RESULTS) no soportados encontrados en la caché de datos" -#: src/dht/gnunet-service-dht_datacache.c:221 -#: src/dht/gnunet-service-xdht_datacache.c:280 +#: src/dht/gnunet-service-dht_datacache.c:229 +#: src/dht/gnunet-service-wdht_datacache.c:258 +#: src/dht/gnunet-service-xdht_datacache.c:294 #, c-format msgid "Unsupported block type (%u) in local response!\n" msgstr "¡Tipo de bloque no soportado (%u) en respuesta local!\n" -#: src/dht/gnunet-service-dht_datacache.c:254 -#: src/dht/gnunet-service-xdht_datacache.c:318 +#: src/dht/gnunet-service-dht_datacache.c:262 +#: src/dht/gnunet-service-wdht_datacache.c:295 +#: src/dht/gnunet-service-xdht_datacache.c:334 msgid "# GET requests given to datacache" msgstr "# Peticiones «GET» realizadas a la caché de datos" @@ -2281,7 +2291,7 @@ msgid "# FIND PEER messages initiated" msgstr "# mensajes «FIND PEER» iniciados" #: src/dht/gnunet-service-dht_neighbours.c:763 -#: src/dht/gnunet-service-xdht_neighbours.c:6060 +#: src/dht/gnunet-service-xdht_neighbours.c:6062 msgid "# Queued messages discarded (peer disconnected)" msgstr "# Mensajes encolados descartados (par desconectado)" @@ -2393,7 +2403,8 @@ msgstr "# Resultados (RESULTS) P2P recibidos" msgid "# P2P RESULT bytes received" msgstr "# Resultados (RESULTS) P2P recibidos" -#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-xdht_nse.c:59 +#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-wdht_nse.c:59 +#: src/dht/gnunet-service-xdht_nse.c:59 msgid "# Network size estimates received" msgstr "# Estimaciones del tamaño de red recibidas" @@ -2435,6 +2446,11 @@ msgstr "# Entradas añadidas a la tabla de encaminamiento" msgid "# DHT requests combined" msgstr "# Peticiones a la DHT combinadas" +#: src/dht/gnunet-service-wdht_datacache.c:82 +#, fuzzy +msgid "PUT request received, but have no datacache!\n" +msgstr "¡Petición %s recibida, pero no tiene caché de datos!\n" + #: src/dht/gnunet-service-xdht_neighbours.c:1832 #, c-format msgid "" @@ -2498,15 +2514,15 @@ msgstr "" #: src/dht/gnunet-service-xdht_neighbours.c:3700 #: src/dht/gnunet-service-xdht_neighbours.c:3938 #: src/dht/gnunet-service-xdht_neighbours.c:4090 -#: src/dht/gnunet-service-xdht_neighbours.c:4240 -#: src/dht/gnunet-service-xdht_neighbours.c:4421 -#: src/dht/gnunet-service-xdht_neighbours.c:4934 -#: src/dht/gnunet-service-xdht_neighbours.c:5327 -#: src/dht/gnunet-service-xdht_neighbours.c:5420 -#: src/dht/gnunet-service-xdht_neighbours.c:5510 -#: src/dht/gnunet-service-xdht_neighbours.c:5614 -#: src/dht/gnunet-service-xdht_neighbours.c:5758 -#: src/dht/gnunet-service-xdht_neighbours.c:5847 +#: src/dht/gnunet-service-xdht_neighbours.c:4242 +#: src/dht/gnunet-service-xdht_neighbours.c:4423 +#: src/dht/gnunet-service-xdht_neighbours.c:4936 +#: src/dht/gnunet-service-xdht_neighbours.c:5329 +#: src/dht/gnunet-service-xdht_neighbours.c:5422 +#: src/dht/gnunet-service-xdht_neighbours.c:5512 +#: src/dht/gnunet-service-xdht_neighbours.c:5616 +#: src/dht/gnunet-service-xdht_neighbours.c:5760 +#: src/dht/gnunet-service-xdht_neighbours.c:5849 #, fuzzy msgid "# Bytes received from other peers" msgstr "# respuestas recibidas de otros pares" @@ -6121,64 +6137,64 @@ msgstr "Se produjo un fallo al iniciar el demonio: %s\n" msgid "Failed to get fragment!\n" msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n" -#: src/psycstore/gnunet-service-psycstore.c:402 +#: src/psycstore/gnunet-service-psycstore.c:417 #, fuzzy msgid "Failed to get message!\n" msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n" -#: src/psycstore/gnunet-service-psycstore.c:433 +#: src/psycstore/gnunet-service-psycstore.c:448 #, fuzzy msgid "Failed to get message fragment!\n" msgstr "Se produjo un fallo al procesar un mensaje «HELLO»: mal formado\n" -#: src/psycstore/gnunet-service-psycstore.c:461 +#: src/psycstore/gnunet-service-psycstore.c:476 #, fuzzy msgid "Failed to get master counters!\n" msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n" -#: src/psycstore/gnunet-service-psycstore.c:497 -#: src/psycstore/gnunet-service-psycstore.c:570 +#: src/psycstore/gnunet-service-psycstore.c:512 +#: src/psycstore/gnunet-service-psycstore.c:585 msgid "Tried to set invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:513 +#: src/psycstore/gnunet-service-psycstore.c:528 #, fuzzy msgid "Failed to begin modifying state!\n" msgstr "Se produjo un fallo al cargar el estado: %s\n" -#: src/psycstore/gnunet-service-psycstore.c:536 +#: src/psycstore/gnunet-service-psycstore.c:551 #, fuzzy, c-format msgid "Unknown operator: %c\n" msgstr "Operación desconocida '%s'\n" -#: src/psycstore/gnunet-service-psycstore.c:546 +#: src/psycstore/gnunet-service-psycstore.c:561 #, fuzzy msgid "Failed to end modifying state!\n" msgstr "Se produjo un fallo al cargar el estado: %s\n" -#: src/psycstore/gnunet-service-psycstore.c:584 +#: src/psycstore/gnunet-service-psycstore.c:599 #, fuzzy msgid "Failed to begin synchronizing state!\n" msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n" -#: src/psycstore/gnunet-service-psycstore.c:600 +#: src/psycstore/gnunet-service-psycstore.c:615 #, fuzzy msgid "Failed to end synchronizing state!\n" msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n" -#: src/psycstore/gnunet-service-psycstore.c:620 -#: src/psycstore/gnunet-service-psycstore.c:639 +#: src/psycstore/gnunet-service-psycstore.c:635 +#: src/psycstore/gnunet-service-psycstore.c:654 #, fuzzy msgid "Failed to reset state!\n" msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n" -#: src/psycstore/gnunet-service-psycstore.c:662 -#: src/psycstore/gnunet-service-psycstore.c:713 +#: src/psycstore/gnunet-service-psycstore.c:677 +#: src/psycstore/gnunet-service-psycstore.c:728 msgid "Tried to get invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:689 -#: src/psycstore/gnunet-service-psycstore.c:728 +#: src/psycstore/gnunet-service-psycstore.c:704 +#: src/psycstore/gnunet-service-psycstore.c:743 #, fuzzy msgid "Failed to get state variable!\n" msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n" @@ -6188,7 +6204,7 @@ msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n" msgid "`%s' failed at %s:%d with error: %s (%d)\n" msgstr "«%s» falló en %s: %d con el error: %s\n" -#: src/psycstore/plugin_psycstore_sqlite.c:1932 +#: src/psycstore/plugin_psycstore_sqlite.c:1936 #, fuzzy msgid "SQLite database running\n" msgstr "Base de datos sqlite ejecutándose\n" @@ -8293,7 +8309,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "Encontradas %u direcciones para comunicar al servicio NAT\n" #: src/transport/plugin_transport_http_server.c:2825 -#: src/transport/plugin_transport_udp.c:3335 +#: src/transport/plugin_transport_udp.c:3338 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n" @@ -8547,37 +8563,37 @@ msgstr "" "configuración de red y deshabilite IPv6 si su conexión carece de una " "dirección IPv6 global\n" -#: src/transport/plugin_transport_udp.c:3411 -#: src/transport/plugin_transport_udp.c:3510 +#: src/transport/plugin_transport_udp.c:3414 +#: src/transport/plugin_transport_udp.c:3513 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" -#: src/transport/plugin_transport_udp.c:3429 +#: src/transport/plugin_transport_udp.c:3432 #, fuzzy msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "¡Deshabilitando IPv6 ya que no está soportado en este sistema!\n" -#: src/transport/plugin_transport_udp.c:3520 +#: src/transport/plugin_transport_udp.c:3523 msgid "Failed to open UDP sockets\n" msgstr "Se produjo un fallo al abrir los «sockets» UDP\n" -#: src/transport/plugin_transport_udp.c:3591 -#: src/transport/plugin_transport_udp.c:3605 +#: src/transport/plugin_transport_udp.c:3594 +#: src/transport/plugin_transport_udp.c:3608 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3637 +#: src/transport/plugin_transport_udp.c:3640 #, fuzzy msgid "must be valid IPv4 address" msgstr "«%s» no es una dirección IP válida.\n" -#: src/transport/plugin_transport_udp.c:3664 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv6 address" msgstr "«%s» no es una dirección IP válida.\n" -#: src/transport/plugin_transport_udp.c:3730 +#: src/transport/plugin_transport_udp.c:3733 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "Se produjo un fallo al crear una nueva firma" @@ -8912,7 +8928,7 @@ msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" msgid "libgcrypt has not the expected version (version %s is required).\n" msgstr "libgcrypt no tiene la versión esperada (se necesita la versión %s).\n" -#: src/util/crypto_rsa.c:825 +#: src/util/crypto_rsa.c:891 #, c-format msgid "RSA signature verification failed at %s:%d: %s\n" msgstr "La verificación de la firma RSA fallo en %s:%d: %s\n" @@ -9741,22 +9757,34 @@ msgstr "el servicio es ofrecido vía UDP" msgid "Setup tunnels via VPN." msgstr "Configurar túneles vía VPN." -#: src/include/gnunet_common.h:590 src/include/gnunet_common.h:597 -#: src/include/gnunet_common.h:605 +#: src/include/gnunet_common.h:631 src/include/gnunet_common.h:638 +#: src/include/gnunet_common.h:646 #, c-format msgid "Assertion failed at %s:%d.\n" msgstr "Aserción fallida en %s:%d.\n" -#: src/include/gnunet_common.h:617 +#: src/include/gnunet_common.h:658 #, c-format msgid "External protocol violation detected at %s:%d.\n" msgstr "Violación externa del protocolo detectada en %s:%d.\n" -#: src/include/gnunet_common.h:644 src/include/gnunet_common.h:653 +#: src/include/gnunet_common.h:685 src/include/gnunet_common.h:694 #, c-format msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" msgstr "«%s» falló en el fichero «%s» en %s:%d con el error: %s\n" +#~ msgid "Postgres datacache running\n" +#~ msgstr "Caché de datos Postgres ejecutándose\n" + +#~ msgid "Sqlite datacache running\n" +#~ msgstr "Caché de datos Sqlite ejecutándose\n" + +#~ msgid "Failed to close statement %p: %d\n" +#~ msgstr "Se produjo un fallo al cerrar la sentencia %p: %d\n" + +#~ msgid "Template datacache running\n" +#~ msgstr "Caché de datos de plantilla en ejecución\n" + #~ msgid "`%s' must be installed SUID, refusing to run\n" #~ msgstr "«%s» debe ser instalado con SUID, se niega a arrancar\n" diff --git a/po/fr.po b/po/fr.po index 5b2e3dd1a..73111406f 100644 --- a/po/fr.po +++ b/po/fr.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gnunet 0.10.1\n" "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" -"POT-Creation-Date: 2015-04-27 13:05+0200\n" +"POT-Creation-Date: 2015-05-19 11:25+0200\n" "PO-Revision-Date: 2015-03-24 01:41+0100\n" "Last-Translator: Stéphane Aulery \n" "Language-Team: French \n" @@ -630,53 +630,53 @@ msgstr "" msgid "Invalid target `%s'\n" msgstr "" -#: src/cadet/gnunet-cadet.c:626 +#: src/cadet/gnunet-cadet.c:643 #, c-format msgid "Invalid peer ID `%s'\n" msgstr "" -#: src/cadet/gnunet-cadet.c:669 +#: src/cadet/gnunet-cadet.c:686 #, c-format msgid "Invalid tunnel owner `%s'\n" msgstr "" -#: src/cadet/gnunet-cadet.c:735 +#: src/cadet/gnunet-cadet.c:752 msgid "You must NOT give a TARGETwhen using 'request all' options\n" msgstr "" -#: src/cadet/gnunet-cadet.c:832 +#: src/cadet/gnunet-cadet.c:849 msgid "provide information about a particular connection" msgstr "" -#: src/cadet/gnunet-cadet.c:835 +#: src/cadet/gnunet-cadet.c:852 msgid "activate echo mode" msgstr "" -#: src/cadet/gnunet-cadet.c:838 +#: src/cadet/gnunet-cadet.c:855 msgid "dump debug information to STDERR" msgstr "" -#: src/cadet/gnunet-cadet.c:844 +#: src/cadet/gnunet-cadet.c:861 msgid "port to listen to (default; 0)" msgstr "" -#: src/cadet/gnunet-cadet.c:847 +#: src/cadet/gnunet-cadet.c:864 msgid "provide information about a patricular peer" msgstr "" -#: src/cadet/gnunet-cadet.c:850 +#: src/cadet/gnunet-cadet.c:867 msgid "provide information about all peers" msgstr "" -#: src/cadet/gnunet-cadet.c:853 +#: src/cadet/gnunet-cadet.c:870 msgid "provide information about a particular tunnel" msgstr "" -#: src/cadet/gnunet-cadet.c:856 +#: src/cadet/gnunet-cadet.c:873 msgid "provide information about all tunnels" msgstr "" -#: src/cadet/gnunet-service-cadet_peer.c:507 +#: src/cadet/gnunet-service-cadet_peer.c:514 msgid "Wrong CORE service\n" msgstr "" @@ -1420,50 +1420,47 @@ msgstr "" msgid "# updates to my type map" msgstr "" -#: src/datacache/datacache.c:115 src/datacache/datacache.c:266 +#: src/datacache/datacache.c:119 src/datacache/datacache.c:294 #: src/datastore/gnunet-service-datastore.c:841 msgid "# bytes stored" msgstr "" -#: src/datacache/datacache.c:117 src/datacache/datacache.c:268 +#: src/datacache/datacache.c:123 src/datacache/datacache.c:298 msgid "# items stored" msgstr "" -#: src/datacache/datacache.c:143 src/datacache/datacache.c:150 -#: src/datastore/gnunet-service-datastore.c:1598 -#: src/datastore/gnunet-service-datastore.c:1609 -#, c-format -msgid "No `%s' specified for `%s' in configuration!\n" -msgstr "" - -#: src/datacache/datacache.c:184 +#: src/datacache/datacache.c:202 #, c-format msgid "Loading `%s' datacache plugin\n" msgstr "" -#: src/datacache/datacache.c:192 +#: src/datacache/datacache.c:213 #, c-format msgid "Failed to load datacache plugin for `%s'\n" msgstr "" -#: src/datacache/datacache.c:295 +#: src/datacache/datacache.c:329 msgid "# requests received" msgstr "" -#: src/datacache/datacache.c:304 +#: src/datacache/datacache.c:339 msgid "# requests filtered by bloom filter" msgstr "" -#: src/datacache/plugin_datacache_heap.c:406 -msgid "Heap datacache running\n" +#: src/datacache/datacache.c:367 +msgid "# requests for random value received" msgstr "" -#: src/datacache/plugin_datacache_postgres.c:391 -msgid "Postgres datacache running\n" +#: src/datacache/datacache.c:399 +msgid "# proximity search requests received" msgstr "" -#: src/datacache/plugin_datacache_sqlite.c:69 -#: src/datacache/plugin_datacache_sqlite.c:72 +#: src/datacache/plugin_datacache_heap.c:466 +msgid "Heap datacache running\n" +msgstr "" + +#: src/datacache/plugin_datacache_sqlite.c:77 +#: src/datacache/plugin_datacache_sqlite.c:86 #: src/datastore/plugin_datastore_mysql.c:818 #: src/datastore/plugin_datastore_mysql.c:834 #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 @@ -1478,32 +1475,19 @@ msgstr "" #: src/testbed/gnunet-daemon-latency-logger.c:52 #: src/testbed/gnunet-daemon-testbed-underlay.c:55 #: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:51 -#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:626 -#: src/include/gnunet_common.h:635 src/scalarproduct/scalarproduct.h:35 +#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:667 +#: src/include/gnunet_common.h:676 src/scalarproduct/scalarproduct.h:35 #, c-format msgid "`%s' failed at %s:%d with error: %s\n" msgstr "" -#: src/datacache/plugin_datacache_sqlite.c:449 -msgid "Sqlite datacache running\n" -msgstr "" - -#: src/datacache/plugin_datacache_sqlite.c:483 +#: src/datacache/plugin_datacache_sqlite.c:749 #: src/datastore/plugin_datastore_sqlite.c:401 #: src/namecache/plugin_namecache_sqlite.c:292 #: src/namestore/plugin_namestore_sqlite.c:324 msgid "Tried to close sqlite without finalizing all prepared statements.\n" msgstr "" -#: src/datacache/plugin_datacache_sqlite.c:490 -#, c-format -msgid "Failed to close statement %p: %d\n" -msgstr "" - -#: src/datacache/plugin_datacache_template.c:125 -msgid "Template datacache running\n" -msgstr "" - #: src/datastore/datastore_api.c:310 msgid "Failed to transmit request to drop database.\n" msgstr "" @@ -1736,6 +1720,12 @@ msgstr "" msgid "Plugin does not support get_keys function. Please fix!\n" msgstr "" +#: src/datastore/gnunet-service-datastore.c:1598 +#: src/datastore/gnunet-service-datastore.c:1609 +#, c-format +msgid "No `%s' specified for `%s' in configuration!\n" +msgstr "" + #: src/datastore/gnunet-service-datastore.c:1603 #, c-format msgid "# bytes used in file-sharing datastore `%s'" @@ -2003,107 +1993,125 @@ msgstr "" msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY." msgstr "" -#: src/dht/gnunet-service-dht.c:172 src/dht/gnunet-service-xdht.c:193 +#: src/dht/gnunet-service-dht.c:172 msgid "Failed to connect to transport service!\n" msgstr "" #: src/dht/gnunet-service-dht_clients.c:417 +#: src/dht/gnunet-service-wdht_clients.c:852 #: src/dht/gnunet-service-xdht_clients.c:849 msgid "# GET requests from clients injected" msgstr "" #: src/dht/gnunet-service-dht_clients.c:513 +#: src/dht/gnunet-service-wdht_clients.c:937 #: src/dht/gnunet-service-xdht_clients.c:933 msgid "# PUT requests received from clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:597 +#: src/dht/gnunet-service-wdht_clients.c:1003 #: src/dht/gnunet-service-xdht_clients.c:998 msgid "# GET requests received from clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:798 +#: src/dht/gnunet-service-wdht_clients.c:1212 #: src/dht/gnunet-service-xdht_clients.c:1200 msgid "# GET STOP requests received from clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1040 +#: src/dht/gnunet-service-wdht_clients.c:505 #: src/dht/gnunet-service-xdht_clients.c:503 msgid "# Key match, type mismatches in REPLY to CLIENT" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1053 +#: src/dht/gnunet-service-wdht_clients.c:519 #: src/dht/gnunet-service-xdht_clients.c:517 msgid "# Duplicate REPLIES to CLIENT request dropped" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1098 +#: src/dht/gnunet-service-wdht_clients.c:561 #: src/dht/gnunet-service-xdht_clients.c:559 #, c-format msgid "Unsupported block type (%u) in request!\n" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1121 +#: src/dht/gnunet-service-wdht_clients.c:584 #: src/dht/gnunet-service-xdht_clients.c:582 msgid "# RESULTS queued for clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1175 #: src/dht/gnunet-service-dht_clients.c:1218 +#: src/dht/gnunet-service-wdht_clients.c:638 +#: src/dht/gnunet-service-wdht_clients.c:681 #: src/dht/gnunet-service-xdht_clients.c:636 #: src/dht/gnunet-service-xdht_clients.c:679 msgid "# REPLIES ignored for CLIENTS (no match)" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1185 +#: src/dht/gnunet-service-wdht_clients.c:648 #: src/dht/gnunet-service-xdht_clients.c:646 msgid "Could not pass reply to client, message too big!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:69 -#: src/dht/gnunet-service-xdht_datacache.c:71 +#: src/dht/gnunet-service-dht_datacache.c:68 #, c-format msgid "%s request received, but have no datacache!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:79 -#: src/dht/gnunet-service-xdht_datacache.c:82 +#: src/dht/gnunet-service-dht_datacache.c:78 +#: src/dht/gnunet-service-wdht_datacache.c:107 +#: src/dht/gnunet-service-xdht_datacache.c:91 msgid "# ITEMS stored in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:176 -#: src/dht/gnunet-service-xdht_datacache.c:230 +#: src/dht/gnunet-service-dht_datacache.c:184 +#: src/dht/gnunet-service-wdht_datacache.c:216 +#: src/dht/gnunet-service-xdht_datacache.c:238 msgid "# Good RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:193 -#: src/dht/gnunet-service-xdht_datacache.c:253 +#: src/dht/gnunet-service-dht_datacache.c:201 +#: src/dht/gnunet-service-wdht_datacache.c:231 +#: src/dht/gnunet-service-xdht_datacache.c:267 msgid "# Duplicate RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:199 -#: src/dht/gnunet-service-xdht_datacache.c:259 +#: src/dht/gnunet-service-dht_datacache.c:207 +#: src/dht/gnunet-service-wdht_datacache.c:237 +#: src/dht/gnunet-service-xdht_datacache.c:273 msgid "# Invalid RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:205 -#: src/dht/gnunet-service-xdht_datacache.c:265 +#: src/dht/gnunet-service-dht_datacache.c:213 +#: src/dht/gnunet-service-wdht_datacache.c:243 +#: src/dht/gnunet-service-xdht_datacache.c:279 msgid "# Irrelevant RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:217 -#: src/dht/gnunet-service-xdht_datacache.c:277 +#: src/dht/gnunet-service-dht_datacache.c:225 +#: src/dht/gnunet-service-wdht_datacache.c:255 +#: src/dht/gnunet-service-xdht_datacache.c:291 msgid "# Unsupported RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:221 -#: src/dht/gnunet-service-xdht_datacache.c:280 +#: src/dht/gnunet-service-dht_datacache.c:229 +#: src/dht/gnunet-service-wdht_datacache.c:258 +#: src/dht/gnunet-service-xdht_datacache.c:294 #, c-format msgid "Unsupported block type (%u) in local response!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:254 -#: src/dht/gnunet-service-xdht_datacache.c:318 +#: src/dht/gnunet-service-dht_datacache.c:262 +#: src/dht/gnunet-service-wdht_datacache.c:295 +#: src/dht/gnunet-service-xdht_datacache.c:334 msgid "# GET requests given to datacache" msgstr "" @@ -2121,7 +2129,7 @@ msgid "# FIND PEER messages initiated" msgstr "" #: src/dht/gnunet-service-dht_neighbours.c:763 -#: src/dht/gnunet-service-xdht_neighbours.c:6060 +#: src/dht/gnunet-service-xdht_neighbours.c:6062 msgid "# Queued messages discarded (peer disconnected)" msgstr "" @@ -2228,7 +2236,8 @@ msgstr "" msgid "# P2P RESULT bytes received" msgstr "" -#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-xdht_nse.c:59 +#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-wdht_nse.c:59 +#: src/dht/gnunet-service-xdht_nse.c:59 msgid "# Network size estimates received" msgstr "" @@ -2264,6 +2273,10 @@ msgstr "" msgid "# DHT requests combined" msgstr "" +#: src/dht/gnunet-service-wdht_datacache.c:82 +msgid "PUT request received, but have no datacache!\n" +msgstr "" + #: src/dht/gnunet-service-xdht_neighbours.c:1832 #, c-format msgid "" @@ -2327,15 +2340,15 @@ msgstr "" #: src/dht/gnunet-service-xdht_neighbours.c:3700 #: src/dht/gnunet-service-xdht_neighbours.c:3938 #: src/dht/gnunet-service-xdht_neighbours.c:4090 -#: src/dht/gnunet-service-xdht_neighbours.c:4240 -#: src/dht/gnunet-service-xdht_neighbours.c:4421 -#: src/dht/gnunet-service-xdht_neighbours.c:4934 -#: src/dht/gnunet-service-xdht_neighbours.c:5327 -#: src/dht/gnunet-service-xdht_neighbours.c:5420 -#: src/dht/gnunet-service-xdht_neighbours.c:5510 -#: src/dht/gnunet-service-xdht_neighbours.c:5614 -#: src/dht/gnunet-service-xdht_neighbours.c:5758 -#: src/dht/gnunet-service-xdht_neighbours.c:5847 +#: src/dht/gnunet-service-xdht_neighbours.c:4242 +#: src/dht/gnunet-service-xdht_neighbours.c:4423 +#: src/dht/gnunet-service-xdht_neighbours.c:4936 +#: src/dht/gnunet-service-xdht_neighbours.c:5329 +#: src/dht/gnunet-service-xdht_neighbours.c:5422 +#: src/dht/gnunet-service-xdht_neighbours.c:5512 +#: src/dht/gnunet-service-xdht_neighbours.c:5616 +#: src/dht/gnunet-service-xdht_neighbours.c:5760 +#: src/dht/gnunet-service-xdht_neighbours.c:5849 msgid "# Bytes received from other peers" msgstr "" @@ -5675,56 +5688,56 @@ msgstr "" msgid "Failed to get fragment!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:402 +#: src/psycstore/gnunet-service-psycstore.c:417 msgid "Failed to get message!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:433 +#: src/psycstore/gnunet-service-psycstore.c:448 msgid "Failed to get message fragment!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:461 +#: src/psycstore/gnunet-service-psycstore.c:476 msgid "Failed to get master counters!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:497 -#: src/psycstore/gnunet-service-psycstore.c:570 +#: src/psycstore/gnunet-service-psycstore.c:512 +#: src/psycstore/gnunet-service-psycstore.c:585 msgid "Tried to set invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:513 +#: src/psycstore/gnunet-service-psycstore.c:528 msgid "Failed to begin modifying state!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:536 +#: src/psycstore/gnunet-service-psycstore.c:551 #, c-format msgid "Unknown operator: %c\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:546 +#: src/psycstore/gnunet-service-psycstore.c:561 msgid "Failed to end modifying state!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:584 +#: src/psycstore/gnunet-service-psycstore.c:599 msgid "Failed to begin synchronizing state!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:600 +#: src/psycstore/gnunet-service-psycstore.c:615 msgid "Failed to end synchronizing state!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:620 -#: src/psycstore/gnunet-service-psycstore.c:639 +#: src/psycstore/gnunet-service-psycstore.c:635 +#: src/psycstore/gnunet-service-psycstore.c:654 msgid "Failed to reset state!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:662 -#: src/psycstore/gnunet-service-psycstore.c:713 +#: src/psycstore/gnunet-service-psycstore.c:677 +#: src/psycstore/gnunet-service-psycstore.c:728 msgid "Tried to get invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:689 -#: src/psycstore/gnunet-service-psycstore.c:728 +#: src/psycstore/gnunet-service-psycstore.c:704 +#: src/psycstore/gnunet-service-psycstore.c:743 msgid "Failed to get state variable!\n" msgstr "" @@ -5733,7 +5746,7 @@ msgstr "" msgid "`%s' failed at %s:%d with error: %s (%d)\n" msgstr "" -#: src/psycstore/plugin_psycstore_sqlite.c:1932 +#: src/psycstore/plugin_psycstore_sqlite.c:1936 msgid "SQLite database running\n" msgstr "" @@ -7637,7 +7650,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2825 -#: src/transport/plugin_transport_udp.c:3335 +#: src/transport/plugin_transport_udp.c:3338 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -7870,34 +7883,34 @@ msgid "" "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3411 -#: src/transport/plugin_transport_udp.c:3510 +#: src/transport/plugin_transport_udp.c:3414 +#: src/transport/plugin_transport_udp.c:3513 #, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3429 +#: src/transport/plugin_transport_udp.c:3432 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3520 +#: src/transport/plugin_transport_udp.c:3523 msgid "Failed to open UDP sockets\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3591 -#: src/transport/plugin_transport_udp.c:3605 +#: src/transport/plugin_transport_udp.c:3594 +#: src/transport/plugin_transport_udp.c:3608 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3637 +#: src/transport/plugin_transport_udp.c:3640 msgid "must be valid IPv4 address" msgstr "" -#: src/transport/plugin_transport_udp.c:3664 +#: src/transport/plugin_transport_udp.c:3667 msgid "must be valid IPv6 address" msgstr "" -#: src/transport/plugin_transport_udp.c:3730 +#: src/transport/plugin_transport_udp.c:3733 msgid "Failed to create UDP network sockets\n" msgstr "" @@ -8198,7 +8211,7 @@ msgstr "" msgid "libgcrypt has not the expected version (version %s is required).\n" msgstr "" -#: src/util/crypto_rsa.c:825 +#: src/util/crypto_rsa.c:891 #, c-format msgid "RSA signature verification failed at %s:%d: %s\n" msgstr "" @@ -8978,18 +8991,18 @@ msgstr "" msgid "Setup tunnels via VPN." msgstr "" -#: src/include/gnunet_common.h:590 src/include/gnunet_common.h:597 -#: src/include/gnunet_common.h:605 +#: src/include/gnunet_common.h:631 src/include/gnunet_common.h:638 +#: src/include/gnunet_common.h:646 #, c-format msgid "Assertion failed at %s:%d.\n" msgstr "" -#: src/include/gnunet_common.h:617 +#: src/include/gnunet_common.h:658 #, c-format msgid "External protocol violation detected at %s:%d.\n" msgstr "" -#: src/include/gnunet_common.h:644 src/include/gnunet_common.h:653 +#: src/include/gnunet_common.h:685 src/include/gnunet_common.h:694 #, c-format msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" msgstr "" diff --git a/po/sv.po b/po/sv.po index d67fec321..0d87d689a 100644 --- a/po/sv.po +++ b/po/sv.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: GNUnet 0.7.0b\n" "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" -"POT-Creation-Date: 2015-04-27 13:05+0200\n" +"POT-Creation-Date: 2015-05-19 11:25+0200\n" "PO-Revision-Date: 2006-01-21 17:16+0100\n" "Last-Translator: Daniel Nylander \n" "Language-Team: Swedish \n" @@ -648,58 +648,58 @@ msgstr "Skriv ut information om GNUnets motparter." msgid "Invalid target `%s'\n" msgstr "Ogiltigt argument: \"%s\"\n" -#: src/cadet/gnunet-cadet.c:626 +#: src/cadet/gnunet-cadet.c:643 #, fuzzy, c-format msgid "Invalid peer ID `%s'\n" msgstr "Ogiltiga argument: " -#: src/cadet/gnunet-cadet.c:669 +#: src/cadet/gnunet-cadet.c:686 #, fuzzy, c-format msgid "Invalid tunnel owner `%s'\n" msgstr "Ogiltigt format för IP: \"%s\"\n" -#: src/cadet/gnunet-cadet.c:735 +#: src/cadet/gnunet-cadet.c:752 msgid "You must NOT give a TARGETwhen using 'request all' options\n" msgstr "" -#: src/cadet/gnunet-cadet.c:832 +#: src/cadet/gnunet-cadet.c:849 #, fuzzy msgid "provide information about a particular connection" msgstr "Skriv ut information om GNUnets motparter." -#: src/cadet/gnunet-cadet.c:835 +#: src/cadet/gnunet-cadet.c:852 msgid "activate echo mode" msgstr "" -#: src/cadet/gnunet-cadet.c:838 +#: src/cadet/gnunet-cadet.c:855 msgid "dump debug information to STDERR" msgstr "" -#: src/cadet/gnunet-cadet.c:844 +#: src/cadet/gnunet-cadet.c:861 msgid "port to listen to (default; 0)" msgstr "" -#: src/cadet/gnunet-cadet.c:847 +#: src/cadet/gnunet-cadet.c:864 #, fuzzy msgid "provide information about a patricular peer" msgstr "Skriv ut information om GNUnets motparter." -#: src/cadet/gnunet-cadet.c:850 +#: src/cadet/gnunet-cadet.c:867 #, fuzzy msgid "provide information about all peers" msgstr "Skriv ut information om GNUnets motparter." -#: src/cadet/gnunet-cadet.c:853 +#: src/cadet/gnunet-cadet.c:870 #, fuzzy msgid "provide information about a particular tunnel" msgstr "Skriv ut information om GNUnets motparter." -#: src/cadet/gnunet-cadet.c:856 +#: src/cadet/gnunet-cadet.c:873 #, fuzzy msgid "provide information about all tunnels" msgstr "Skriv ut information om GNUnets motparter." -#: src/cadet/gnunet-service-cadet_peer.c:507 +#: src/cadet/gnunet-service-cadet_peer.c:514 msgid "Wrong CORE service\n" msgstr "" @@ -1497,53 +1497,52 @@ msgstr "# krypterade PONG-meddelanden mottagna" msgid "# updates to my type map" msgstr "" -#: src/datacache/datacache.c:115 src/datacache/datacache.c:266 +#: src/datacache/datacache.c:119 src/datacache/datacache.c:294 #: src/datastore/gnunet-service-datastore.c:841 #, fuzzy msgid "# bytes stored" msgstr "# byte krypterade" -#: src/datacache/datacache.c:117 src/datacache/datacache.c:268 +#: src/datacache/datacache.c:123 src/datacache/datacache.c:298 #, fuzzy msgid "# items stored" msgstr "# byte krypterade" -#: src/datacache/datacache.c:143 src/datacache/datacache.c:150 -#: src/datastore/gnunet-service-datastore.c:1598 -#: src/datastore/gnunet-service-datastore.c:1609 -#, fuzzy, c-format -msgid "No `%s' specified for `%s' in configuration!\n" -msgstr "Inga applikationer definierade i konfiguration!\n" - -#: src/datacache/datacache.c:184 +#: src/datacache/datacache.c:202 #, c-format msgid "Loading `%s' datacache plugin\n" msgstr "" -#: src/datacache/datacache.c:192 +#: src/datacache/datacache.c:213 #, fuzzy, c-format msgid "Failed to load datacache plugin for `%s'\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/datacache/datacache.c:295 +#: src/datacache/datacache.c:329 #, fuzzy msgid "# requests received" msgstr "# byte mottogs via TCP" -#: src/datacache/datacache.c:304 +#: src/datacache/datacache.c:339 msgid "# requests filtered by bloom filter" msgstr "" -#: src/datacache/plugin_datacache_heap.c:406 -msgid "Heap datacache running\n" -msgstr "" +#: src/datacache/datacache.c:367 +#, fuzzy +msgid "# requests for random value received" +msgstr "# byte mottogs via TCP" -#: src/datacache/plugin_datacache_postgres.c:391 -msgid "Postgres datacache running\n" +#: src/datacache/datacache.c:399 +#, fuzzy +msgid "# proximity search requests received" +msgstr "# klartext PONG-meddelanden mottagna" + +#: src/datacache/plugin_datacache_heap.c:466 +msgid "Heap datacache running\n" msgstr "" -#: src/datacache/plugin_datacache_sqlite.c:69 -#: src/datacache/plugin_datacache_sqlite.c:72 +#: src/datacache/plugin_datacache_sqlite.c:77 +#: src/datacache/plugin_datacache_sqlite.c:86 #: src/datastore/plugin_datastore_mysql.c:818 #: src/datastore/plugin_datastore_mysql.c:834 #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 @@ -1558,32 +1557,19 @@ msgstr "" #: src/testbed/gnunet-daemon-latency-logger.c:52 #: src/testbed/gnunet-daemon-testbed-underlay.c:55 #: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:51 -#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:626 -#: src/include/gnunet_common.h:635 src/scalarproduct/scalarproduct.h:35 +#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:667 +#: src/include/gnunet_common.h:676 src/scalarproduct/scalarproduct.h:35 #, c-format msgid "`%s' failed at %s:%d with error: %s\n" msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n" -#: src/datacache/plugin_datacache_sqlite.c:449 -msgid "Sqlite datacache running\n" -msgstr "" - -#: src/datacache/plugin_datacache_sqlite.c:483 +#: src/datacache/plugin_datacache_sqlite.c:749 #: src/datastore/plugin_datastore_sqlite.c:401 #: src/namecache/plugin_namecache_sqlite.c:292 #: src/namestore/plugin_namestore_sqlite.c:324 msgid "Tried to close sqlite without finalizing all prepared statements.\n" msgstr "" -#: src/datacache/plugin_datacache_sqlite.c:490 -#, fuzzy, c-format -msgid "Failed to close statement %p: %d\n" -msgstr "Misslyckades att läsa kompislista från \"%s\"\n" - -#: src/datacache/plugin_datacache_template.c:125 -msgid "Template datacache running\n" -msgstr "" - #: src/datastore/datastore_api.c:310 #, fuzzy msgid "Failed to transmit request to drop database.\n" @@ -1831,6 +1817,12 @@ msgstr "" msgid "Plugin does not support get_keys function. Please fix!\n" msgstr "" +#: src/datastore/gnunet-service-datastore.c:1598 +#: src/datastore/gnunet-service-datastore.c:1609 +#, fuzzy, c-format +msgid "No `%s' specified for `%s' in configuration!\n" +msgstr "Inga applikationer definierade i konfiguration!\n" + #: src/datastore/gnunet-service-datastore.c:1603 #, fuzzy, c-format msgid "# bytes used in file-sharing datastore `%s'" @@ -2106,52 +2098,60 @@ msgstr "" msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY." msgstr "" -#: src/dht/gnunet-service-dht.c:172 src/dht/gnunet-service-xdht.c:193 +#: src/dht/gnunet-service-dht.c:172 #, fuzzy msgid "Failed to connect to transport service!\n" msgstr "Misslyckades att ansluta till gnunetd.\n" #: src/dht/gnunet-service-dht_clients.c:417 +#: src/dht/gnunet-service-wdht_clients.c:852 #: src/dht/gnunet-service-xdht_clients.c:849 #, fuzzy msgid "# GET requests from clients injected" msgstr "# byte mottogs via TCP" #: src/dht/gnunet-service-dht_clients.c:513 +#: src/dht/gnunet-service-wdht_clients.c:937 #: src/dht/gnunet-service-xdht_clients.c:933 #, fuzzy msgid "# PUT requests received from clients" msgstr "Meddelande mottaget från klient är ogiltig.\n" #: src/dht/gnunet-service-dht_clients.c:597 +#: src/dht/gnunet-service-wdht_clients.c:1003 #: src/dht/gnunet-service-xdht_clients.c:998 #, fuzzy msgid "# GET requests received from clients" msgstr "Meddelande mottaget från klient är ogiltig.\n" #: src/dht/gnunet-service-dht_clients.c:798 +#: src/dht/gnunet-service-wdht_clients.c:1212 #: src/dht/gnunet-service-xdht_clients.c:1200 #, fuzzy msgid "# GET STOP requests received from clients" msgstr "Meddelande mottaget från klient är ogiltig.\n" #: src/dht/gnunet-service-dht_clients.c:1040 +#: src/dht/gnunet-service-wdht_clients.c:505 #: src/dht/gnunet-service-xdht_clients.c:503 msgid "# Key match, type mismatches in REPLY to CLIENT" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1053 +#: src/dht/gnunet-service-wdht_clients.c:519 #: src/dht/gnunet-service-xdht_clients.c:517 msgid "# Duplicate REPLIES to CLIENT request dropped" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1098 +#: src/dht/gnunet-service-wdht_clients.c:561 #: src/dht/gnunet-service-xdht_clients.c:559 #, c-format msgid "Unsupported block type (%u) in request!\n" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1121 +#: src/dht/gnunet-service-wdht_clients.c:584 #: src/dht/gnunet-service-xdht_clients.c:582 #, fuzzy msgid "# RESULTS queued for clients" @@ -2159,61 +2159,71 @@ msgstr "Meddelande mottaget från klient är ogiltig.\n" #: src/dht/gnunet-service-dht_clients.c:1175 #: src/dht/gnunet-service-dht_clients.c:1218 +#: src/dht/gnunet-service-wdht_clients.c:638 +#: src/dht/gnunet-service-wdht_clients.c:681 #: src/dht/gnunet-service-xdht_clients.c:636 #: src/dht/gnunet-service-xdht_clients.c:679 msgid "# REPLIES ignored for CLIENTS (no match)" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1185 +#: src/dht/gnunet-service-wdht_clients.c:648 #: src/dht/gnunet-service-xdht_clients.c:646 #, fuzzy msgid "Could not pass reply to client, message too big!\n" msgstr "Kunde inte skicka meddelande till gnunetd\n" -#: src/dht/gnunet-service-dht_datacache.c:69 -#: src/dht/gnunet-service-xdht_datacache.c:71 +#: src/dht/gnunet-service-dht_datacache.c:68 #, fuzzy, c-format msgid "%s request received, but have no datacache!\n" msgstr "# byte mottagna av typen %d" -#: src/dht/gnunet-service-dht_datacache.c:79 -#: src/dht/gnunet-service-xdht_datacache.c:82 +#: src/dht/gnunet-service-dht_datacache.c:78 +#: src/dht/gnunet-service-wdht_datacache.c:107 +#: src/dht/gnunet-service-xdht_datacache.c:91 msgid "# ITEMS stored in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:176 -#: src/dht/gnunet-service-xdht_datacache.c:230 +#: src/dht/gnunet-service-dht_datacache.c:184 +#: src/dht/gnunet-service-wdht_datacache.c:216 +#: src/dht/gnunet-service-xdht_datacache.c:238 msgid "# Good RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:193 -#: src/dht/gnunet-service-xdht_datacache.c:253 +#: src/dht/gnunet-service-dht_datacache.c:201 +#: src/dht/gnunet-service-wdht_datacache.c:231 +#: src/dht/gnunet-service-xdht_datacache.c:267 msgid "# Duplicate RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:199 -#: src/dht/gnunet-service-xdht_datacache.c:259 +#: src/dht/gnunet-service-dht_datacache.c:207 +#: src/dht/gnunet-service-wdht_datacache.c:237 +#: src/dht/gnunet-service-xdht_datacache.c:273 msgid "# Invalid RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:205 -#: src/dht/gnunet-service-xdht_datacache.c:265 +#: src/dht/gnunet-service-dht_datacache.c:213 +#: src/dht/gnunet-service-wdht_datacache.c:243 +#: src/dht/gnunet-service-xdht_datacache.c:279 msgid "# Irrelevant RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:217 -#: src/dht/gnunet-service-xdht_datacache.c:277 +#: src/dht/gnunet-service-dht_datacache.c:225 +#: src/dht/gnunet-service-wdht_datacache.c:255 +#: src/dht/gnunet-service-xdht_datacache.c:291 msgid "# Unsupported RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:221 -#: src/dht/gnunet-service-xdht_datacache.c:280 +#: src/dht/gnunet-service-dht_datacache.c:229 +#: src/dht/gnunet-service-wdht_datacache.c:258 +#: src/dht/gnunet-service-xdht_datacache.c:294 #, c-format msgid "Unsupported block type (%u) in local response!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:254 -#: src/dht/gnunet-service-xdht_datacache.c:318 +#: src/dht/gnunet-service-dht_datacache.c:262 +#: src/dht/gnunet-service-wdht_datacache.c:295 +#: src/dht/gnunet-service-xdht_datacache.c:334 #, fuzzy msgid "# GET requests given to datacache" msgstr "# byte mottogs via TCP" @@ -2234,7 +2244,7 @@ msgid "# FIND PEER messages initiated" msgstr "# PING-meddelanden skapade" #: src/dht/gnunet-service-dht_neighbours.c:763 -#: src/dht/gnunet-service-xdht_neighbours.c:6060 +#: src/dht/gnunet-service-xdht_neighbours.c:6062 #, fuzzy msgid "# Queued messages discarded (peer disconnected)" msgstr "Nätverksannonsering avstängd i konfigurationen!\n" @@ -2359,7 +2369,8 @@ msgstr "# krypterade PONG-meddelanden mottagna" msgid "# P2P RESULT bytes received" msgstr "# krypterade PONG-meddelanden mottagna" -#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-xdht_nse.c:59 +#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-wdht_nse.c:59 +#: src/dht/gnunet-service-xdht_nse.c:59 #, fuzzy msgid "# Network size estimates received" msgstr "# byte mottogs via TCP" @@ -2397,6 +2408,11 @@ msgstr "" msgid "# DHT requests combined" msgstr "# byte mottogs via TCP" +#: src/dht/gnunet-service-wdht_datacache.c:82 +#, fuzzy +msgid "PUT request received, but have no datacache!\n" +msgstr "# byte mottagna av typen %d" + #: src/dht/gnunet-service-xdht_neighbours.c:1832 #, c-format msgid "" @@ -2460,15 +2476,15 @@ msgstr "" #: src/dht/gnunet-service-xdht_neighbours.c:3700 #: src/dht/gnunet-service-xdht_neighbours.c:3938 #: src/dht/gnunet-service-xdht_neighbours.c:4090 -#: src/dht/gnunet-service-xdht_neighbours.c:4240 -#: src/dht/gnunet-service-xdht_neighbours.c:4421 -#: src/dht/gnunet-service-xdht_neighbours.c:4934 -#: src/dht/gnunet-service-xdht_neighbours.c:5327 -#: src/dht/gnunet-service-xdht_neighbours.c:5420 -#: src/dht/gnunet-service-xdht_neighbours.c:5510 -#: src/dht/gnunet-service-xdht_neighbours.c:5614 -#: src/dht/gnunet-service-xdht_neighbours.c:5758 -#: src/dht/gnunet-service-xdht_neighbours.c:5847 +#: src/dht/gnunet-service-xdht_neighbours.c:4242 +#: src/dht/gnunet-service-xdht_neighbours.c:4423 +#: src/dht/gnunet-service-xdht_neighbours.c:4936 +#: src/dht/gnunet-service-xdht_neighbours.c:5329 +#: src/dht/gnunet-service-xdht_neighbours.c:5422 +#: src/dht/gnunet-service-xdht_neighbours.c:5512 +#: src/dht/gnunet-service-xdht_neighbours.c:5616 +#: src/dht/gnunet-service-xdht_neighbours.c:5760 +#: src/dht/gnunet-service-xdht_neighbours.c:5849 #, fuzzy msgid "# Bytes received from other peers" msgstr "# byte mottagna av typen %d" @@ -5981,64 +5997,64 @@ msgstr "Misslyckades att starta samling.\n" msgid "Failed to get fragment!\n" msgstr "Kunde inte skapa värdnyckel!\n" -#: src/psycstore/gnunet-service-psycstore.c:402 +#: src/psycstore/gnunet-service-psycstore.c:417 #, fuzzy msgid "Failed to get message!\n" msgstr "Kunde inte skapa värdnyckel!\n" -#: src/psycstore/gnunet-service-psycstore.c:433 +#: src/psycstore/gnunet-service-psycstore.c:448 #, fuzzy msgid "Failed to get message fragment!\n" msgstr "Misslyckades att läsa kompislista från \"%s\"\n" -#: src/psycstore/gnunet-service-psycstore.c:461 +#: src/psycstore/gnunet-service-psycstore.c:476 #, fuzzy msgid "Failed to get master counters!\n" msgstr "Kunde inte skapa värdnyckel!\n" -#: src/psycstore/gnunet-service-psycstore.c:497 -#: src/psycstore/gnunet-service-psycstore.c:570 +#: src/psycstore/gnunet-service-psycstore.c:512 +#: src/psycstore/gnunet-service-psycstore.c:585 msgid "Tried to set invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:513 +#: src/psycstore/gnunet-service-psycstore.c:528 #, fuzzy msgid "Failed to begin modifying state!\n" msgstr "Misslyckades att starta samling.\n" -#: src/psycstore/gnunet-service-psycstore.c:536 +#: src/psycstore/gnunet-service-psycstore.c:551 #, fuzzy, c-format msgid "Unknown operator: %c\n" msgstr "Okänd operation \"%s\"\n" -#: src/psycstore/gnunet-service-psycstore.c:546 +#: src/psycstore/gnunet-service-psycstore.c:561 #, fuzzy msgid "Failed to end modifying state!\n" msgstr "Misslyckades att starta samling.\n" -#: src/psycstore/gnunet-service-psycstore.c:584 +#: src/psycstore/gnunet-service-psycstore.c:599 #, fuzzy msgid "Failed to begin synchronizing state!\n" msgstr "Kunde inte skapa värdnyckel!\n" -#: src/psycstore/gnunet-service-psycstore.c:600 +#: src/psycstore/gnunet-service-psycstore.c:615 #, fuzzy msgid "Failed to end synchronizing state!\n" msgstr "Kunde inte skapa värdnyckel!\n" -#: src/psycstore/gnunet-service-psycstore.c:620 -#: src/psycstore/gnunet-service-psycstore.c:639 +#: src/psycstore/gnunet-service-psycstore.c:635 +#: src/psycstore/gnunet-service-psycstore.c:654 #, fuzzy msgid "Failed to reset state!\n" msgstr "Kunde inte skapa värdnyckel!\n" -#: src/psycstore/gnunet-service-psycstore.c:662 -#: src/psycstore/gnunet-service-psycstore.c:713 +#: src/psycstore/gnunet-service-psycstore.c:677 +#: src/psycstore/gnunet-service-psycstore.c:728 msgid "Tried to get invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:689 -#: src/psycstore/gnunet-service-psycstore.c:728 +#: src/psycstore/gnunet-service-psycstore.c:704 +#: src/psycstore/gnunet-service-psycstore.c:743 #, fuzzy msgid "Failed to get state variable!\n" msgstr "Kunde inte skapa värdnyckel!\n" @@ -6048,7 +6064,7 @@ msgstr "Kunde inte skapa värdnyckel!\n" msgid "`%s' failed at %s:%d with error: %s (%d)\n" msgstr "\"%s\" misslyckades vid %s:%d med fel: %s\n" -#: src/psycstore/plugin_psycstore_sqlite.c:1932 +#: src/psycstore/plugin_psycstore_sqlite.c:1936 msgid "SQLite database running\n" msgstr "" @@ -8087,7 +8103,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2825 -#: src/transport/plugin_transport_udp.c:3335 +#: src/transport/plugin_transport_udp.c:3338 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -8342,37 +8358,37 @@ msgid "" "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3411 -#: src/transport/plugin_transport_udp.c:3510 +#: src/transport/plugin_transport_udp.c:3414 +#: src/transport/plugin_transport_udp.c:3513 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "Misslyckades att binda till UDP6-port %d.\n" -#: src/transport/plugin_transport_udp.c:3429 +#: src/transport/plugin_transport_udp.c:3432 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3520 +#: src/transport/plugin_transport_udp.c:3523 #, fuzzy msgid "Failed to open UDP sockets\n" msgstr "Misslyckades att binda till UDP6-port %d.\n" -#: src/transport/plugin_transport_udp.c:3591 -#: src/transport/plugin_transport_udp.c:3605 +#: src/transport/plugin_transport_udp.c:3594 +#: src/transport/plugin_transport_udp.c:3608 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3637 +#: src/transport/plugin_transport_udp.c:3640 #, fuzzy msgid "must be valid IPv4 address" msgstr "\"%s\" är inte tillgänglig." -#: src/transport/plugin_transport_udp.c:3664 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv6 address" msgstr "\"%s\" är inte tillgänglig." -#: src/transport/plugin_transport_udp.c:3730 +#: src/transport/plugin_transport_udp.c:3733 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n" @@ -8690,7 +8706,7 @@ msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" msgid "libgcrypt has not the expected version (version %s is required).\n" msgstr "libgcrypt har inte den förväntande versionen (version %s krävs).\n" -#: src/util/crypto_rsa.c:825 +#: src/util/crypto_rsa.c:891 #, fuzzy, c-format msgid "RSA signature verification failed at %s:%d: %s\n" msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" @@ -9500,22 +9516,26 @@ msgstr "# byte mottagna via UDP" msgid "Setup tunnels via VPN." msgstr "" -#: src/include/gnunet_common.h:590 src/include/gnunet_common.h:597 -#: src/include/gnunet_common.h:605 +#: src/include/gnunet_common.h:631 src/include/gnunet_common.h:638 +#: src/include/gnunet_common.h:646 #, fuzzy, c-format msgid "Assertion failed at %s:%d.\n" msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n" -#: src/include/gnunet_common.h:617 +#: src/include/gnunet_common.h:658 #, c-format msgid "External protocol violation detected at %s:%d.\n" msgstr "" -#: src/include/gnunet_common.h:644 src/include/gnunet_common.h:653 +#: src/include/gnunet_common.h:685 src/include/gnunet_common.h:694 #, c-format msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" msgstr "\"%s\" misslyckades för fil \"%s\" vid %s:%d med fel: %s\n" +#, fuzzy +#~ msgid "Failed to close statement %p: %d\n" +#~ msgstr "Misslyckades att läsa kompislista från \"%s\"\n" + #, fuzzy #~ msgid "Failed to initialize solver!\n" #~ msgstr "Kunde inte initiera SQLite.\n" diff --git a/po/vi.po b/po/vi.po index a706c1e1d..a2bd055f4 100644 --- a/po/vi.po +++ b/po/vi.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: gnunet 0.8.0a\n" "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" -"POT-Creation-Date: 2015-04-27 13:05+0200\n" +"POT-Creation-Date: 2015-05-19 11:25+0200\n" "PO-Revision-Date: 2008-09-10 22:05+0930\n" "Last-Translator: Clytie Siddall \n" "Language-Team: Vietnamese \n" @@ -656,58 +656,58 @@ msgstr "In ra thông tin về các đồng đẳng GNUnet." msgid "Invalid target `%s'\n" msgstr "Đối số không hợp lệ cho « %s ».\n" -#: src/cadet/gnunet-cadet.c:626 +#: src/cadet/gnunet-cadet.c:643 #, fuzzy, c-format msgid "Invalid peer ID `%s'\n" msgstr "Dữ liệu nhập không hợp lệ.\n" -#: src/cadet/gnunet-cadet.c:669 +#: src/cadet/gnunet-cadet.c:686 #, fuzzy, c-format msgid "Invalid tunnel owner `%s'\n" msgstr "Địa chỉ IP định dạng sai: %s\n" -#: src/cadet/gnunet-cadet.c:735 +#: src/cadet/gnunet-cadet.c:752 msgid "You must NOT give a TARGETwhen using 'request all' options\n" msgstr "" -#: src/cadet/gnunet-cadet.c:832 +#: src/cadet/gnunet-cadet.c:849 #, fuzzy msgid "provide information about a particular connection" msgstr "In ra thông tin về các đồng đẳng GNUnet." -#: src/cadet/gnunet-cadet.c:835 +#: src/cadet/gnunet-cadet.c:852 msgid "activate echo mode" msgstr "" -#: src/cadet/gnunet-cadet.c:838 +#: src/cadet/gnunet-cadet.c:855 msgid "dump debug information to STDERR" msgstr "" -#: src/cadet/gnunet-cadet.c:844 +#: src/cadet/gnunet-cadet.c:861 msgid "port to listen to (default; 0)" msgstr "" -#: src/cadet/gnunet-cadet.c:847 +#: src/cadet/gnunet-cadet.c:864 #, fuzzy msgid "provide information about a patricular peer" msgstr "In ra thông tin về các đồng đẳng GNUnet." -#: src/cadet/gnunet-cadet.c:850 +#: src/cadet/gnunet-cadet.c:867 #, fuzzy msgid "provide information about all peers" msgstr "In ra thông tin về các đồng đẳng GNUnet." -#: src/cadet/gnunet-cadet.c:853 +#: src/cadet/gnunet-cadet.c:870 #, fuzzy msgid "provide information about a particular tunnel" msgstr "In ra thông tin về các đồng đẳng GNUnet." -#: src/cadet/gnunet-cadet.c:856 +#: src/cadet/gnunet-cadet.c:873 #, fuzzy msgid "provide information about all tunnels" msgstr "In ra thông tin về các đồng đẳng GNUnet." -#: src/cadet/gnunet-service-cadet_peer.c:507 +#: src/cadet/gnunet-service-cadet_peer.c:514 msgid "Wrong CORE service\n" msgstr "" @@ -1504,54 +1504,53 @@ msgstr "# các thông báo phát hiện dht được nhận" msgid "# updates to my type map" msgstr "" -#: src/datacache/datacache.c:115 src/datacache/datacache.c:266 +#: src/datacache/datacache.c:119 src/datacache/datacache.c:294 #: src/datastore/gnunet-service-datastore.c:841 #, fuzzy msgid "# bytes stored" msgstr "# các byte trong kho dữ liệu" -#: src/datacache/datacache.c:117 src/datacache/datacache.c:268 +#: src/datacache/datacache.c:123 src/datacache/datacache.c:298 #, fuzzy msgid "# items stored" msgstr "# các byte trong kho dữ liệu" -#: src/datacache/datacache.c:143 src/datacache/datacache.c:150 -#: src/datastore/gnunet-service-datastore.c:1598 -#: src/datastore/gnunet-service-datastore.c:1609 -#, c-format -msgid "No `%s' specified for `%s' in configuration!\n" -msgstr "" - -#: src/datacache/datacache.c:184 +#: src/datacache/datacache.c:202 #, c-format msgid "Loading `%s' datacache plugin\n" msgstr "" -#: src/datacache/datacache.c:192 +#: src/datacache/datacache.c:213 #, fuzzy, c-format msgid "Failed to load datacache plugin for `%s'\n" msgstr "Lỗi cập nhật dữ liệu cho mô-đun « %s »\n" -#: src/datacache/datacache.c:295 +#: src/datacache/datacache.c:329 #, fuzzy msgid "# requests received" msgstr "# các yêu cầu get (lấy) dht được nhận" -#: src/datacache/datacache.c:304 +#: src/datacache/datacache.c:339 msgid "# requests filtered by bloom filter" msgstr "# các yêu cầu được lọc theo bộ lọc bloom" -#: src/datacache/plugin_datacache_heap.c:406 +#: src/datacache/datacache.c:367 +#, fuzzy +msgid "# requests for random value received" +msgstr "# tổng số yêu cầu lỗ hổng được nhận" + +#: src/datacache/datacache.c:399 +#, fuzzy +msgid "# proximity search requests received" +msgstr "# các yêu cầu khách lỗ hổng được nhận" + +#: src/datacache/plugin_datacache_heap.c:466 #, fuzzy msgid "Heap datacache running\n" msgstr "kho dữ liệu sqlite" -#: src/datacache/plugin_datacache_postgres.c:391 -msgid "Postgres datacache running\n" -msgstr "" - -#: src/datacache/plugin_datacache_sqlite.c:69 -#: src/datacache/plugin_datacache_sqlite.c:72 +#: src/datacache/plugin_datacache_sqlite.c:77 +#: src/datacache/plugin_datacache_sqlite.c:86 #: src/datastore/plugin_datastore_mysql.c:818 #: src/datastore/plugin_datastore_mysql.c:834 #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 @@ -1566,32 +1565,19 @@ msgstr "" #: src/testbed/gnunet-daemon-latency-logger.c:52 #: src/testbed/gnunet-daemon-testbed-underlay.c:55 #: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:51 -#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:626 -#: src/include/gnunet_common.h:635 src/scalarproduct/scalarproduct.h:35 +#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:667 +#: src/include/gnunet_common.h:676 src/scalarproduct/scalarproduct.h:35 #, c-format msgid "`%s' failed at %s:%d with error: %s\n" msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s\n" -#: src/datacache/plugin_datacache_sqlite.c:449 -msgid "Sqlite datacache running\n" -msgstr "" - -#: src/datacache/plugin_datacache_sqlite.c:483 +#: src/datacache/plugin_datacache_sqlite.c:749 #: src/datastore/plugin_datastore_sqlite.c:401 #: src/namecache/plugin_namecache_sqlite.c:292 #: src/namestore/plugin_namestore_sqlite.c:324 msgid "Tried to close sqlite without finalizing all prepared statements.\n" msgstr "" -#: src/datacache/plugin_datacache_sqlite.c:490 -#, fuzzy, c-format -msgid "Failed to close statement %p: %d\n" -msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" - -#: src/datacache/plugin_datacache_template.c:125 -msgid "Template datacache running\n" -msgstr "" - #: src/datastore/datastore_api.c:310 msgid "Failed to transmit request to drop database.\n" msgstr "" @@ -1848,6 +1834,12 @@ msgstr "" msgid "Plugin does not support get_keys function. Please fix!\n" msgstr "" +#: src/datastore/gnunet-service-datastore.c:1598 +#: src/datastore/gnunet-service-datastore.c:1609 +#, c-format +msgid "No `%s' specified for `%s' in configuration!\n" +msgstr "" + #: src/datastore/gnunet-service-datastore.c:1603 #, fuzzy, c-format msgid "# bytes used in file-sharing datastore `%s'" @@ -2128,112 +2120,130 @@ msgstr "" msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY." msgstr "" -#: src/dht/gnunet-service-dht.c:172 src/dht/gnunet-service-xdht.c:193 +#: src/dht/gnunet-service-dht.c:172 #, fuzzy msgid "Failed to connect to transport service!\n" msgstr "Lỗi kết nối đến gnunetd.\n" #: src/dht/gnunet-service-dht_clients.c:417 +#: src/dht/gnunet-service-wdht_clients.c:852 #: src/dht/gnunet-service-xdht_clients.c:849 #, fuzzy msgid "# GET requests from clients injected" msgstr "# các yêu cầu get (lấy) dht được nhận" #: src/dht/gnunet-service-dht_clients.c:513 +#: src/dht/gnunet-service-wdht_clients.c:937 #: src/dht/gnunet-service-xdht_clients.c:933 #, fuzzy msgid "# PUT requests received from clients" msgstr "# các đáp ứng lỗ hổng được gửi cho trình/máy khách" #: src/dht/gnunet-service-dht_clients.c:597 +#: src/dht/gnunet-service-wdht_clients.c:1003 #: src/dht/gnunet-service-xdht_clients.c:998 #, fuzzy msgid "# GET requests received from clients" msgstr "# các yêu cầu get (lấy) dht được nhận" #: src/dht/gnunet-service-dht_clients.c:798 +#: src/dht/gnunet-service-wdht_clients.c:1212 #: src/dht/gnunet-service-xdht_clients.c:1200 #, fuzzy msgid "# GET STOP requests received from clients" msgstr "# các yêu cầu get (lấy) dht được nhận" #: src/dht/gnunet-service-dht_clients.c:1040 +#: src/dht/gnunet-service-wdht_clients.c:505 #: src/dht/gnunet-service-xdht_clients.c:503 msgid "# Key match, type mismatches in REPLY to CLIENT" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1053 +#: src/dht/gnunet-service-wdht_clients.c:519 #: src/dht/gnunet-service-xdht_clients.c:517 msgid "# Duplicate REPLIES to CLIENT request dropped" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1098 +#: src/dht/gnunet-service-wdht_clients.c:561 #: src/dht/gnunet-service-xdht_clients.c:559 #, c-format msgid "Unsupported block type (%u) in request!\n" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1121 +#: src/dht/gnunet-service-wdht_clients.c:584 #: src/dht/gnunet-service-xdht_clients.c:582 msgid "# RESULTS queued for clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1175 #: src/dht/gnunet-service-dht_clients.c:1218 +#: src/dht/gnunet-service-wdht_clients.c:638 +#: src/dht/gnunet-service-wdht_clients.c:681 #: src/dht/gnunet-service-xdht_clients.c:636 #: src/dht/gnunet-service-xdht_clients.c:679 msgid "# REPLIES ignored for CLIENTS (no match)" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1185 +#: src/dht/gnunet-service-wdht_clients.c:648 #: src/dht/gnunet-service-xdht_clients.c:646 msgid "Could not pass reply to client, message too big!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:69 -#: src/dht/gnunet-service-xdht_datacache.c:71 +#: src/dht/gnunet-service-dht_datacache.c:68 #, fuzzy, c-format msgid "%s request received, but have no datacache!\n" msgstr "# các byte kiểu %d được nhận" -#: src/dht/gnunet-service-dht_datacache.c:79 -#: src/dht/gnunet-service-xdht_datacache.c:82 +#: src/dht/gnunet-service-dht_datacache.c:78 +#: src/dht/gnunet-service-wdht_datacache.c:107 +#: src/dht/gnunet-service-xdht_datacache.c:91 msgid "# ITEMS stored in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:176 -#: src/dht/gnunet-service-xdht_datacache.c:230 +#: src/dht/gnunet-service-dht_datacache.c:184 +#: src/dht/gnunet-service-wdht_datacache.c:216 +#: src/dht/gnunet-service-xdht_datacache.c:238 msgid "# Good RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:193 -#: src/dht/gnunet-service-xdht_datacache.c:253 +#: src/dht/gnunet-service-dht_datacache.c:201 +#: src/dht/gnunet-service-wdht_datacache.c:231 +#: src/dht/gnunet-service-xdht_datacache.c:267 msgid "# Duplicate RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:199 -#: src/dht/gnunet-service-xdht_datacache.c:259 +#: src/dht/gnunet-service-dht_datacache.c:207 +#: src/dht/gnunet-service-wdht_datacache.c:237 +#: src/dht/gnunet-service-xdht_datacache.c:273 msgid "# Invalid RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:205 -#: src/dht/gnunet-service-xdht_datacache.c:265 +#: src/dht/gnunet-service-dht_datacache.c:213 +#: src/dht/gnunet-service-wdht_datacache.c:243 +#: src/dht/gnunet-service-xdht_datacache.c:279 msgid "# Irrelevant RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:217 -#: src/dht/gnunet-service-xdht_datacache.c:277 +#: src/dht/gnunet-service-dht_datacache.c:225 +#: src/dht/gnunet-service-wdht_datacache.c:255 +#: src/dht/gnunet-service-xdht_datacache.c:291 msgid "# Unsupported RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:221 -#: src/dht/gnunet-service-xdht_datacache.c:280 +#: src/dht/gnunet-service-dht_datacache.c:229 +#: src/dht/gnunet-service-wdht_datacache.c:258 +#: src/dht/gnunet-service-xdht_datacache.c:294 #, c-format msgid "Unsupported block type (%u) in local response!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:254 -#: src/dht/gnunet-service-xdht_datacache.c:318 +#: src/dht/gnunet-service-dht_datacache.c:262 +#: src/dht/gnunet-service-wdht_datacache.c:295 +#: src/dht/gnunet-service-xdht_datacache.c:334 #, fuzzy msgid "# GET requests given to datacache" msgstr "# các yêu cầu get (lấy) dht được nhận" @@ -2254,7 +2264,7 @@ msgid "# FIND PEER messages initiated" msgstr "# các thông báo PING được tạo" #: src/dht/gnunet-service-dht_neighbours.c:763 -#: src/dht/gnunet-service-xdht_neighbours.c:6060 +#: src/dht/gnunet-service-xdht_neighbours.c:6062 #, fuzzy msgid "# Queued messages discarded (peer disconnected)" msgstr "# các thông báo được chắp liền" @@ -2382,7 +2392,8 @@ msgstr "# Tín hiệu HTTP PUT được nhận" msgid "# P2P RESULT bytes received" msgstr "# Tín hiệu HTTP PUT được nhận" -#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-xdht_nse.c:59 +#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-wdht_nse.c:59 +#: src/dht/gnunet-service-xdht_nse.c:59 #, fuzzy msgid "# Network size estimates received" msgstr "# các yêu cầu get (lấy) dht được nhận" @@ -2420,6 +2431,11 @@ msgstr "" msgid "# DHT requests combined" msgstr "# các yêu cầu get (lấy) dht được nhận" +#: src/dht/gnunet-service-wdht_datacache.c:82 +#, fuzzy +msgid "PUT request received, but have no datacache!\n" +msgstr "# các byte kiểu %d được nhận" + #: src/dht/gnunet-service-xdht_neighbours.c:1832 #, c-format msgid "" @@ -2483,15 +2499,15 @@ msgstr "" #: src/dht/gnunet-service-xdht_neighbours.c:3700 #: src/dht/gnunet-service-xdht_neighbours.c:3938 #: src/dht/gnunet-service-xdht_neighbours.c:4090 -#: src/dht/gnunet-service-xdht_neighbours.c:4240 -#: src/dht/gnunet-service-xdht_neighbours.c:4421 -#: src/dht/gnunet-service-xdht_neighbours.c:4934 -#: src/dht/gnunet-service-xdht_neighbours.c:5327 -#: src/dht/gnunet-service-xdht_neighbours.c:5420 -#: src/dht/gnunet-service-xdht_neighbours.c:5510 -#: src/dht/gnunet-service-xdht_neighbours.c:5614 -#: src/dht/gnunet-service-xdht_neighbours.c:5758 -#: src/dht/gnunet-service-xdht_neighbours.c:5847 +#: src/dht/gnunet-service-xdht_neighbours.c:4242 +#: src/dht/gnunet-service-xdht_neighbours.c:4423 +#: src/dht/gnunet-service-xdht_neighbours.c:4936 +#: src/dht/gnunet-service-xdht_neighbours.c:5329 +#: src/dht/gnunet-service-xdht_neighbours.c:5422 +#: src/dht/gnunet-service-xdht_neighbours.c:5512 +#: src/dht/gnunet-service-xdht_neighbours.c:5616 +#: src/dht/gnunet-service-xdht_neighbours.c:5760 +#: src/dht/gnunet-service-xdht_neighbours.c:5849 #, fuzzy msgid "# Bytes received from other peers" msgstr "# các byte kiểu %d được nhận" @@ -6041,64 +6057,64 @@ msgstr "Lỗi bắt đầu thu thập.\n" msgid "Failed to get fragment!\n" msgstr "Lỗi lấy thông kê về truyền tải.\n" -#: src/psycstore/gnunet-service-psycstore.c:402 +#: src/psycstore/gnunet-service-psycstore.c:417 #, fuzzy msgid "Failed to get message!\n" msgstr "Lỗi lấy thông kê về truyền tải.\n" -#: src/psycstore/gnunet-service-psycstore.c:433 +#: src/psycstore/gnunet-service-psycstore.c:448 #, fuzzy msgid "Failed to get message fragment!\n" msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" -#: src/psycstore/gnunet-service-psycstore.c:461 +#: src/psycstore/gnunet-service-psycstore.c:476 #, fuzzy msgid "Failed to get master counters!\n" msgstr "Lỗi lấy thông kê về truyền tải.\n" -#: src/psycstore/gnunet-service-psycstore.c:497 -#: src/psycstore/gnunet-service-psycstore.c:570 +#: src/psycstore/gnunet-service-psycstore.c:512 +#: src/psycstore/gnunet-service-psycstore.c:585 msgid "Tried to set invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:513 +#: src/psycstore/gnunet-service-psycstore.c:528 #, fuzzy msgid "Failed to begin modifying state!\n" msgstr "Lỗi bắt đầu thu thập.\n" -#: src/psycstore/gnunet-service-psycstore.c:536 +#: src/psycstore/gnunet-service-psycstore.c:551 #, fuzzy, c-format msgid "Unknown operator: %c\n" msgstr "Không rõ thao tác « %s ».\n" -#: src/psycstore/gnunet-service-psycstore.c:546 +#: src/psycstore/gnunet-service-psycstore.c:561 #, fuzzy msgid "Failed to end modifying state!\n" msgstr "Lỗi bắt đầu thu thập.\n" -#: src/psycstore/gnunet-service-psycstore.c:584 +#: src/psycstore/gnunet-service-psycstore.c:599 #, fuzzy msgid "Failed to begin synchronizing state!\n" msgstr "Lỗi lấy thông kê về truyền tải.\n" -#: src/psycstore/gnunet-service-psycstore.c:600 +#: src/psycstore/gnunet-service-psycstore.c:615 #, fuzzy msgid "Failed to end synchronizing state!\n" msgstr "Lỗi lấy thông kê về truyền tải.\n" -#: src/psycstore/gnunet-service-psycstore.c:620 -#: src/psycstore/gnunet-service-psycstore.c:639 +#: src/psycstore/gnunet-service-psycstore.c:635 +#: src/psycstore/gnunet-service-psycstore.c:654 #, fuzzy msgid "Failed to reset state!\n" msgstr "Lỗi lấy thông kê về truyền tải.\n" -#: src/psycstore/gnunet-service-psycstore.c:662 -#: src/psycstore/gnunet-service-psycstore.c:713 +#: src/psycstore/gnunet-service-psycstore.c:677 +#: src/psycstore/gnunet-service-psycstore.c:728 msgid "Tried to get invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:689 -#: src/psycstore/gnunet-service-psycstore.c:728 +#: src/psycstore/gnunet-service-psycstore.c:704 +#: src/psycstore/gnunet-service-psycstore.c:743 #, fuzzy msgid "Failed to get state variable!\n" msgstr "Lỗi lấy thông kê về truyền tải.\n" @@ -6108,7 +6124,7 @@ msgstr "Lỗi lấy thông kê về truyền tải.\n" msgid "`%s' failed at %s:%d with error: %s (%d)\n" msgstr "« %s » bị lỗi tại %s:%d với lỗi: %s\n" -#: src/psycstore/plugin_psycstore_sqlite.c:1932 +#: src/psycstore/plugin_psycstore_sqlite.c:1936 #, fuzzy msgid "SQLite database running\n" msgstr "kho dữ liệu sqlite" @@ -8156,7 +8172,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2825 -#: src/transport/plugin_transport_udp.c:3335 +#: src/transport/plugin_transport_udp.c:3338 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -8403,37 +8419,37 @@ msgid "" "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3411 -#: src/transport/plugin_transport_udp.c:3510 +#: src/transport/plugin_transport_udp.c:3414 +#: src/transport/plugin_transport_udp.c:3513 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" -#: src/transport/plugin_transport_udp.c:3429 +#: src/transport/plugin_transport_udp.c:3432 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3520 +#: src/transport/plugin_transport_udp.c:3523 #, fuzzy msgid "Failed to open UDP sockets\n" msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n" -#: src/transport/plugin_transport_udp.c:3591 -#: src/transport/plugin_transport_udp.c:3605 +#: src/transport/plugin_transport_udp.c:3594 +#: src/transport/plugin_transport_udp.c:3608 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3637 +#: src/transport/plugin_transport_udp.c:3640 #, fuzzy msgid "must be valid IPv4 address" msgstr "« %s » không sẵn sàng.\n" -#: src/transport/plugin_transport_udp.c:3664 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv6 address" msgstr "« %s » không sẵn sàng.\n" -#: src/transport/plugin_transport_udp.c:3730 +#: src/transport/plugin_transport_udp.c:3733 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "Không thể tạo miền tên.\n" @@ -8754,7 +8770,7 @@ msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" msgid "libgcrypt has not the expected version (version %s is required).\n" msgstr "libgcrypt không có phiên bản mong đợi (yêu cầu phiên bản %s).\n" -#: src/util/crypto_rsa.c:825 +#: src/util/crypto_rsa.c:891 #, c-format msgid "RSA signature verification failed at %s:%d: %s\n" msgstr "Lỗi thẩm tra chữ ký RSA tại %s:%d: %s\n" @@ -9561,22 +9577,26 @@ msgstr "# các byte đã nhận qua UDP" msgid "Setup tunnels via VPN." msgstr "" -#: src/include/gnunet_common.h:590 src/include/gnunet_common.h:597 -#: src/include/gnunet_common.h:605 +#: src/include/gnunet_common.h:631 src/include/gnunet_common.h:638 +#: src/include/gnunet_common.h:646 #, fuzzy, c-format msgid "Assertion failed at %s:%d.\n" msgstr "Lỗi nội bộ : khẳng định không thành công tại %s:%d.\n" -#: src/include/gnunet_common.h:617 +#: src/include/gnunet_common.h:658 #, fuzzy, c-format msgid "External protocol violation detected at %s:%d.\n" msgstr "Lỗi nội bộ : khẳng định không thành công tại %s:%d.\n" -#: src/include/gnunet_common.h:644 src/include/gnunet_common.h:653 +#: src/include/gnunet_common.h:685 src/include/gnunet_common.h:694 #, c-format msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" msgstr "« %s » thất bại ở tập tin « %s » tại %s:%d với lỗi: %s\n" +#, fuzzy +#~ msgid "Failed to close statement %p: %d\n" +#~ msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n" + #, fuzzy #~ msgid "Failed to initialize solver!\n" #~ msgstr "Không thể sơ khởi SQLite: %s.\n" @@ -12099,9 +12119,6 @@ msgstr "« %s » thất bại ở tập tin « %s » tại %s:%d với lỗi: %s #~ msgid "Datastore full.\n" #~ msgstr "Kho dữ liệu đầy.\n" -#~ msgid "# gap requests total received" -#~ msgstr "# tổng số yêu cầu lỗ hổng được nhận" - #~ msgid "# gap total trust awarded" #~ msgstr "# tổng số tin cậy lỗ hổng được cấp" diff --git a/po/zh_CN.po b/po/zh_CN.po index 91203f264..bdca7ad45 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: gnunet-0.8.1\n" "Report-Msgid-Bugs-To: gnunet-developers@mail.gnu.org\n" -"POT-Creation-Date: 2015-04-27 13:05+0200\n" +"POT-Creation-Date: 2015-05-19 11:25+0200\n" "PO-Revision-Date: 2011-07-09 12:12+0800\n" "Last-Translator: Wylmer Wang \n" "Language-Team: Chinese (simplified) \n" @@ -647,58 +647,58 @@ msgstr "无法获取有关用户“%s”的信息:%s\n" msgid "Invalid target `%s'\n" msgstr "“%s”的参数无效。\n" -#: src/cadet/gnunet-cadet.c:626 +#: src/cadet/gnunet-cadet.c:643 #, fuzzy, c-format msgid "Invalid peer ID `%s'\n" msgstr "无效条目。\n" -#: src/cadet/gnunet-cadet.c:669 +#: src/cadet/gnunet-cadet.c:686 #, fuzzy, c-format msgid "Invalid tunnel owner `%s'\n" msgstr "IP 格式无效:“%s”\n" -#: src/cadet/gnunet-cadet.c:735 +#: src/cadet/gnunet-cadet.c:752 msgid "You must NOT give a TARGETwhen using 'request all' options\n" msgstr "" -#: src/cadet/gnunet-cadet.c:832 +#: src/cadet/gnunet-cadet.c:849 #, fuzzy msgid "provide information about a particular connection" msgstr "无法获取有关用户“%s”的信息:%s\n" -#: src/cadet/gnunet-cadet.c:835 +#: src/cadet/gnunet-cadet.c:852 msgid "activate echo mode" msgstr "" -#: src/cadet/gnunet-cadet.c:838 +#: src/cadet/gnunet-cadet.c:855 msgid "dump debug information to STDERR" msgstr "" -#: src/cadet/gnunet-cadet.c:844 +#: src/cadet/gnunet-cadet.c:861 msgid "port to listen to (default; 0)" msgstr "" -#: src/cadet/gnunet-cadet.c:847 +#: src/cadet/gnunet-cadet.c:864 #, fuzzy msgid "provide information about a patricular peer" msgstr "无法获取有关用户“%s”的信息:%s\n" -#: src/cadet/gnunet-cadet.c:850 +#: src/cadet/gnunet-cadet.c:867 #, fuzzy msgid "provide information about all peers" msgstr "无法获取有关用户“%s”的信息:%s\n" -#: src/cadet/gnunet-cadet.c:853 +#: src/cadet/gnunet-cadet.c:870 #, fuzzy msgid "provide information about a particular tunnel" msgstr "无法获取有关用户“%s”的信息:%s\n" -#: src/cadet/gnunet-cadet.c:856 +#: src/cadet/gnunet-cadet.c:873 #, fuzzy msgid "provide information about all tunnels" msgstr "无法获取有关用户“%s”的信息:%s\n" -#: src/cadet/gnunet-service-cadet_peer.c:507 +#: src/cadet/gnunet-service-cadet_peer.c:514 msgid "Wrong CORE service\n" msgstr "" @@ -1460,51 +1460,48 @@ msgstr "" msgid "# updates to my type map" msgstr "" -#: src/datacache/datacache.c:115 src/datacache/datacache.c:266 +#: src/datacache/datacache.c:119 src/datacache/datacache.c:294 #: src/datastore/gnunet-service-datastore.c:841 msgid "# bytes stored" msgstr "" -#: src/datacache/datacache.c:117 src/datacache/datacache.c:268 +#: src/datacache/datacache.c:123 src/datacache/datacache.c:298 msgid "# items stored" msgstr "" -#: src/datacache/datacache.c:143 src/datacache/datacache.c:150 -#: src/datastore/gnunet-service-datastore.c:1598 -#: src/datastore/gnunet-service-datastore.c:1609 -#, c-format -msgid "No `%s' specified for `%s' in configuration!\n" -msgstr "" - -#: src/datacache/datacache.c:184 +#: src/datacache/datacache.c:202 #, c-format msgid "Loading `%s' datacache plugin\n" msgstr "" -#: src/datacache/datacache.c:192 +#: src/datacache/datacache.c:213 #, c-format msgid "Failed to load datacache plugin for `%s'\n" msgstr "" -#: src/datacache/datacache.c:295 +#: src/datacache/datacache.c:329 msgid "# requests received" msgstr "" -#: src/datacache/datacache.c:304 +#: src/datacache/datacache.c:339 msgid "# requests filtered by bloom filter" msgstr "" -#: src/datacache/plugin_datacache_heap.c:406 +#: src/datacache/datacache.c:367 +msgid "# requests for random value received" +msgstr "" + +#: src/datacache/datacache.c:399 +msgid "# proximity search requests received" +msgstr "" + +#: src/datacache/plugin_datacache_heap.c:466 #, fuzzy msgid "Heap datacache running\n" msgstr "sqlite 数据仓库" -#: src/datacache/plugin_datacache_postgres.c:391 -msgid "Postgres datacache running\n" -msgstr "" - -#: src/datacache/plugin_datacache_sqlite.c:69 -#: src/datacache/plugin_datacache_sqlite.c:72 +#: src/datacache/plugin_datacache_sqlite.c:77 +#: src/datacache/plugin_datacache_sqlite.c:86 #: src/datastore/plugin_datastore_mysql.c:818 #: src/datastore/plugin_datastore_mysql.c:834 #: src/datastore/plugin_datastore_sqlite.c:57 src/mysql/mysql.c:41 @@ -1519,32 +1516,19 @@ msgstr "" #: src/testbed/gnunet-daemon-latency-logger.c:52 #: src/testbed/gnunet-daemon-testbed-underlay.c:55 #: src/testbed/testbed_api_hosts.c:69 src/util/crypto_ecc.c:51 -#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:626 -#: src/include/gnunet_common.h:635 src/scalarproduct/scalarproduct.h:35 +#: src/util/crypto_mpi.c:39 src/include/gnunet_common.h:667 +#: src/include/gnunet_common.h:676 src/scalarproduct/scalarproduct.h:35 #, fuzzy, c-format msgid "`%s' failed at %s:%d with error: %s\n" msgstr "“%s”于 %s:%d 处失败,错误为:%s\n" -#: src/datacache/plugin_datacache_sqlite.c:449 -msgid "Sqlite datacache running\n" -msgstr "" - -#: src/datacache/plugin_datacache_sqlite.c:483 +#: src/datacache/plugin_datacache_sqlite.c:749 #: src/datastore/plugin_datastore_sqlite.c:401 #: src/namecache/plugin_namecache_sqlite.c:292 #: src/namestore/plugin_namestore_sqlite.c:324 msgid "Tried to close sqlite without finalizing all prepared statements.\n" msgstr "" -#: src/datacache/plugin_datacache_sqlite.c:490 -#, fuzzy, c-format -msgid "Failed to close statement %p: %d\n" -msgstr "解析配置文件“%s”失败\n" - -#: src/datacache/plugin_datacache_template.c:125 -msgid "Template datacache running\n" -msgstr "" - #: src/datastore/datastore_api.c:310 msgid "Failed to transmit request to drop database.\n" msgstr "" @@ -1778,6 +1762,12 @@ msgstr "" msgid "Plugin does not support get_keys function. Please fix!\n" msgstr "" +#: src/datastore/gnunet-service-datastore.c:1598 +#: src/datastore/gnunet-service-datastore.c:1609 +#, c-format +msgid "No `%s' specified for `%s' in configuration!\n" +msgstr "" + #: src/datastore/gnunet-service-datastore.c:1603 #, c-format msgid "# bytes used in file-sharing datastore `%s'" @@ -2054,108 +2044,126 @@ msgstr "" msgid "Issue a PUT request to the GNUnet DHT insert DATA under KEY." msgstr "" -#: src/dht/gnunet-service-dht.c:172 src/dht/gnunet-service-xdht.c:193 +#: src/dht/gnunet-service-dht.c:172 #, fuzzy msgid "Failed to connect to transport service!\n" msgstr "初始化“%s”服务失败。\n" #: src/dht/gnunet-service-dht_clients.c:417 +#: src/dht/gnunet-service-wdht_clients.c:852 #: src/dht/gnunet-service-xdht_clients.c:849 msgid "# GET requests from clients injected" msgstr "" #: src/dht/gnunet-service-dht_clients.c:513 +#: src/dht/gnunet-service-wdht_clients.c:937 #: src/dht/gnunet-service-xdht_clients.c:933 msgid "# PUT requests received from clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:597 +#: src/dht/gnunet-service-wdht_clients.c:1003 #: src/dht/gnunet-service-xdht_clients.c:998 msgid "# GET requests received from clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:798 +#: src/dht/gnunet-service-wdht_clients.c:1212 #: src/dht/gnunet-service-xdht_clients.c:1200 msgid "# GET STOP requests received from clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1040 +#: src/dht/gnunet-service-wdht_clients.c:505 #: src/dht/gnunet-service-xdht_clients.c:503 msgid "# Key match, type mismatches in REPLY to CLIENT" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1053 +#: src/dht/gnunet-service-wdht_clients.c:519 #: src/dht/gnunet-service-xdht_clients.c:517 msgid "# Duplicate REPLIES to CLIENT request dropped" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1098 +#: src/dht/gnunet-service-wdht_clients.c:561 #: src/dht/gnunet-service-xdht_clients.c:559 #, c-format msgid "Unsupported block type (%u) in request!\n" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1121 +#: src/dht/gnunet-service-wdht_clients.c:584 #: src/dht/gnunet-service-xdht_clients.c:582 msgid "# RESULTS queued for clients" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1175 #: src/dht/gnunet-service-dht_clients.c:1218 +#: src/dht/gnunet-service-wdht_clients.c:638 +#: src/dht/gnunet-service-wdht_clients.c:681 #: src/dht/gnunet-service-xdht_clients.c:636 #: src/dht/gnunet-service-xdht_clients.c:679 msgid "# REPLIES ignored for CLIENTS (no match)" msgstr "" #: src/dht/gnunet-service-dht_clients.c:1185 +#: src/dht/gnunet-service-wdht_clients.c:648 #: src/dht/gnunet-service-xdht_clients.c:646 msgid "Could not pass reply to client, message too big!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:69 -#: src/dht/gnunet-service-xdht_datacache.c:71 +#: src/dht/gnunet-service-dht_datacache.c:68 #, c-format msgid "%s request received, but have no datacache!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:79 -#: src/dht/gnunet-service-xdht_datacache.c:82 +#: src/dht/gnunet-service-dht_datacache.c:78 +#: src/dht/gnunet-service-wdht_datacache.c:107 +#: src/dht/gnunet-service-xdht_datacache.c:91 msgid "# ITEMS stored in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:176 -#: src/dht/gnunet-service-xdht_datacache.c:230 +#: src/dht/gnunet-service-dht_datacache.c:184 +#: src/dht/gnunet-service-wdht_datacache.c:216 +#: src/dht/gnunet-service-xdht_datacache.c:238 msgid "# Good RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:193 -#: src/dht/gnunet-service-xdht_datacache.c:253 +#: src/dht/gnunet-service-dht_datacache.c:201 +#: src/dht/gnunet-service-wdht_datacache.c:231 +#: src/dht/gnunet-service-xdht_datacache.c:267 msgid "# Duplicate RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:199 -#: src/dht/gnunet-service-xdht_datacache.c:259 +#: src/dht/gnunet-service-dht_datacache.c:207 +#: src/dht/gnunet-service-wdht_datacache.c:237 +#: src/dht/gnunet-service-xdht_datacache.c:273 msgid "# Invalid RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:205 -#: src/dht/gnunet-service-xdht_datacache.c:265 +#: src/dht/gnunet-service-dht_datacache.c:213 +#: src/dht/gnunet-service-wdht_datacache.c:243 +#: src/dht/gnunet-service-xdht_datacache.c:279 msgid "# Irrelevant RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:217 -#: src/dht/gnunet-service-xdht_datacache.c:277 +#: src/dht/gnunet-service-dht_datacache.c:225 +#: src/dht/gnunet-service-wdht_datacache.c:255 +#: src/dht/gnunet-service-xdht_datacache.c:291 msgid "# Unsupported RESULTS found in datacache" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:221 -#: src/dht/gnunet-service-xdht_datacache.c:280 +#: src/dht/gnunet-service-dht_datacache.c:229 +#: src/dht/gnunet-service-wdht_datacache.c:258 +#: src/dht/gnunet-service-xdht_datacache.c:294 #, c-format msgid "Unsupported block type (%u) in local response!\n" msgstr "" -#: src/dht/gnunet-service-dht_datacache.c:254 -#: src/dht/gnunet-service-xdht_datacache.c:318 +#: src/dht/gnunet-service-dht_datacache.c:262 +#: src/dht/gnunet-service-wdht_datacache.c:295 +#: src/dht/gnunet-service-xdht_datacache.c:334 msgid "# GET requests given to datacache" msgstr "" @@ -2173,7 +2181,7 @@ msgid "# FIND PEER messages initiated" msgstr "" #: src/dht/gnunet-service-dht_neighbours.c:763 -#: src/dht/gnunet-service-xdht_neighbours.c:6060 +#: src/dht/gnunet-service-xdht_neighbours.c:6062 msgid "# Queued messages discarded (peer disconnected)" msgstr "" @@ -2280,7 +2288,8 @@ msgstr "" msgid "# P2P RESULT bytes received" msgstr "" -#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-xdht_nse.c:59 +#: src/dht/gnunet-service-dht_nse.c:59 src/dht/gnunet-service-wdht_nse.c:59 +#: src/dht/gnunet-service-xdht_nse.c:59 msgid "# Network size estimates received" msgstr "" @@ -2316,6 +2325,10 @@ msgstr "" msgid "# DHT requests combined" msgstr "" +#: src/dht/gnunet-service-wdht_datacache.c:82 +msgid "PUT request received, but have no datacache!\n" +msgstr "" + #: src/dht/gnunet-service-xdht_neighbours.c:1832 #, c-format msgid "" @@ -2379,15 +2392,15 @@ msgstr "" #: src/dht/gnunet-service-xdht_neighbours.c:3700 #: src/dht/gnunet-service-xdht_neighbours.c:3938 #: src/dht/gnunet-service-xdht_neighbours.c:4090 -#: src/dht/gnunet-service-xdht_neighbours.c:4240 -#: src/dht/gnunet-service-xdht_neighbours.c:4421 -#: src/dht/gnunet-service-xdht_neighbours.c:4934 -#: src/dht/gnunet-service-xdht_neighbours.c:5327 -#: src/dht/gnunet-service-xdht_neighbours.c:5420 -#: src/dht/gnunet-service-xdht_neighbours.c:5510 -#: src/dht/gnunet-service-xdht_neighbours.c:5614 -#: src/dht/gnunet-service-xdht_neighbours.c:5758 -#: src/dht/gnunet-service-xdht_neighbours.c:5847 +#: src/dht/gnunet-service-xdht_neighbours.c:4242 +#: src/dht/gnunet-service-xdht_neighbours.c:4423 +#: src/dht/gnunet-service-xdht_neighbours.c:4936 +#: src/dht/gnunet-service-xdht_neighbours.c:5329 +#: src/dht/gnunet-service-xdht_neighbours.c:5422 +#: src/dht/gnunet-service-xdht_neighbours.c:5512 +#: src/dht/gnunet-service-xdht_neighbours.c:5616 +#: src/dht/gnunet-service-xdht_neighbours.c:5760 +#: src/dht/gnunet-service-xdht_neighbours.c:5849 msgid "# Bytes received from other peers" msgstr "" @@ -5803,64 +5816,64 @@ msgstr "运行 %s失败:%s %d\n" msgid "Failed to get fragment!\n" msgstr "发送消息失败。\n" -#: src/psycstore/gnunet-service-psycstore.c:402 +#: src/psycstore/gnunet-service-psycstore.c:417 #, fuzzy msgid "Failed to get message!\n" msgstr "发送消息失败。\n" -#: src/psycstore/gnunet-service-psycstore.c:433 +#: src/psycstore/gnunet-service-psycstore.c:448 #, fuzzy msgid "Failed to get message fragment!\n" msgstr "打开日志文件“%s”失败:%s\n" -#: src/psycstore/gnunet-service-psycstore.c:461 +#: src/psycstore/gnunet-service-psycstore.c:476 #, fuzzy msgid "Failed to get master counters!\n" msgstr "发送消息失败。\n" -#: src/psycstore/gnunet-service-psycstore.c:497 -#: src/psycstore/gnunet-service-psycstore.c:570 +#: src/psycstore/gnunet-service-psycstore.c:512 +#: src/psycstore/gnunet-service-psycstore.c:585 msgid "Tried to set invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:513 +#: src/psycstore/gnunet-service-psycstore.c:528 #, fuzzy msgid "Failed to begin modifying state!\n" msgstr "运行 %s失败:%s %d\n" -#: src/psycstore/gnunet-service-psycstore.c:536 +#: src/psycstore/gnunet-service-psycstore.c:551 #, fuzzy, c-format msgid "Unknown operator: %c\n" msgstr "未知错误" -#: src/psycstore/gnunet-service-psycstore.c:546 +#: src/psycstore/gnunet-service-psycstore.c:561 #, fuzzy msgid "Failed to end modifying state!\n" msgstr "运行 %s失败:%s %d\n" -#: src/psycstore/gnunet-service-psycstore.c:584 +#: src/psycstore/gnunet-service-psycstore.c:599 #, fuzzy msgid "Failed to begin synchronizing state!\n" msgstr "发送消息失败。\n" -#: src/psycstore/gnunet-service-psycstore.c:600 +#: src/psycstore/gnunet-service-psycstore.c:615 #, fuzzy msgid "Failed to end synchronizing state!\n" msgstr "发送消息失败。\n" -#: src/psycstore/gnunet-service-psycstore.c:620 -#: src/psycstore/gnunet-service-psycstore.c:639 +#: src/psycstore/gnunet-service-psycstore.c:635 +#: src/psycstore/gnunet-service-psycstore.c:654 #, fuzzy msgid "Failed to reset state!\n" msgstr "发送消息失败。\n" -#: src/psycstore/gnunet-service-psycstore.c:662 -#: src/psycstore/gnunet-service-psycstore.c:713 +#: src/psycstore/gnunet-service-psycstore.c:677 +#: src/psycstore/gnunet-service-psycstore.c:728 msgid "Tried to get invalid state variable name!\n" msgstr "" -#: src/psycstore/gnunet-service-psycstore.c:689 -#: src/psycstore/gnunet-service-psycstore.c:728 +#: src/psycstore/gnunet-service-psycstore.c:704 +#: src/psycstore/gnunet-service-psycstore.c:743 #, fuzzy msgid "Failed to get state variable!\n" msgstr "发送消息失败。\n" @@ -5870,7 +5883,7 @@ msgstr "发送消息失败。\n" msgid "`%s' failed at %s:%d with error: %s (%d)\n" msgstr "“%s”于 %s:%d 处失败,错误为:%s\n" -#: src/psycstore/plugin_psycstore_sqlite.c:1932 +#: src/psycstore/plugin_psycstore_sqlite.c:1936 #, fuzzy msgid "SQLite database running\n" msgstr "sqlite 数据仓库" @@ -7853,7 +7866,7 @@ msgid "Found %u addresses to report to NAT service\n" msgstr "" #: src/transport/plugin_transport_http_server.c:2825 -#: src/transport/plugin_transport_udp.c:3335 +#: src/transport/plugin_transport_udp.c:3338 msgid "Disabling IPv6 since it is not supported on this system!\n" msgstr "" @@ -8097,37 +8110,37 @@ msgid "" "and disable IPv6 if your connection does not have a global IPv6 address\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3411 -#: src/transport/plugin_transport_udp.c:3510 +#: src/transport/plugin_transport_udp.c:3414 +#: src/transport/plugin_transport_udp.c:3513 #, fuzzy, c-format msgid "Failed to bind UDP socket to %s: %s\n" msgstr "打开日志文件“%s”失败:%s\n" -#: src/transport/plugin_transport_udp.c:3429 +#: src/transport/plugin_transport_udp.c:3432 msgid "Disabling IPv4 since it is not supported on this system!\n" msgstr "" -#: src/transport/plugin_transport_udp.c:3520 +#: src/transport/plugin_transport_udp.c:3523 #, fuzzy msgid "Failed to open UDP sockets\n" msgstr "打开日志文件“%s”失败:%s\n" -#: src/transport/plugin_transport_udp.c:3591 -#: src/transport/plugin_transport_udp.c:3605 +#: src/transport/plugin_transport_udp.c:3594 +#: src/transport/plugin_transport_udp.c:3608 msgid "must be in [0,65535]" msgstr "" -#: src/transport/plugin_transport_udp.c:3637 +#: src/transport/plugin_transport_udp.c:3640 #, fuzzy msgid "must be valid IPv4 address" msgstr "“%s”不可用。\n" -#: src/transport/plugin_transport_udp.c:3664 +#: src/transport/plugin_transport_udp.c:3667 #, fuzzy msgid "must be valid IPv6 address" msgstr "“%s”不可用。\n" -#: src/transport/plugin_transport_udp.c:3730 +#: src/transport/plugin_transport_udp.c:3733 #, fuzzy msgid "Failed to create UDP network sockets\n" msgstr "发送消息失败。\n" @@ -8434,7 +8447,7 @@ msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" msgid "libgcrypt has not the expected version (version %s is required).\n" msgstr "libgcrypt 的版本不符合预期(要求版本 %s)。\n" -#: src/util/crypto_rsa.c:825 +#: src/util/crypto_rsa.c:891 #, fuzzy, c-format msgid "RSA signature verification failed at %s:%d: %s\n" msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n" @@ -9229,22 +9242,26 @@ msgstr "" msgid "Setup tunnels via VPN." msgstr "" -#: src/include/gnunet_common.h:590 src/include/gnunet_common.h:597 -#: src/include/gnunet_common.h:605 +#: src/include/gnunet_common.h:631 src/include/gnunet_common.h:638 +#: src/include/gnunet_common.h:646 #, c-format msgid "Assertion failed at %s:%d.\n" msgstr "" -#: src/include/gnunet_common.h:617 +#: src/include/gnunet_common.h:658 #, c-format msgid "External protocol violation detected at %s:%d.\n" msgstr "" -#: src/include/gnunet_common.h:644 src/include/gnunet_common.h:653 +#: src/include/gnunet_common.h:685 src/include/gnunet_common.h:694 #, c-format msgid "`%s' failed on file `%s' at %s:%d with error: %s\n" msgstr "" +#, fuzzy +#~ msgid "Failed to close statement %p: %d\n" +#~ msgstr "解析配置文件“%s”失败\n" + #, fuzzy #~ msgid "Failed to initialize solver!\n" #~ msgstr "无法初始化 SQLite:%s。\n" diff --git a/src/Makefile.am b/src/Makefile.am index ae623bddc..8e3d02993 100644 --- a/src/Makefile.am +++ b/src/Makefile.am @@ -47,6 +47,12 @@ if HAVE_REST REST_DIR = rest endif +if TALER_ONLY +SUBDIRS = \ + include \ + util +else + SUBDIRS = \ include $(INTLEMU_SUBDIRS) \ util \ @@ -95,3 +101,5 @@ SUBDIRS = \ pt \ integration-tests \ $(EXP_DIR) + +endif diff --git a/src/include/Makefile.am b/src/include/Makefile.am index ff5252d3d..ad5773556 100644 --- a/src/include/Makefile.am +++ b/src/include/Makefile.am @@ -13,6 +13,11 @@ EXTRA_DIST = \ block_dns.h \ block_regex.h +if TALER_ONLY +gnunetinclude_HEADERS = \ + gnunet_util_taler_wallet.h +else + gnunetinclude_HEADERS = \ platform.h plibc.h $(WINPROC) gettext.h \ gnunet_applications.h \ @@ -105,3 +110,5 @@ gnunetinclude_HEADERS = \ gnunet_tun_lib.h \ gnunet_util_lib.h \ gnunet_vpn_service.h + +endif diff --git a/src/include/gnunet_util_taler_wallet_lib.h b/src/include/gnunet_util_taler_wallet_lib.h new file mode 100644 index 000000000..ff3b2613b --- /dev/null +++ b/src/include/gnunet_util_taler_wallet_lib.h @@ -0,0 +1,56 @@ +/* + This file is part of GNUnet + Copyright (C) 2009, 2015 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + */ + +/** + * @file include/gnunet_util_taler_wallet_lib.h + * @brief convenience header including all headers of subsystems in + * gnunet_util_taler_wallet library. Note that (due to the + * structure of the original headers), not all symbols declared + * by the included headers are actually included in the + * gnunet_util_taler_wallet library! The library excludes anything + * relating to the GNUnet installation location, scheduler, networking + * or OS-specific logic that would not apply to Apps/Browser extensions. + * @author Christian Grothoff + */ + +#ifndef GNUNET_UTIL_TALER_WALLET_LIB_H +#define GNUNET_UTIL_TALER_WALLET_LIB_H + +#ifdef __cplusplus +extern "C" +{ +#if 0 /* keep Emacsens' auto-indent happy */ +} +#endif +#endif + +#include "gnunet_crypto_lib.h" +#include "gnunet_container_lib.h" +#include "gnunet_disk_lib.h" +#include "gnunet_strings_lib.h" + +#if 0 /* keep Emacsens' auto-indent happy */ +{ +#endif +#ifdef __cplusplus +} +#endif + +#endif diff --git a/src/util/Makefile.am b/src/util/Makefile.am index 685632b49..a2482fc87 100644 --- a/src/util/Makefile.am +++ b/src/util/Makefile.am @@ -46,12 +46,6 @@ gnunet_helper_w32_console_SOURCES = \ gnunet_helper_w32_console_LDADD = \ libgnunetutil.la -noinst_PROGRAMS = \ - gnunet-config-diff \ - $(W32CAT) \ - test_common_logging_dummy - - gnunet_config_diff_SOURCES = \ gnunet-config-diff.c gnunet_config_diff_LDADD = \ @@ -62,8 +56,6 @@ test_common_logging_dummy_SOURCES = \ test_common_logging_dummy_LDADD = \ libgnunetutil.la -lib_LTLIBRARIES = libgnunetutil.la - libgnunetutil_la_SOURCES = \ bandwidth.c \ bio.c \ @@ -73,6 +65,7 @@ libgnunetutil_la_SOURCES = \ common_endian.c \ common_logging.c \ configuration.c \ + configuration_loader.c \ connection.c \ container_bloomfilter.c \ container_heap.c \ @@ -83,7 +76,9 @@ libgnunetutil_la_SOURCES = \ crypto_symmetric.c \ crypto_crc.c \ crypto_ecc.c \ + crypto_ecc_setup.c \ crypto_hash.c \ + crypto_hash_file.c \ crypto_hkdf.c \ crypto_kdf.c \ crypto_mpi.c \ @@ -91,6 +86,7 @@ libgnunetutil_la_SOURCES = \ crypto_random.c \ crypto_rsa.c \ disk.c \ + disk_iterator.c \ disk.h \ getopt.c \ getopt_helpers.c \ @@ -127,11 +123,46 @@ libgnunetutil_la_LDFLAGS = \ $(GN_LIB_LDFLAGS) \ -version-info 13:0:0 + +libgnunetutil_taler_wallet_la_SOURCES = \ + common_allocation.c \ + common_endian.c \ + common_logging.c \ + configuration.c \ + container_heap.c \ + container_multihashmap.c \ + container_multihashmap32.c \ + crypto_symmetric.c \ + crypto_crc.c \ + crypto_ecc.c \ + crypto_hash.c \ + crypto_hkdf.c \ + crypto_kdf.c \ + crypto_mpi.c \ + crypto_random.c \ + crypto_rsa.c \ + disk.c \ + disk.h \ + strings.c \ + time.c + +libgnunetutil_taler_wallet_la_LIBADD = \ + $(LIBGCRYPT_LIBS) \ + -lunistring + +libgnunetutil_taler_wallet_la_LDFLAGS = \ + $(GN_LIB_LDFLAGS) \ + -version-info 0:0:0 + if HAVE_TESTING GNUNET_ECC = gnunet-ecc GNUNET_SCRYPT = gnunet-scrypt endif +if TALER_ONLY +lib_LTLIBRARIES = libgnunetutil_taler_wallet.la +else +lib_LTLIBRARIES = libgnunetutil.la libexec_PROGRAMS = \ gnunet-service-resolver \ @@ -147,6 +178,20 @@ bin_PROGRAMS = \ $(GNUNET_SCRYPT) \ gnunet-uri +noinst_PROGRAMS = \ + gnunet-config-diff \ + $(W32CAT) \ + test_common_logging_dummy + + +if ENABLE_TEST_RUN +AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH; +TESTS = $(check_PROGRAMS) +endif + +endif + + do_subst = $(SED) -e 's,[@]PYTHON[@],$(PYTHON),g' gnunet-qr: gnunet-qr.py.in Makefile @@ -266,10 +311,6 @@ check_PROGRAMS = \ test_os_start_process \ test_common_logging_runtime_loglevels -if ENABLE_TEST_RUN -AM_TESTS_ENVIRONMENT=export GNUNET_PREFIX=$${GNUNET_PREFIX:-@libdir@};export PATH=$${GNUNET_PREFIX:-@prefix@}/bin:$$PATH; -TESTS = $(check_PROGRAMS) -endif # Declare .nc (NO-CONCURRENCY) as a test extension so that we can impart # sequential execution order for them diff --git a/src/util/configuration.c b/src/util/configuration.c index 24b38f933..f61b43d57 100644 --- a/src/util/configuration.c +++ b/src/util/configuration.c @@ -1694,47 +1694,4 @@ GNUNET_CONFIGURATION_load_from (struct GNUNET_CONFIGURATION_Handle *cfg, } -/** - * Load configuration (starts with defaults, then loads - * system-specific configuration). - * - * @param cfg configuration to update - * @param filename name of the configuration file, NULL to load defaults - * @return #GNUNET_OK on success, #GNUNET_SYSERR on error - */ -int -GNUNET_CONFIGURATION_load (struct GNUNET_CONFIGURATION_Handle *cfg, - const char *filename) -{ - char *baseconfig; - char *ipath; - - ipath = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR); - if (NULL == ipath) - return GNUNET_SYSERR; - baseconfig = NULL; - GNUNET_asprintf (&baseconfig, "%s%s", ipath, "config.d"); - GNUNET_free (ipath); - if (GNUNET_SYSERR == - GNUNET_DISK_directory_scan (baseconfig, &parse_configuration_file, cfg)) - { - GNUNET_free (baseconfig); - return GNUNET_SYSERR; /* no configuration at all found */ - } - GNUNET_free (baseconfig); - if ((NULL != filename) && - (GNUNET_OK != GNUNET_CONFIGURATION_parse (cfg, filename))) - { - /* specified configuration not found */ - return GNUNET_SYSERR; - } - if (((GNUNET_YES != - GNUNET_CONFIGURATION_have_value (cfg, "PATHS", "DEFAULTCONFIG"))) && - (filename != NULL)) - GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "DEFAULTCONFIG", - filename); - return GNUNET_OK; -} - - /* end of configuration.c */ diff --git a/src/util/configuration_loader.c b/src/util/configuration_loader.c new file mode 100644 index 000000000..0b7f2865d --- /dev/null +++ b/src/util/configuration_loader.c @@ -0,0 +1,69 @@ +/* + This file is part of GNUnet. + Copyright (C) 2006, 2007, 2008, 2009, 2013 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +/** + * @file src/util/configuration_loader.c + * @brief configuration loading + * @author Christian Grothoff + */ + +/** + * Load configuration (starts with defaults, then loads + * system-specific configuration). + * + * @param cfg configuration to update + * @param filename name of the configuration file, NULL to load defaults + * @return #GNUNET_OK on success, #GNUNET_SYSERR on error + */ +int +GNUNET_CONFIGURATION_load (struct GNUNET_CONFIGURATION_Handle *cfg, + const char *filename) +{ + char *baseconfig; + char *ipath; + + ipath = GNUNET_OS_installation_get_path (GNUNET_OS_IPK_DATADIR); + if (NULL == ipath) + return GNUNET_SYSERR; + baseconfig = NULL; + GNUNET_asprintf (&baseconfig, "%s%s", ipath, "config.d"); + GNUNET_free (ipath); + if (GNUNET_SYSERR == + GNUNET_DISK_directory_scan (baseconfig, &parse_configuration_file, cfg)) + { + GNUNET_free (baseconfig); + return GNUNET_SYSERR; /* no configuration at all found */ + } + GNUNET_free (baseconfig); + if ((NULL != filename) && + (GNUNET_OK != GNUNET_CONFIGURATION_parse (cfg, filename))) + { + /* specified configuration not found */ + return GNUNET_SYSERR; + } + if (((GNUNET_YES != + GNUNET_CONFIGURATION_have_value (cfg, "PATHS", "DEFAULTCONFIG"))) && + (filename != NULL)) + GNUNET_CONFIGURATION_set_value_string (cfg, "PATHS", "DEFAULTCONFIG", + filename); + return GNUNET_OK; +} + +/* end of configuration_loader.c */ diff --git a/src/util/crypto_ecc.c b/src/util/crypto_ecc.c index e6d6bc133..87c787185 100644 --- a/src/util/crypto_ecc.c +++ b/src/util/crypto_ecc.c @@ -657,407 +657,6 @@ GNUNET_CRYPTO_ecdsa_key_get_anonymous () } -/** - * Wait for a short time (we're trying to lock a file or want - * to give another process a shot at finishing a disk write, etc.). - * Sleeps for 100ms (as that should be long enough for virtually all - * modern systems to context switch and allow another process to do - * some 'real' work). - */ -static void -short_wait () -{ - struct GNUNET_TIME_Relative timeout; - - timeout = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 100); - (void) GNUNET_NETWORK_socket_select (NULL, NULL, NULL, timeout); -} - - -/** - * Create a new private key by reading it from a file. If the - * files does not exist, create a new key and write it to the - * file. Caller must free return value. Note that this function - * can not guarantee that another process might not be trying - * the same operation on the same file at the same time. - * If the contents of the file - * are invalid the old file is deleted and a fresh key is - * created. - * - * @param filename name of file to use to store the key - * @return new private key, NULL on error (for example, - * permission denied) - */ -struct GNUNET_CRYPTO_EddsaPrivateKey * -GNUNET_CRYPTO_eddsa_key_create_from_file (const char *filename) -{ - struct GNUNET_CRYPTO_EddsaPrivateKey *priv; - struct GNUNET_DISK_FileHandle *fd; - unsigned int cnt; - int ec; - uint64_t fs; - - if (GNUNET_SYSERR == GNUNET_DISK_directory_create_for_file (filename)) - return NULL; - while (GNUNET_YES != GNUNET_DISK_file_test (filename)) - { - fd = GNUNET_DISK_file_open (filename, - GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE - | GNUNET_DISK_OPEN_FAILIFEXISTS, - GNUNET_DISK_PERM_USER_READ | - GNUNET_DISK_PERM_USER_WRITE); - if (NULL == fd) - { - if (EEXIST == errno) - { - if (GNUNET_YES != GNUNET_DISK_file_test (filename)) - { - /* must exist but not be accessible, fail for good! */ - if (0 != ACCESS (filename, R_OK)) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "access", filename); - else - GNUNET_break (0); /* what is going on!? */ - return NULL; - } - continue; - } - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "open", filename); - return NULL; - } - cnt = 0; - while (GNUNET_YES != - GNUNET_DISK_file_lock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey), - GNUNET_YES)) - { - short_wait (); - if (0 == ++cnt % 10) - { - ec = errno; - LOG (GNUNET_ERROR_TYPE_ERROR, - _("Could not acquire lock on file `%s': %s...\n"), filename, - STRERROR (ec)); - } - } - LOG (GNUNET_ERROR_TYPE_INFO, - _("Creating a new private key. This may take a while.\n")); - priv = GNUNET_CRYPTO_eddsa_key_create (); - GNUNET_assert (NULL != priv); - GNUNET_assert (sizeof (*priv) == - GNUNET_DISK_file_write (fd, priv, sizeof (*priv))); - GNUNET_DISK_file_sync (fd); - if (GNUNET_YES != - GNUNET_DISK_file_unlock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey))) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); - GNUNET_assert (GNUNET_YES == GNUNET_DISK_file_close (fd)); - return priv; - } - /* key file exists already, read it! */ - fd = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ, - GNUNET_DISK_PERM_NONE); - if (NULL == fd) - { - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "open", filename); - return NULL; - } - cnt = 0; - while (1) - { - if (GNUNET_YES != - GNUNET_DISK_file_lock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey), - GNUNET_NO)) - { - if (0 == ++cnt % 60) - { - ec = errno; - LOG (GNUNET_ERROR_TYPE_ERROR, - _("Could not acquire lock on file `%s': %s...\n"), filename, - STRERROR (ec)); - LOG (GNUNET_ERROR_TYPE_ERROR, - _ - ("This may be ok if someone is currently generating a private key.\n")); - } - short_wait (); - continue; - } - if (GNUNET_YES != GNUNET_DISK_file_test (filename)) - { - /* eh, what!? File we opened is now gone!? */ - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "stat", filename); - if (GNUNET_YES != - GNUNET_DISK_file_unlock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey))) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); - GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd)); - - return NULL; - } - if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fs, GNUNET_YES, GNUNET_YES)) - fs = 0; - if (fs < sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey)) - { - /* maybe we got the read lock before the key generating - * process had a chance to get the write lock; give it up! */ - if (GNUNET_YES != - GNUNET_DISK_file_unlock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey))) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); - if (0 == ++cnt % 10) - { - LOG (GNUNET_ERROR_TYPE_ERROR, - _("When trying to read key file `%s' I found %u bytes but I need at least %u.\n"), - filename, (unsigned int) fs, - (unsigned int) sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey)); - LOG (GNUNET_ERROR_TYPE_ERROR, - _("This may be ok if someone is currently generating a key.\n")); - } - short_wait (); /* wait a bit longer! */ - continue; - } - break; - } - fs = sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey); - priv = GNUNET_malloc (fs); - GNUNET_assert (fs == GNUNET_DISK_file_read (fd, priv, fs)); - if (GNUNET_YES != - GNUNET_DISK_file_unlock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey))) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); - GNUNET_assert (GNUNET_YES == GNUNET_DISK_file_close (fd)); - return priv; -} - - -/** - * Create a new private key by reading it from a file. If the - * files does not exist, create a new key and write it to the - * file. Caller must free return value. Note that this function - * can not guarantee that another process might not be trying - * the same operation on the same file at the same time. - * If the contents of the file - * are invalid the old file is deleted and a fresh key is - * created. - * - * @param filename name of file to use to store the key - * @return new private key, NULL on error (for example, - * permission denied) - */ -struct GNUNET_CRYPTO_EcdsaPrivateKey * -GNUNET_CRYPTO_ecdsa_key_create_from_file (const char *filename) -{ - struct GNUNET_CRYPTO_EcdsaPrivateKey *priv; - struct GNUNET_DISK_FileHandle *fd; - unsigned int cnt; - int ec; - uint64_t fs; - - if (GNUNET_SYSERR == GNUNET_DISK_directory_create_for_file (filename)) - return NULL; - while (GNUNET_YES != GNUNET_DISK_file_test (filename)) - { - fd = GNUNET_DISK_file_open (filename, - GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE - | GNUNET_DISK_OPEN_FAILIFEXISTS, - GNUNET_DISK_PERM_USER_READ | - GNUNET_DISK_PERM_USER_WRITE); - if (NULL == fd) - { - if (EEXIST == errno) - { - if (GNUNET_YES != GNUNET_DISK_file_test (filename)) - { - /* must exist but not be accessible, fail for good! */ - if (0 != ACCESS (filename, R_OK)) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "access", filename); - else - GNUNET_break (0); /* what is going on!? */ - return NULL; - } - continue; - } - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "open", filename); - return NULL; - } - cnt = 0; - while (GNUNET_YES != - GNUNET_DISK_file_lock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), - GNUNET_YES)) - { - short_wait (); - if (0 == ++cnt % 10) - { - ec = errno; - LOG (GNUNET_ERROR_TYPE_ERROR, - _("Could not acquire lock on file `%s': %s...\n"), filename, - STRERROR (ec)); - } - } - LOG (GNUNET_ERROR_TYPE_INFO, - _("Creating a new private key. This may take a while.\n")); - priv = GNUNET_CRYPTO_ecdsa_key_create (); - GNUNET_assert (NULL != priv); - GNUNET_assert (sizeof (*priv) == - GNUNET_DISK_file_write (fd, priv, sizeof (*priv))); - GNUNET_DISK_file_sync (fd); - if (GNUNET_YES != - GNUNET_DISK_file_unlock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); - GNUNET_assert (GNUNET_YES == GNUNET_DISK_file_close (fd)); - return priv; - } - /* key file exists already, read it! */ - fd = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ, - GNUNET_DISK_PERM_NONE); - if (NULL == fd) - { - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "open", filename); - return NULL; - } - cnt = 0; - while (1) - { - if (GNUNET_YES != - GNUNET_DISK_file_lock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), - GNUNET_NO)) - { - if (0 == ++cnt % 60) - { - ec = errno; - LOG (GNUNET_ERROR_TYPE_ERROR, - _("Could not acquire lock on file `%s': %s...\n"), filename, - STRERROR (ec)); - LOG (GNUNET_ERROR_TYPE_ERROR, - _ - ("This may be ok if someone is currently generating a private key.\n")); - } - short_wait (); - continue; - } - if (GNUNET_YES != GNUNET_DISK_file_test (filename)) - { - /* eh, what!? File we opened is now gone!? */ - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "stat", filename); - if (GNUNET_YES != - GNUNET_DISK_file_unlock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); - GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd)); - - return NULL; - } - if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fs, GNUNET_YES, GNUNET_YES)) - fs = 0; - if (fs < sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey)) - { - /* maybe we got the read lock before the key generating - * process had a chance to get the write lock; give it up! */ - if (GNUNET_YES != - GNUNET_DISK_file_unlock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); - if (0 == ++cnt % 10) - { - LOG (GNUNET_ERROR_TYPE_ERROR, - _("When trying to read key file `%s' I found %u bytes but I need at least %u.\n"), - filename, (unsigned int) fs, - (unsigned int) sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey)); - LOG (GNUNET_ERROR_TYPE_ERROR, - _("This may be ok if someone is currently generating a key.\n")); - } - short_wait (); /* wait a bit longer! */ - continue; - } - break; - } - fs = sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey); - priv = GNUNET_malloc (fs); - GNUNET_assert (fs == GNUNET_DISK_file_read (fd, priv, fs)); - if (GNUNET_YES != - GNUNET_DISK_file_unlock (fd, 0, - sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); - GNUNET_assert (GNUNET_YES == GNUNET_DISK_file_close (fd)); - return priv; -} - - -/** - * Create a new private key by reading our peer's key from - * the file specified in the configuration. - * - * @param cfg the configuration to use - * @return new private key, NULL on error (for example, - * permission denied) - */ -struct GNUNET_CRYPTO_EddsaPrivateKey * -GNUNET_CRYPTO_eddsa_key_create_from_configuration (const struct GNUNET_CONFIGURATION_Handle *cfg) -{ - struct GNUNET_CRYPTO_EddsaPrivateKey *priv; - char *fn; - - if (GNUNET_OK != - GNUNET_CONFIGURATION_get_value_filename (cfg, "PEER", "PRIVATE_KEY", &fn)) - return NULL; - priv = GNUNET_CRYPTO_eddsa_key_create_from_file (fn); - GNUNET_free (fn); - return priv; -} - - -/** - * Setup a key file for a peer given the name of the - * configuration file (!). This function is used so that - * at a later point code can be certain that reading a - * key is fast (for example in time-dependent testcases). - * - * @param cfg_name name of the configuration file to use - */ -void -GNUNET_CRYPTO_eddsa_setup_key (const char *cfg_name) -{ - struct GNUNET_CONFIGURATION_Handle *cfg; - struct GNUNET_CRYPTO_EddsaPrivateKey *priv; - - cfg = GNUNET_CONFIGURATION_create (); - (void) GNUNET_CONFIGURATION_load (cfg, cfg_name); - priv = GNUNET_CRYPTO_eddsa_key_create_from_configuration (cfg); - if (NULL != priv) - GNUNET_free (priv); - GNUNET_CONFIGURATION_destroy (cfg); -} - - -/** - * Retrieve the identity of the host's peer. - * - * @param cfg configuration to use - * @param dst pointer to where to write the peer identity - * @return #GNUNET_OK on success, #GNUNET_SYSERR if the identity - * could not be retrieved - */ -int -GNUNET_CRYPTO_get_peer_identity (const struct GNUNET_CONFIGURATION_Handle *cfg, - struct GNUNET_PeerIdentity *dst) -{ - struct GNUNET_CRYPTO_EddsaPrivateKey *priv; - - if (NULL == (priv = GNUNET_CRYPTO_eddsa_key_create_from_configuration (cfg))) - { - GNUNET_log (GNUNET_ERROR_TYPE_ERROR, - _("Could not load peer's private key\n")); - return GNUNET_SYSERR; - } - GNUNET_CRYPTO_eddsa_key_get_public (priv, &dst->public_key); - GNUNET_free (priv); - return GNUNET_OK; -} - - /** * Compare two Peer Identities. * diff --git a/src/util/crypto_ecc_setup.c b/src/util/crypto_ecc_setup.c new file mode 100644 index 000000000..32e1acee3 --- /dev/null +++ b/src/util/crypto_ecc_setup.c @@ -0,0 +1,431 @@ +/* + This file is part of GNUnet. + Copyright (C) 2012, 2013, 2015 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ + +/** + * @file util/crypto_ecc_setup.c + * @brief helper function for easy EdDSA key setup + * @author Christian Grothoff + */ +#include "platform.h" +#include +#include "gnunet_util_lib.h" + + +/** + * Wait for a short time (we're trying to lock a file or want + * to give another process a shot at finishing a disk write, etc.). + * Sleeps for 100ms (as that should be long enough for virtually all + * modern systems to context switch and allow another process to do + * some 'real' work). + */ +static void +short_wait () +{ + struct GNUNET_TIME_Relative timeout; + + timeout = GNUNET_TIME_relative_multiply (GNUNET_TIME_UNIT_MILLISECONDS, 100); + (void) GNUNET_NETWORK_socket_select (NULL, NULL, NULL, timeout); +} + + +/** + * Create a new private key by reading it from a file. If the + * files does not exist, create a new key and write it to the + * file. Caller must free return value. Note that this function + * can not guarantee that another process might not be trying + * the same operation on the same file at the same time. + * If the contents of the file + * are invalid the old file is deleted and a fresh key is + * created. + * + * @param filename name of file to use to store the key + * @return new private key, NULL on error (for example, + * permission denied) + */ +struct GNUNET_CRYPTO_EddsaPrivateKey * +GNUNET_CRYPTO_eddsa_key_create_from_file (const char *filename) +{ + struct GNUNET_CRYPTO_EddsaPrivateKey *priv; + struct GNUNET_DISK_FileHandle *fd; + unsigned int cnt; + int ec; + uint64_t fs; + + if (GNUNET_SYSERR == GNUNET_DISK_directory_create_for_file (filename)) + return NULL; + while (GNUNET_YES != GNUNET_DISK_file_test (filename)) + { + fd = GNUNET_DISK_file_open (filename, + GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE + | GNUNET_DISK_OPEN_FAILIFEXISTS, + GNUNET_DISK_PERM_USER_READ | + GNUNET_DISK_PERM_USER_WRITE); + if (NULL == fd) + { + if (EEXIST == errno) + { + if (GNUNET_YES != GNUNET_DISK_file_test (filename)) + { + /* must exist but not be accessible, fail for good! */ + if (0 != ACCESS (filename, R_OK)) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "access", filename); + else + GNUNET_break (0); /* what is going on!? */ + return NULL; + } + continue; + } + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "open", filename); + return NULL; + } + cnt = 0; + while (GNUNET_YES != + GNUNET_DISK_file_lock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey), + GNUNET_YES)) + { + short_wait (); + if (0 == ++cnt % 10) + { + ec = errno; + LOG (GNUNET_ERROR_TYPE_ERROR, + _("Could not acquire lock on file `%s': %s...\n"), filename, + STRERROR (ec)); + } + } + LOG (GNUNET_ERROR_TYPE_INFO, + _("Creating a new private key. This may take a while.\n")); + priv = GNUNET_CRYPTO_eddsa_key_create (); + GNUNET_assert (NULL != priv); + GNUNET_assert (sizeof (*priv) == + GNUNET_DISK_file_write (fd, priv, sizeof (*priv))); + GNUNET_DISK_file_sync (fd); + if (GNUNET_YES != + GNUNET_DISK_file_unlock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey))) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); + GNUNET_assert (GNUNET_YES == GNUNET_DISK_file_close (fd)); + return priv; + } + /* key file exists already, read it! */ + fd = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ, + GNUNET_DISK_PERM_NONE); + if (NULL == fd) + { + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "open", filename); + return NULL; + } + cnt = 0; + while (1) + { + if (GNUNET_YES != + GNUNET_DISK_file_lock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey), + GNUNET_NO)) + { + if (0 == ++cnt % 60) + { + ec = errno; + LOG (GNUNET_ERROR_TYPE_ERROR, + _("Could not acquire lock on file `%s': %s...\n"), filename, + STRERROR (ec)); + LOG (GNUNET_ERROR_TYPE_ERROR, + _ + ("This may be ok if someone is currently generating a private key.\n")); + } + short_wait (); + continue; + } + if (GNUNET_YES != GNUNET_DISK_file_test (filename)) + { + /* eh, what!? File we opened is now gone!? */ + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "stat", filename); + if (GNUNET_YES != + GNUNET_DISK_file_unlock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey))) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); + GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd)); + + return NULL; + } + if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fs, GNUNET_YES, GNUNET_YES)) + fs = 0; + if (fs < sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey)) + { + /* maybe we got the read lock before the key generating + * process had a chance to get the write lock; give it up! */ + if (GNUNET_YES != + GNUNET_DISK_file_unlock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey))) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); + if (0 == ++cnt % 10) + { + LOG (GNUNET_ERROR_TYPE_ERROR, + _("When trying to read key file `%s' I found %u bytes but I need at least %u.\n"), + filename, (unsigned int) fs, + (unsigned int) sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey)); + LOG (GNUNET_ERROR_TYPE_ERROR, + _("This may be ok if someone is currently generating a key.\n")); + } + short_wait (); /* wait a bit longer! */ + continue; + } + break; + } + fs = sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey); + priv = GNUNET_malloc (fs); + GNUNET_assert (fs == GNUNET_DISK_file_read (fd, priv, fs)); + if (GNUNET_YES != + GNUNET_DISK_file_unlock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EddsaPrivateKey))) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); + GNUNET_assert (GNUNET_YES == GNUNET_DISK_file_close (fd)); + return priv; +} + + +/** + * Create a new private key by reading it from a file. If the + * files does not exist, create a new key and write it to the + * file. Caller must free return value. Note that this function + * can not guarantee that another process might not be trying + * the same operation on the same file at the same time. + * If the contents of the file + * are invalid the old file is deleted and a fresh key is + * created. + * + * @param filename name of file to use to store the key + * @return new private key, NULL on error (for example, + * permission denied) + */ +struct GNUNET_CRYPTO_EcdsaPrivateKey * +GNUNET_CRYPTO_ecdsa_key_create_from_file (const char *filename) +{ + struct GNUNET_CRYPTO_EcdsaPrivateKey *priv; + struct GNUNET_DISK_FileHandle *fd; + unsigned int cnt; + int ec; + uint64_t fs; + + if (GNUNET_SYSERR == GNUNET_DISK_directory_create_for_file (filename)) + return NULL; + while (GNUNET_YES != GNUNET_DISK_file_test (filename)) + { + fd = GNUNET_DISK_file_open (filename, + GNUNET_DISK_OPEN_WRITE | GNUNET_DISK_OPEN_CREATE + | GNUNET_DISK_OPEN_FAILIFEXISTS, + GNUNET_DISK_PERM_USER_READ | + GNUNET_DISK_PERM_USER_WRITE); + if (NULL == fd) + { + if (EEXIST == errno) + { + if (GNUNET_YES != GNUNET_DISK_file_test (filename)) + { + /* must exist but not be accessible, fail for good! */ + if (0 != ACCESS (filename, R_OK)) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "access", filename); + else + GNUNET_break (0); /* what is going on!? */ + return NULL; + } + continue; + } + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "open", filename); + return NULL; + } + cnt = 0; + while (GNUNET_YES != + GNUNET_DISK_file_lock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), + GNUNET_YES)) + { + short_wait (); + if (0 == ++cnt % 10) + { + ec = errno; + LOG (GNUNET_ERROR_TYPE_ERROR, + _("Could not acquire lock on file `%s': %s...\n"), filename, + STRERROR (ec)); + } + } + LOG (GNUNET_ERROR_TYPE_INFO, + _("Creating a new private key. This may take a while.\n")); + priv = GNUNET_CRYPTO_ecdsa_key_create (); + GNUNET_assert (NULL != priv); + GNUNET_assert (sizeof (*priv) == + GNUNET_DISK_file_write (fd, priv, sizeof (*priv))); + GNUNET_DISK_file_sync (fd); + if (GNUNET_YES != + GNUNET_DISK_file_unlock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); + GNUNET_assert (GNUNET_YES == GNUNET_DISK_file_close (fd)); + return priv; + } + /* key file exists already, read it! */ + fd = GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ, + GNUNET_DISK_PERM_NONE); + if (NULL == fd) + { + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_ERROR, "open", filename); + return NULL; + } + cnt = 0; + while (1) + { + if (GNUNET_YES != + GNUNET_DISK_file_lock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey), + GNUNET_NO)) + { + if (0 == ++cnt % 60) + { + ec = errno; + LOG (GNUNET_ERROR_TYPE_ERROR, + _("Could not acquire lock on file `%s': %s...\n"), filename, + STRERROR (ec)); + LOG (GNUNET_ERROR_TYPE_ERROR, + _ + ("This may be ok if someone is currently generating a private key.\n")); + } + short_wait (); + continue; + } + if (GNUNET_YES != GNUNET_DISK_file_test (filename)) + { + /* eh, what!? File we opened is now gone!? */ + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "stat", filename); + if (GNUNET_YES != + GNUNET_DISK_file_unlock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); + GNUNET_assert (GNUNET_OK == GNUNET_DISK_file_close (fd)); + + return NULL; + } + if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fs, GNUNET_YES, GNUNET_YES)) + fs = 0; + if (fs < sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey)) + { + /* maybe we got the read lock before the key generating + * process had a chance to get the write lock; give it up! */ + if (GNUNET_YES != + GNUNET_DISK_file_unlock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); + if (0 == ++cnt % 10) + { + LOG (GNUNET_ERROR_TYPE_ERROR, + _("When trying to read key file `%s' I found %u bytes but I need at least %u.\n"), + filename, (unsigned int) fs, + (unsigned int) sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey)); + LOG (GNUNET_ERROR_TYPE_ERROR, + _("This may be ok if someone is currently generating a key.\n")); + } + short_wait (); /* wait a bit longer! */ + continue; + } + break; + } + fs = sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey); + priv = GNUNET_malloc (fs); + GNUNET_assert (fs == GNUNET_DISK_file_read (fd, priv, fs)); + if (GNUNET_YES != + GNUNET_DISK_file_unlock (fd, 0, + sizeof (struct GNUNET_CRYPTO_EcdsaPrivateKey))) + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "fcntl", filename); + GNUNET_assert (GNUNET_YES == GNUNET_DISK_file_close (fd)); + return priv; +} + + +/** + * Create a new private key by reading our peer's key from + * the file specified in the configuration. + * + * @param cfg the configuration to use + * @return new private key, NULL on error (for example, + * permission denied) + */ +struct GNUNET_CRYPTO_EddsaPrivateKey * +GNUNET_CRYPTO_eddsa_key_create_from_configuration (const struct GNUNET_CONFIGURATION_Handle *cfg) +{ + struct GNUNET_CRYPTO_EddsaPrivateKey *priv; + char *fn; + + if (GNUNET_OK != + GNUNET_CONFIGURATION_get_value_filename (cfg, "PEER", "PRIVATE_KEY", &fn)) + return NULL; + priv = GNUNET_CRYPTO_eddsa_key_create_from_file (fn); + GNUNET_free (fn); + return priv; +} + + +/** + * Retrieve the identity of the host's peer. + * + * @param cfg configuration to use + * @param dst pointer to where to write the peer identity + * @return #GNUNET_OK on success, #GNUNET_SYSERR if the identity + * could not be retrieved + */ +int +GNUNET_CRYPTO_get_peer_identity (const struct GNUNET_CONFIGURATION_Handle *cfg, + struct GNUNET_PeerIdentity *dst) +{ + struct GNUNET_CRYPTO_EddsaPrivateKey *priv; + + if (NULL == (priv = GNUNET_CRYPTO_eddsa_key_create_from_configuration (cfg))) + { + GNUNET_log (GNUNET_ERROR_TYPE_ERROR, + _("Could not load peer's private key\n")); + return GNUNET_SYSERR; + } + GNUNET_CRYPTO_eddsa_key_get_public (priv, &dst->public_key); + GNUNET_free (priv); + return GNUNET_OK; +} + + +/** + * Setup a key file for a peer given the name of the + * configuration file (!). This function is used so that + * at a later point code can be certain that reading a + * key is fast (for example in time-dependent testcases). + * + * @param cfg_name name of the configuration file to use + */ +void +GNUNET_CRYPTO_eddsa_setup_key (const char *cfg_name) +{ + struct GNUNET_CONFIGURATION_Handle *cfg; + struct GNUNET_CRYPTO_EddsaPrivateKey *priv; + + cfg = GNUNET_CONFIGURATION_create (); + (void) GNUNET_CONFIGURATION_load (cfg, cfg_name); + priv = GNUNET_CRYPTO_eddsa_key_create_from_configuration (cfg); + if (NULL != priv) + GNUNET_free (priv); + GNUNET_CONFIGURATION_destroy (cfg); +} + +/* end of crypto_ecc_setup.c */ diff --git a/src/util/crypto_hash.c b/src/util/crypto_hash.c index 64f55e14c..9456e343b 100644 --- a/src/util/crypto_hash.c +++ b/src/util/crypto_hash.c @@ -21,7 +21,7 @@ /** * @file util/crypto_hash.c - * @brief SHA-512 GNUNET_CRYPTO_hash related functions + * @brief SHA-512 #GNUNET_CRYPTO_hash() related functions * @author Christian Grothoff */ @@ -49,193 +49,6 @@ GNUNET_CRYPTO_hash (const void *block, } -/** - * Context used when hashing a file. - */ -struct GNUNET_CRYPTO_FileHashContext -{ - - /** - * Function to call upon completion. - */ - GNUNET_CRYPTO_HashCompletedCallback callback; - - /** - * Closure for callback. - */ - void *callback_cls; - - /** - * IO buffer. - */ - unsigned char *buffer; - - /** - * Name of the file we are hashing. - */ - char *filename; - - /** - * File descriptor. - */ - struct GNUNET_DISK_FileHandle *fh; - - /** - * Cummulated hash. - */ - gcry_md_hd_t md; - - /** - * Size of the file. - */ - uint64_t fsize; - - /** - * Current offset. - */ - uint64_t offset; - - /** - * Current task for hashing. - */ - struct GNUNET_SCHEDULER_Task * task; - - /** - * Priority we use. - */ - enum GNUNET_SCHEDULER_Priority priority; - - /** - * Blocksize. - */ - size_t bsize; - -}; - - -/** - * Report result of hash computation to callback - * and free associated resources. - */ -static void -file_hash_finish (struct GNUNET_CRYPTO_FileHashContext *fhc, - const struct GNUNET_HashCode * res) -{ - fhc->callback (fhc->callback_cls, res); - GNUNET_free (fhc->filename); - if (!GNUNET_DISK_handle_invalid (fhc->fh)) - GNUNET_break (GNUNET_OK == GNUNET_DISK_file_close (fhc->fh)); - gcry_md_close (fhc->md); - GNUNET_free (fhc); /* also frees fhc->buffer */ -} - - -/** - * File hashing task. - * - * @param cls closure - * @param tc context - */ -static void -file_hash_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - struct GNUNET_CRYPTO_FileHashContext *fhc = cls; - struct GNUNET_HashCode *res; - size_t delta; - - fhc->task = NULL; - GNUNET_assert (fhc->offset <= fhc->fsize); - delta = fhc->bsize; - if (fhc->fsize - fhc->offset < delta) - delta = fhc->fsize - fhc->offset; - if (delta != GNUNET_DISK_file_read (fhc->fh, fhc->buffer, delta)) - { - LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "read", fhc->filename); - file_hash_finish (fhc, NULL); - return; - } - gcry_md_write (fhc->md, fhc->buffer, delta); - fhc->offset += delta; - if (fhc->offset == fhc->fsize) - { - res = (struct GNUNET_HashCode *) gcry_md_read (fhc->md, GCRY_MD_SHA512); - file_hash_finish (fhc, res); - return; - } - fhc->task = GNUNET_SCHEDULER_add_with_priority (fhc->priority, - &file_hash_task, fhc); -} - - -/** - * Compute the hash of an entire file. - * - * @param priority scheduling priority to use - * @param filename name of file to hash - * @param blocksize number of bytes to process in one task - * @param callback function to call upon completion - * @param callback_cls closure for callback - * @return NULL on (immediate) errror - */ -struct GNUNET_CRYPTO_FileHashContext * -GNUNET_CRYPTO_hash_file (enum GNUNET_SCHEDULER_Priority priority, - const char *filename, size_t blocksize, - GNUNET_CRYPTO_HashCompletedCallback callback, - void *callback_cls) -{ - struct GNUNET_CRYPTO_FileHashContext *fhc; - - GNUNET_assert (blocksize > 0); - fhc = - GNUNET_malloc (sizeof (struct GNUNET_CRYPTO_FileHashContext) + blocksize); - fhc->callback = callback; - fhc->callback_cls = callback_cls; - fhc->buffer = (unsigned char *) &fhc[1]; - fhc->filename = GNUNET_strdup (filename); - if (GPG_ERR_NO_ERROR != gcry_md_open (&fhc->md, GCRY_MD_SHA512, 0)) - { - GNUNET_break (0); - GNUNET_free (fhc); - return NULL; - } - fhc->bsize = blocksize; - if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fhc->fsize, GNUNET_NO, GNUNET_YES)) - { - GNUNET_free (fhc->filename); - GNUNET_free (fhc); - return NULL; - } - fhc->fh = - GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ, - GNUNET_DISK_PERM_NONE); - if (!fhc->fh) - { - GNUNET_free (fhc->filename); - GNUNET_free (fhc); - return NULL; - } - fhc->priority = priority; - fhc->task = - GNUNET_SCHEDULER_add_with_priority (priority, &file_hash_task, fhc); - return fhc; -} - - -/** - * Cancel a file hashing operation. - * - * @param fhc operation to cancel (callback must not yet have been invoked) - */ -void -GNUNET_CRYPTO_hash_file_cancel (struct GNUNET_CRYPTO_FileHashContext *fhc) -{ - GNUNET_SCHEDULER_cancel (fhc->task); - GNUNET_free (fhc->filename); - GNUNET_break (GNUNET_OK == GNUNET_DISK_file_close (fhc->fh)); - GNUNET_free (fhc); -} - - /* ***************** binary-ASCII encoding *************** */ diff --git a/src/util/crypto_hash_file.c b/src/util/crypto_hash_file.c new file mode 100644 index 000000000..2d15fac36 --- /dev/null +++ b/src/util/crypto_hash_file.c @@ -0,0 +1,215 @@ +/* + This file is part of GNUnet. + Copyright (C) 2001-2013 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. + +*/ + +/** + * @file util/crypto_hash_file.c + * @brief incremental hashing of files + * @author Christian Grothoff + */ + + +/** + * Context used when hashing a file. + */ +struct GNUNET_CRYPTO_FileHashContext +{ + + /** + * Function to call upon completion. + */ + GNUNET_CRYPTO_HashCompletedCallback callback; + + /** + * Closure for callback. + */ + void *callback_cls; + + /** + * IO buffer. + */ + unsigned char *buffer; + + /** + * Name of the file we are hashing. + */ + char *filename; + + /** + * File descriptor. + */ + struct GNUNET_DISK_FileHandle *fh; + + /** + * Cummulated hash. + */ + gcry_md_hd_t md; + + /** + * Size of the file. + */ + uint64_t fsize; + + /** + * Current offset. + */ + uint64_t offset; + + /** + * Current task for hashing. + */ + struct GNUNET_SCHEDULER_Task * task; + + /** + * Priority we use. + */ + enum GNUNET_SCHEDULER_Priority priority; + + /** + * Blocksize. + */ + size_t bsize; + +}; + + +/** + * Report result of hash computation to callback + * and free associated resources. + */ +static void +file_hash_finish (struct GNUNET_CRYPTO_FileHashContext *fhc, + const struct GNUNET_HashCode * res) +{ + fhc->callback (fhc->callback_cls, res); + GNUNET_free (fhc->filename); + if (!GNUNET_DISK_handle_invalid (fhc->fh)) + GNUNET_break (GNUNET_OK == GNUNET_DISK_file_close (fhc->fh)); + gcry_md_close (fhc->md); + GNUNET_free (fhc); /* also frees fhc->buffer */ +} + + +/** + * File hashing task. + * + * @param cls closure + * @param tc context + */ +static void +file_hash_task (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + struct GNUNET_CRYPTO_FileHashContext *fhc = cls; + struct GNUNET_HashCode *res; + size_t delta; + + fhc->task = NULL; + GNUNET_assert (fhc->offset <= fhc->fsize); + delta = fhc->bsize; + if (fhc->fsize - fhc->offset < delta) + delta = fhc->fsize - fhc->offset; + if (delta != GNUNET_DISK_file_read (fhc->fh, fhc->buffer, delta)) + { + LOG_STRERROR_FILE (GNUNET_ERROR_TYPE_WARNING, "read", fhc->filename); + file_hash_finish (fhc, NULL); + return; + } + gcry_md_write (fhc->md, fhc->buffer, delta); + fhc->offset += delta; + if (fhc->offset == fhc->fsize) + { + res = (struct GNUNET_HashCode *) gcry_md_read (fhc->md, GCRY_MD_SHA512); + file_hash_finish (fhc, res); + return; + } + fhc->task = GNUNET_SCHEDULER_add_with_priority (fhc->priority, + &file_hash_task, fhc); +} + + +/** + * Compute the hash of an entire file. + * + * @param priority scheduling priority to use + * @param filename name of file to hash + * @param blocksize number of bytes to process in one task + * @param callback function to call upon completion + * @param callback_cls closure for callback + * @return NULL on (immediate) errror + */ +struct GNUNET_CRYPTO_FileHashContext * +GNUNET_CRYPTO_hash_file (enum GNUNET_SCHEDULER_Priority priority, + const char *filename, size_t blocksize, + GNUNET_CRYPTO_HashCompletedCallback callback, + void *callback_cls) +{ + struct GNUNET_CRYPTO_FileHashContext *fhc; + + GNUNET_assert (blocksize > 0); + fhc = + GNUNET_malloc (sizeof (struct GNUNET_CRYPTO_FileHashContext) + blocksize); + fhc->callback = callback; + fhc->callback_cls = callback_cls; + fhc->buffer = (unsigned char *) &fhc[1]; + fhc->filename = GNUNET_strdup (filename); + if (GPG_ERR_NO_ERROR != gcry_md_open (&fhc->md, GCRY_MD_SHA512, 0)) + { + GNUNET_break (0); + GNUNET_free (fhc); + return NULL; + } + fhc->bsize = blocksize; + if (GNUNET_OK != GNUNET_DISK_file_size (filename, &fhc->fsize, GNUNET_NO, GNUNET_YES)) + { + GNUNET_free (fhc->filename); + GNUNET_free (fhc); + return NULL; + } + fhc->fh = + GNUNET_DISK_file_open (filename, GNUNET_DISK_OPEN_READ, + GNUNET_DISK_PERM_NONE); + if (!fhc->fh) + { + GNUNET_free (fhc->filename); + GNUNET_free (fhc); + return NULL; + } + fhc->priority = priority; + fhc->task = + GNUNET_SCHEDULER_add_with_priority (priority, &file_hash_task, fhc); + return fhc; +} + + +/** + * Cancel a file hashing operation. + * + * @param fhc operation to cancel (callback must not yet have been invoked) + */ +void +GNUNET_CRYPTO_hash_file_cancel (struct GNUNET_CRYPTO_FileHashContext *fhc) +{ + GNUNET_SCHEDULER_cancel (fhc->task); + GNUNET_free (fhc->filename); + GNUNET_break (GNUNET_OK == GNUNET_DISK_file_close (fhc->fh)); + GNUNET_free (fhc); +} + +/* end of crypto_hash_file.c */ diff --git a/src/util/disk.c b/src/util/disk.c index da78a1e1d..81413265e 100644 --- a/src/util/disk.c +++ b/src/util/disk.c @@ -1277,145 +1277,6 @@ GNUNET_DISK_directory_scan (const char *dir_name, } -/** - * Opaque handle used for iterating over a directory. - */ -struct GNUNET_DISK_DirectoryIterator -{ - - /** - * Function to call on directory entries. - */ - GNUNET_DISK_DirectoryIteratorCallback callback; - - /** - * Closure for callback. - */ - void *callback_cls; - - /** - * Reference to directory. - */ - DIR *directory; - - /** - * Directory name. - */ - char *dirname; - - /** - * Next filename to process. - */ - char *next_name; - - /** - * Our priority. - */ - enum GNUNET_SCHEDULER_Priority priority; - -}; - - -/** - * Task used by the directory iterator. - */ -static void -directory_iterator_task (void *cls, - const struct GNUNET_SCHEDULER_TaskContext *tc) -{ - struct GNUNET_DISK_DirectoryIterator *iter = cls; - char *name; - - name = iter->next_name; - GNUNET_assert (name != NULL); - iter->next_name = NULL; - iter->callback (iter->callback_cls, iter, name, iter->dirname); - GNUNET_free (name); -} - - -/** - * This function must be called during the DiskIteratorCallback - * (exactly once) to schedule the task to process the next - * filename in the directory (if there is one). - * - * @param iter opaque handle for the iterator - * @param can set to GNUNET_YES to terminate the iteration early - * @return GNUNET_YES if iteration will continue, - * GNUNET_NO if this was the last entry (and iteration is complete), - * GNUNET_SYSERR if abort was YES - */ -int -GNUNET_DISK_directory_iterator_next (struct GNUNET_DISK_DirectoryIterator *iter, - int can) -{ - struct dirent *finfo; - - GNUNET_assert (iter->next_name == NULL); - if (can == GNUNET_YES) - { - CLOSEDIR (iter->directory); - GNUNET_free (iter->dirname); - GNUNET_free (iter); - return GNUNET_SYSERR; - } - while (NULL != (finfo = READDIR (iter->directory))) - { - if ((0 == strcmp (finfo->d_name, ".")) || - (0 == strcmp (finfo->d_name, ".."))) - continue; - GNUNET_asprintf (&iter->next_name, "%s%s%s", iter->dirname, - DIR_SEPARATOR_STR, finfo->d_name); - break; - } - if (finfo == NULL) - { - GNUNET_DISK_directory_iterator_next (iter, GNUNET_YES); - return GNUNET_NO; - } - GNUNET_SCHEDULER_add_with_priority (iter->priority, &directory_iterator_task, - iter); - return GNUNET_YES; -} - - -/** - * Scan a directory for files using the scheduler to run a task for - * each entry. The name of the directory must be expanded first (!). - * If a scheduler does not need to be used, GNUNET_DISK_directory_scan - * may provide a simpler API. - * - * @param prio priority to use - * @param dir_name the name of the directory - * @param callback the method to call for each file - * @param callback_cls closure for callback - * @return GNUNET_YES if directory is not empty and 'callback' - * will be called later, GNUNET_NO otherwise, GNUNET_SYSERR on error. - */ -int -GNUNET_DISK_directory_iterator_start (enum GNUNET_SCHEDULER_Priority prio, - const char *dir_name, - GNUNET_DISK_DirectoryIteratorCallback - callback, void *callback_cls) -{ - struct GNUNET_DISK_DirectoryIterator *di; - - di = GNUNET_new (struct GNUNET_DISK_DirectoryIterator); - di->callback = callback; - di->callback_cls = callback_cls; - di->directory = OPENDIR (dir_name); - if (di->directory == NULL) - { - GNUNET_free (di); - callback (callback_cls, NULL, NULL, NULL); - return GNUNET_SYSERR; - } - di->dirname = GNUNET_strdup (dir_name); - di->priority = prio; - return GNUNET_DISK_directory_iterator_next (di, GNUNET_NO); -} - - /** * Function that removes the given directory by calling * "GNUNET_DISK_directory_remove". diff --git a/src/util/disk_iterator.c b/src/util/disk_iterator.c new file mode 100644 index 000000000..118823df6 --- /dev/null +++ b/src/util/disk_iterator.c @@ -0,0 +1,166 @@ +/* + This file is part of GNUnet. + Copyright (C) 2001--2013 Christian Grothoff (and other contributing authors) + + GNUnet is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published + by the Free Software Foundation; either version 3, or (at your + option) any later version. + + GNUnet is distributed in the hope that it will be useful, but + WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + General Public License for more details. + + You should have received a copy of the GNU General Public License + along with GNUnet; see the file COPYING. If not, write to the + Free Software Foundation, Inc., 59 Temple Place - Suite 330, + Boston, MA 02111-1307, USA. +*/ +/** + * @file util/disk_iterator.c + * @brief asynchronous iteration over a directory + * @author Christian Grothoff + * @author Nils Durner + */ + + +/** + * Opaque handle used for iterating over a directory. + */ +struct GNUNET_DISK_DirectoryIterator +{ + + /** + * Function to call on directory entries. + */ + GNUNET_DISK_DirectoryIteratorCallback callback; + + /** + * Closure for @e callback. + */ + void *callback_cls; + + /** + * Reference to directory. + */ + DIR *directory; + + /** + * Directory name. + */ + char *dirname; + + /** + * Next filename to process. + */ + char *next_name; + + /** + * Our priority. + */ + enum GNUNET_SCHEDULER_Priority priority; + +}; + + +/** + * Task used by the directory iterator. + */ +static void +directory_iterator_task (void *cls, + const struct GNUNET_SCHEDULER_TaskContext *tc) +{ + struct GNUNET_DISK_DirectoryIterator *iter = cls; + char *name; + + name = iter->next_name; + GNUNET_assert (name != NULL); + iter->next_name = NULL; + iter->callback (iter->callback_cls, iter, name, iter->dirname); + GNUNET_free (name); +} + + +/** + * This function must be called during the DiskIteratorCallback + * (exactly once) to schedule the task to process the next + * filename in the directory (if there is one). + * + * @param iter opaque handle for the iterator + * @param can set to #GNUNET_YES to terminate the iteration early + * @return #GNUNET_YES if iteration will continue, + * #GNUNET_NO if this was the last entry (and iteration is complete), + * #GNUNET_SYSERR if abort was YES + */ +int +GNUNET_DISK_directory_iterator_next (struct GNUNET_DISK_DirectoryIterator *iter, + int can) +{ + struct dirent *finfo; + + GNUNET_assert (iter->next_name == NULL); + if (can == GNUNET_YES) + { + CLOSEDIR (iter->directory); + GNUNET_free (iter->dirname); + GNUNET_free (iter); + return GNUNET_SYSERR; + } + while (NULL != (finfo = READDIR (iter->directory))) + { + if ((0 == strcmp (finfo->d_name, ".")) || + (0 == strcmp (finfo->d_name, ".."))) + continue; + GNUNET_asprintf (&iter->next_name, "%s%s%s", iter->dirname, + DIR_SEPARATOR_STR, finfo->d_name); + break; + } + if (finfo == NULL) + { + GNUNET_DISK_directory_iterator_next (iter, GNUNET_YES); + return GNUNET_NO; + } + GNUNET_SCHEDULER_add_with_priority (iter->priority, &directory_iterator_task, + iter); + return GNUNET_YES; +} + + +/** + * Scan a directory for files using the scheduler to run a task for + * each entry. The name of the directory must be expanded first (!). + * If a scheduler does not need to be used, GNUNET_DISK_directory_scan + * may provide a simpler API. + * + * @param prio priority to use + * @param dir_name the name of the directory + * @param callback the method to call for each file + * @param callback_cls closure for @a callback + * @return #GNUNET_YES if directory is not empty and @a callback + * will be called later, #GNUNET_NO otherwise, #GNUNET_SYSERR on error. + */ +int +GNUNET_DISK_directory_iterator_start (enum GNUNET_SCHEDULER_Priority prio, + const char *dir_name, + GNUNET_DISK_DirectoryIteratorCallback + callback, void *callback_cls) +{ + struct GNUNET_DISK_DirectoryIterator *di; + + di = GNUNET_new (struct GNUNET_DISK_DirectoryIterator); + di->callback = callback; + di->callback_cls = callback_cls; + di->directory = OPENDIR (dir_name); + if (di->directory == NULL) + { + GNUNET_free (di); + callback (callback_cls, NULL, NULL, NULL); + return GNUNET_SYSERR; + } + di->dirname = GNUNET_strdup (dir_name); + di->priority = prio; + return GNUNET_DISK_directory_iterator_next (di, GNUNET_NO); +} + +/* end of disk_iterator */ -- cgit v1.2.3