gnunet-svn
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[GNUnet-SVN] r35825 - in gnunet: . contrib po src src/include src/util


From: gnunet
Subject: [GNUnet-SVN] r35825 - in gnunet: . contrib po src src/include src/util
Date: Thu, 28 May 2015 11:02:32 +0200

Author: grothoff
Date: 2015-05-28 11:02:31 +0200 (Thu, 28 May 2015)
New Revision: 35825

Added:
   gnunet/src/include/gnunet_util_taler_wallet_lib.h
   gnunet/src/util/configuration_loader.c
   gnunet/src/util/crypto_ecc_setup.c
   gnunet/src/util/crypto_hash_file.c
   gnunet/src/util/disk_iterator.c
Modified:
   gnunet/configure.ac
   gnunet/contrib/gnunet-gns-import.sh
   gnunet/po/de.po
   gnunet/po/es.po
   gnunet/po/fr.po
   gnunet/po/sv.po
   gnunet/po/vi.po
   gnunet/po/zh_CN.po
   gnunet/src/Makefile.am
   gnunet/src/include/Makefile.am
   gnunet/src/util/Makefile.am
   gnunet/src/util/configuration.c
   gnunet/src/util/crypto_ecc.c
   gnunet/src/util/crypto_hash.c
   gnunet/src/util/disk.c
Log:
adding --enable-taler-wallet configure option to build a reduced version of 
libgnunetutil with only the parts needed by GNU Taler wallets

Modified: gnunet/configure.ac
===================================================================
--- gnunet/configure.ac 2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/configure.ac 2015-05-28 09:02:31 UTC (rev 35825)
@@ -546,6 +546,21 @@
 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 @@
 # restore LIBS
 LIBS=$SAVE_LIBS
 
+
 # Check for libltdl header (#2999)
 ltdl=0
 AC_MSG_CHECKING(for libltdl)
@@ -618,6 +634,8 @@
 # restore LIBS
 LIBS=$SAVE_LIBS
 
+fi
+
 # test for libunistring
 gl_LIBUNISTRING
 if test $HAVE_LIBUNISTRING != yes; then

Modified: gnunet/contrib/gnunet-gns-import.sh
===================================================================
--- gnunet/contrib/gnunet-gns-import.sh 2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/contrib/gnunet-gns-import.sh 2015-05-28 09:02:31 UTC (rev 35825)
@@ -47,12 +47,29 @@
 # 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)

Modified: gnunet/po/de.po
===================================================================
--- gnunet/po/de.po     2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/po/de.po     2015-05-28 09:02:31 UTC (rev 35825)
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"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 <address@hidden>\n"
 "Language-Team: German <address@hidden>\n"
@@ -643,56 +643,56 @@
 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 @@
 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
+#: 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_heap.c:466
 msgid "Heap datacache running\n"
 msgstr ""
 
-#: 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
@@ -1527,17 +1526,13 @@
 #: 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
@@ -1544,15 +1539,6 @@
 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 @@
 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,11 +2064,12 @@
 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"
@@ -2083,6 +2076,7 @@
 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"
@@ -2089,6 +2083,7 @@
 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"
@@ -2095,6 +2090,7 @@
 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"
@@ -2101,16 +2097,19 @@
 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"
@@ -2117,6 +2116,7 @@
 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 ""
@@ -2123,6 +2123,8 @@
 
 #: 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)"
@@ -2129,55 +2131,63 @@
 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 @@
 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 @@
 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 @@
 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 @@
 #: 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 @@
 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 @@
 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 @@
 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 @@
 "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 @@
 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 @@
 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"

Modified: gnunet/po/es.po
===================================================================
--- gnunet/po/es.po     2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/po/es.po     2015-05-28 09:02:31 UTC (rev 35825)
@@ -7,11 +7,11 @@
 msgstr ""
 "Project-Id-Version: gnunet 0.9.5a\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"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 <address@hidden>\n"
 "Language-Team: Spanish <address@hidden>\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 @@
 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 @@
 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
+#: src/datacache/datacache.c:202
 #, 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
-#, 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 @@
 #: 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 @@
 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 @@
 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 @@
 "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,6 +2187,7 @@
 "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 ""
@@ -2196,6 +2194,7 @@
 "# 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"
@@ -2202,6 +2201,7 @@
 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"
@@ -2208,6 +2208,8 @@
 
 #: 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 @@
 "# 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 @@
 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 @@
 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 @@
 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 @@
 #: 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 @@
 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 @@
 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 @@
 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 @@
 "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 @@
 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 @@
 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"
 

Modified: gnunet/po/fr.po
===================================================================
--- gnunet/po/fr.po     2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/po/fr.po     2015-05-28 09:02:31 UTC (rev 35825)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"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 <address@hidden>\n"
 "Language-Team: French <address@hidden>\n"
@@ -630,53 +630,53 @@
 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 @@
 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
+#: src/datacache/datacache.c:202
 #, c-format
-msgid "No `%s' specified for `%s' in configuration!\n"
-msgstr ""
-
-#: src/datacache/datacache.c:184
-#, 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,17 +1475,13 @@
 #: 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
@@ -1495,15 +1488,6 @@
 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 @@
 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,41 +1993,48 @@
 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"
@@ -2044,6 +2041,7 @@
 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 ""
@@ -2050,6 +2048,8 @@
 
 #: 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)"
@@ -2056,54 +2056,62 @@
 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 @@
 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 @@
 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 @@
 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 @@
 #: 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 @@
 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 @@
 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 @@
 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 @@
 "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 @@
 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 @@
 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 ""

Modified: gnunet/po/sv.po
===================================================================
--- gnunet/po/sv.po     2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/po/sv.po     2015-05-28 09:02:31 UTC (rev 35825)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: GNUnet 0.7.0b\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"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 <address@hidden>\n"
 "Language-Team: Swedish <address@hidden>\n"
@@ -648,58 +648,58 @@
 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 @@
 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
+#: src/datacache/datacache.c:367
+#, fuzzy
+msgid "# requests for random value received"
+msgstr "# byte mottogs via TCP"
+
+#: 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_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
@@ -1558,17 +1557,13 @@
 #: 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
@@ -1575,15 +1570,6 @@
 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 @@
 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,12 +2098,13 @@
 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"
@@ -2118,6 +2111,7 @@
 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"
@@ -2124,6 +2118,7 @@
 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"
@@ -2130,6 +2125,7 @@
 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"
@@ -2136,16 +2132,19 @@
 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"
@@ -2152,6 +2151,7 @@
 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,6 +2159,8 @@
 
 #: 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)"
@@ -2165,55 +2167,63 @@
 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 @@
 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 @@
 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 @@
 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 @@
 #: 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 @@
 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 @@
 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 @@
 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 @@
 "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 @@
 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 @@
 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"
 

Modified: gnunet/po/vi.po
===================================================================
--- gnunet/po/vi.po     2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/po/vi.po     2015-05-28 09:02:31 UTC (rev 35825)
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gnunet 0.8.0a\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"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 <address@hidden>\n"
 "Language-Team: Vietnamese <address@hidden>\n"
@@ -656,58 +656,58 @@
 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 @@
 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
+#: src/datacache/datacache.c:202
 #, c-format
-msgid "No `%s' specified for `%s' in configuration!\n"
-msgstr ""
-
-#: src/datacache/datacache.c:184
-#, 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,17 +1565,13 @@
 #: 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
@@ -1583,15 +1578,6 @@
 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 @@
 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,12 +2120,13 @@
 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"
@@ -2140,6 +2133,7 @@
 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"
@@ -2146,6 +2140,7 @@
 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"
@@ -2152,6 +2147,7 @@
 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"
@@ -2158,16 +2154,19 @@
 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"
@@ -2174,6 +2173,7 @@
 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 ""
@@ -2180,6 +2180,8 @@
 
 #: 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)"
@@ -2186,54 +2188,62 @@
 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 @@
 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 @@
 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 @@
 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 @@
 #: 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 @@
 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 @@
 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 @@
 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 @@
 "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 @@
 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 @@
 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 @@
 #~ 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"
 

Modified: gnunet/po/zh_CN.po
===================================================================
--- gnunet/po/zh_CN.po  2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/po/zh_CN.po  2015-05-28 09:02:31 UTC (rev 35825)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gnunet-0.8.1\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"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 <address@hidden>\n"
 "Language-Team: Chinese (simplified) <address@hidden>\n"
@@ -647,58 +647,58 @@
 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 @@
 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
+#: src/datacache/datacache.c:202
 #, c-format
-msgid "No `%s' specified for `%s' in configuration!\n"
-msgstr ""
-
-#: src/datacache/datacache.c:184
-#, 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,17 +1516,13 @@
 #: 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
@@ -1536,15 +1529,6 @@
 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 @@
 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,42 +2044,49 @@
 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"
@@ -2096,6 +2093,7 @@
 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 ""
@@ -2102,6 +2100,8 @@
 
 #: 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)"
@@ -2108,54 +2108,62 @@
 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 @@
 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 @@
 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 @@
 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 @@
 #: 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 @@
 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 @@
 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 @@
 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 @@
 "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 @@
 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 @@
 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"
 

Modified: gnunet/src/Makefile.am
===================================================================
--- gnunet/src/Makefile.am      2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/src/Makefile.am      2015-05-28 09:02:31 UTC (rev 35825)
@@ -47,7 +47,13 @@
  REST_DIR = rest
 endif
 
+if TALER_ONLY
 SUBDIRS = \
+ include \
+ util
+else
+
+SUBDIRS = \
   include $(INTLEMU_SUBDIRS) \
   util \
   hello \
@@ -95,3 +101,5 @@
   pt \
   integration-tests \
   $(EXP_DIR)
+
+endif

Modified: gnunet/src/include/Makefile.am
===================================================================
--- gnunet/src/include/Makefile.am      2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/src/include/Makefile.am      2015-05-28 09:02:31 UTC (rev 35825)
@@ -13,7 +13,12 @@
   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 \
   gnunet_arm_service.h \
@@ -105,3 +110,5 @@
   gnunet_tun_lib.h \
   gnunet_util_lib.h \
   gnunet_vpn_service.h
+
+endif

Added: gnunet/src/include/gnunet_util_taler_wallet_lib.h
===================================================================
--- gnunet/src/include/gnunet_util_taler_wallet_lib.h                           
(rev 0)
+++ gnunet/src/include/gnunet_util_taler_wallet_lib.h   2015-05-28 09:02:31 UTC 
(rev 35825)
@@ -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

Modified: gnunet/src/util/Makefile.am
===================================================================
--- gnunet/src/util/Makefile.am 2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/src/util/Makefile.am 2015-05-28 09:02:31 UTC (rev 35825)
@@ -46,12 +46,6 @@
 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_LDADD = \
  libgnunetutil.la
 
-lib_LTLIBRARIES = libgnunetutil.la
-
 libgnunetutil_la_SOURCES = \
   bandwidth.c \
   bio.c \
@@ -73,6 +65,7 @@
   common_endian.c \
   common_logging.c \
   configuration.c \
+  configuration_loader.c \
   connection.c \
   container_bloomfilter.c \
   container_heap.c \
@@ -83,7 +76,9 @@
   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 @@
   crypto_random.c \
   crypto_rsa.c \
   disk.c \
+  disk_iterator.c \
   disk.h \
   getopt.c \
   getopt_helpers.c \
@@ -127,11 +123,46 @@
   $(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 @@
  $(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:address@hidden@};export 
PATH=$${GNUNET_PREFIX:address@hidden@}/bin:$$PATH;
+TESTS = $(check_PROGRAMS)
+endif
+
+endif
+
+
 do_subst = $(SED) -e 's,address@hidden@],$(PYTHON),g'
 
 gnunet-qr: gnunet-qr.py.in Makefile
@@ -266,10 +311,6 @@
  test_os_start_process \
  test_common_logging_runtime_loglevels
 
-if ENABLE_TEST_RUN
-AM_TESTS_ENVIRONMENT=export 
GNUNET_PREFIX=$${GNUNET_PREFIX:address@hidden@};export 
PATH=$${GNUNET_PREFIX:address@hidden@}/bin:$$PATH;
-TESTS = $(check_PROGRAMS)
-endif
 
 # Declare .nc (NO-CONCURRENCY) as a test extension so that we can impart
 # sequential execution order for them

Modified: gnunet/src/util/configuration.c
===================================================================
--- gnunet/src/util/configuration.c     2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/src/util/configuration.c     2015-05-28 09:02:31 UTC (rev 35825)
@@ -1694,47 +1694,4 @@
 }
 
 
-/**
- * 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 */

Added: gnunet/src/util/configuration_loader.c
===================================================================
--- gnunet/src/util/configuration_loader.c                              (rev 0)
+++ gnunet/src/util/configuration_loader.c      2015-05-28 09:02:31 UTC (rev 
35825)
@@ -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 */

Modified: gnunet/src/util/crypto_ecc.c
===================================================================
--- gnunet/src/util/crypto_ecc.c        2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/src/util/crypto_ecc.c        2015-05-28 09:02:31 UTC (rev 35825)
@@ -658,407 +658,6 @@
 
 
 /**
- * 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

Added: gnunet/src/util/crypto_ecc_setup.c
===================================================================
--- gnunet/src/util/crypto_ecc_setup.c                          (rev 0)
+++ gnunet/src/util/crypto_ecc_setup.c  2015-05-28 09:02:31 UTC (rev 35825)
@@ -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 */

Modified: gnunet/src/util/crypto_hash.c
===================================================================
--- gnunet/src/util/crypto_hash.c       2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/src/util/crypto_hash.c       2015-05-28 09:02:31 UTC (rev 35825)
@@ -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 @@
 }
 
 
-/**
- * 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 *************** */
 
 

Added: gnunet/src/util/crypto_hash_file.c
===================================================================
--- gnunet/src/util/crypto_hash_file.c                          (rev 0)
+++ gnunet/src/util/crypto_hash_file.c  2015-05-28 09:02:31 UTC (rev 35825)
@@ -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 */

Modified: gnunet/src/util/disk.c
===================================================================
--- gnunet/src/util/disk.c      2015-05-27 07:42:45 UTC (rev 35824)
+++ gnunet/src/util/disk.c      2015-05-28 09:02:31 UTC (rev 35825)
@@ -1278,145 +1278,6 @@
 
 
 /**
- * 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".
  *

Added: gnunet/src/util/disk_iterator.c
===================================================================
--- gnunet/src/util/disk_iterator.c                             (rev 0)
+++ gnunet/src/util/disk_iterator.c     2015-05-28 09:02:31 UTC (rev 35825)
@@ -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 */




reply via email to

[Prev in Thread] Current Thread [Next in Thread]