summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChristian Grothoff <christian@grothoff.org>2015-05-28 09:02:31 +0000
committerChristian Grothoff <christian@grothoff.org>2015-05-28 09:02:31 +0000
commit078f7063aef1d4105e71160b8764ab95c2dcdfbe (patch)
tree86d498356ceaaa1ba738f64a158cce2cd0163a15
parent9469cd334f29ca9437e13eb951b53b7690f10be9 (diff)
adding --enable-taler-wallet configure option to build a reduced version of libgnunetutil with only the parts needed by GNU Taler wallets
-rw-r--r--configure.ac18
-rwxr-xr-xcontrib/gnunet-gns-import.sh19
-rw-r--r--po/de.po241
-rw-r--r--po/es.po252
-rw-r--r--po/fr.po233
-rw-r--r--po/sv.po242
-rw-r--r--po/vi.po245
-rw-r--r--po/zh_CN.po239
-rw-r--r--src/Makefile.am8
-rw-r--r--src/include/Makefile.am7
-rw-r--r--src/include/gnunet_util_taler_wallet_lib.h56
-rw-r--r--src/util/Makefile.am65
-rw-r--r--src/util/configuration.c43
-rw-r--r--src/util/configuration_loader.c69
-rw-r--r--src/util/crypto_ecc.c401
-rw-r--r--src/util/crypto_ecc_setup.c431
-rw-r--r--src/util/crypto_hash.c189
-rw-r--r--src/util/crypto_hash_file.c215
-rw-r--r--src/util/disk.c139
-rw-r--r--src/util/disk_iterator.c166
20 files changed, 1825 insertions, 1453 deletions
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 <mario.blaettermann@gmail.com>\n"
"Language-Team: German <translation-team-de@lists.sourceforge.net>\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 <rosen644835@gmail.com>\n"
"Language-Team: Spanish <es@li.org>\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 <lkppo@free.fr>\n"
"Language-Team: French <traduc@traduc.org>\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 <po@danielnylander.se>\n"
"Language-Team: Swedish <tp-sv@listor.tp-sv.se>\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,23 +9516,27 @@ 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 <clytie@riverland.net.au>\n"
"Language-Team: Vietnamese <vi-VN@googlegroups.com>\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,23 +9577,27 @@ 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 <wantinghard@gmail.com>\n"
"Language-Team: Chinese (simplified) <i18n-zh@googlegroups.com>\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,23 +9242,27 @@ 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
@@ -658,407 +658,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.
*
* @param first first peer identity
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 <gcrypt.h>
+#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
@@ -1278,145 +1278,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 */