gnunet-svn
[Top][All Lists]
Advanced

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

[GNUnet-SVN] r36367 - in gnunet: po src/consensus src/set


From: gnunet
Subject: [GNUnet-SVN] r36367 - in gnunet: po src/consensus src/set
Date: Tue, 22 Sep 2015 03:20:28 +0200

Author: dold
Date: 2015-09-22 03:20:28 +0200 (Tue, 22 Sep 2015)
New Revision: 36367

Modified:
   gnunet/po/POTFILES.in
   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/consensus/consensus_protocol.h
   gnunet/src/consensus/gnunet-service-consensus.c
   gnunet/src/consensus/test_consensus.conf
   gnunet/src/set/gnunet-service-set.c
   gnunet/src/set/gnunet-service-set.h
Log:
work on CONSENSUS and SET

- byzantine consensus work in progress
- fix SET generation handling


Modified: gnunet/po/POTFILES.in
===================================================================
--- gnunet/po/POTFILES.in       2015-09-16 13:18:29 UTC (rev 36366)
+++ gnunet/po/POTFILES.in       2015-09-22 01:20:28 UTC (rev 36367)
@@ -211,6 +211,7 @@
 src/namecache/gnunet-namecache.c
 src/namecache/gnunet-service-namecache.c
 src/namecache/namecache_api.c
+src/namecache/plugin_namecache_flat.c
 src/namecache/plugin_namecache_postgres.c
 src/namecache/plugin_namecache_sqlite.c
 src/namestore/gnunet-namestore.c
@@ -218,6 +219,7 @@
 src/namestore/gnunet-service-namestore.c
 src/namestore/namestore_api.c
 src/namestore/namestore_api_monitor.c
+src/namestore/plugin_namestore_flat.c
 src/namestore/plugin_namestore_postgres.c
 src/namestore/plugin_namestore_sqlite.c
 src/namestore/plugin_rest_namestore.c
@@ -225,6 +227,7 @@
 src/nat/gnunet-helper-nat-client-windows.c
 src/nat/gnunet-helper-nat-server.c
 src/nat/gnunet-helper-nat-server-windows.c
+src/nat/gnunet-nat.c
 src/nat/gnunet-nat-server.c
 src/nat/nat_auto.c
 src/nat/nat.c
@@ -281,6 +284,8 @@
 src/scalarproduct/gnunet-scalarproduct.c
 src/scalarproduct/gnunet-service-scalarproduct_alice.c
 src/scalarproduct/gnunet-service-scalarproduct_bob.c
+src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c
+src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c
 src/scalarproduct/scalarproduct_api.c
 src/secretsharing/gnunet-secretsharing-profiler.c
 src/secretsharing/gnunet-service-secretsharing.c

Modified: gnunet/po/de.po
===================================================================
--- gnunet/po/de.po     2015-09-16 13:18:29 UTC (rev 36366)
+++ gnunet/po/de.po     2015-09-22 01:20:28 UTC (rev 36367)
@@ -10,7 +10,7 @@
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2015-07-24 15:20+0200\n"
+"POT-Creation-Date: 2015-09-06 02:18+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"
@@ -352,13 +352,11 @@
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3290
-#: src/ats-tests/gnunet-solver-eval.c:918
+#: src/ats/gnunet-ats-solver-eval.c:3290 src/ats-tests/gnunet-solver-eval.c:918
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3293
-#: src/ats-tests/gnunet-solver-eval.c:921
+#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:921
 #: src/ats-tests/gnunet-solver-eval.c:924
 msgid "experiment to use"
 msgstr ""
@@ -638,56 +636,56 @@
 msgid "Print information about ATS state"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/cadet/gnunet-cadet.c:376
+#: src/cadet/gnunet-cadet.c:458
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "Ungültiger Parameter: `%s'\n"
 
-#: src/cadet/gnunet-cadet.c:643
+#: src/cadet/gnunet-cadet.c:735
 #, fuzzy, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr "Ungültige Antwort auf `%s'.\n"
 
-#: src/cadet/gnunet-cadet.c:686
+#: src/cadet/gnunet-cadet.c:778
 #, fuzzy, c-format
 msgid "Invalid tunnel owner `%s'\n"
 msgstr "Ungültiger Parameter: `%s'\n"
 
-#: src/cadet/gnunet-cadet.c:752
-msgid "You must NOT give a TARGETwhen using 'request all' options\n"
+#: src/cadet/gnunet-cadet.c:844
+msgid "You must NOT give a TARGET when using 'request all' options\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:849
+#: src/cadet/gnunet-cadet.c:941
 msgid "provide information about a particular connection"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:852
+#: src/cadet/gnunet-cadet.c:944
 msgid "activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:855
+#: src/cadet/gnunet-cadet.c:947
 msgid "dump debug information to STDERR"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:861
+#: src/cadet/gnunet-cadet.c:953
 msgid "port to listen to (default; 0)"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:864
+#: src/cadet/gnunet-cadet.c:956
 #, fuzzy
 msgid "provide information about a patricular peer"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/cadet/gnunet-cadet.c:867
+#: src/cadet/gnunet-cadet.c:959
 #, fuzzy
 msgid "provide information about all peers"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
 
-#: src/cadet/gnunet-cadet.c:870
+#: src/cadet/gnunet-cadet.c:962
 msgid "provide information about a particular tunnel"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:873
+#: src/cadet/gnunet-cadet.c:965
 #, fuzzy
 msgid "provide information about all tunnels"
 msgstr "Informationen über andere GNUnet Knoten ausgeben."
@@ -1410,20 +1408,20 @@
 msgid "# PAYLOAD dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:177
+#: src/core/gnunet-service-core_neighbours.c:178
 msgid "# sessions terminated by transport disconnect"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:193
-#: src/core/gnunet-service-core_neighbours.c:355
+#: src/core/gnunet-service-core_neighbours.c:194
+#: src/core/gnunet-service-core_neighbours.c:362
 msgid "# neighbour entries allocated"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:264
+#: src/core/gnunet-service-core_neighbours.c:270
 msgid "# encrypted bytes given to transport"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:438
+#: src/core/gnunet-service-core_neighbours.c:448
 #, fuzzy, c-format
 msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n"
 msgstr "Ungültige `%s' Nachricht von Knoten `%s' empfangen.\n"
@@ -1470,7 +1468,7 @@
 msgstr ""
 
 #: src/datacache/datacache.c:119 src/datacache/datacache.c:294
-#: src/datastore/gnunet-service-datastore.c:853
+#: src/datastore/gnunet-service-datastore.c:866
 msgid "# bytes stored"
 msgstr "# gespeicherte Bytes"
 
@@ -1546,38 +1544,38 @@
 msgid "Failed to transmit request to drop database.\n"
 msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
 
-#: src/datastore/datastore_api.c:394
+#: src/datastore/datastore_api.c:395
 msgid "# queue entry timeouts"
 msgstr ""
 
-#: src/datastore/datastore_api.c:443
+#: src/datastore/datastore_api.c:450
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:471
+#: src/datastore/datastore_api.c:478
 #, fuzzy
 msgid "# queue entries created"
 msgstr "# PING Nachrichten erstellt"
 
-#: src/datastore/datastore_api.c:491
+#: src/datastore/datastore_api.c:498
 msgid "# Requests dropped from datastore queue"
 msgstr ""
 
-#: src/datastore/datastore_api.c:533
+#: src/datastore/datastore_api.c:540
 msgid "# datastore connections (re)created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:621
+#: src/datastore/datastore_api.c:628
 #, fuzzy
 msgid "# transmission request failures"
 msgstr "# Klartext PONG Nachrichten empfangen"
 
-#: src/datastore/datastore_api.c:645
+#: src/datastore/datastore_api.c:652
 #, fuzzy
 msgid "# bytes sent to datastore"
 msgstr "# bytes in der Datenbank"
 
-#: src/datastore/datastore_api.c:787
+#: src/datastore/datastore_api.c:794
 #, fuzzy
 msgid "Failed to receive status response from database."
 msgstr ""
@@ -1584,55 +1582,55 @@
 "\n"
 "Fehler beim Empfangen der Antwort von gnunetd.\n"
 
-#: src/datastore/datastore_api.c:801
+#: src/datastore/datastore_api.c:808
 msgid "Error reading response from datastore service"
 msgstr ""
 
-#: src/datastore/datastore_api.c:813 src/datastore/datastore_api.c:819
+#: src/datastore/datastore_api.c:820 src/datastore/datastore_api.c:826
 msgid "Invalid error message received from datastore service"
 msgstr "Ungültige Fehlermeldung vom Datenspeicherdienst empfangen"
 
-#: src/datastore/datastore_api.c:823
+#: src/datastore/datastore_api.c:830
 msgid "# status messages received"
 msgstr "# empfangene Statusmeldungen"
 
-#: src/datastore/datastore_api.c:893
+#: src/datastore/datastore_api.c:909
 #, fuzzy
 msgid "# PUT requests executed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/datastore/datastore_api.c:959
+#: src/datastore/datastore_api.c:975
 #, fuzzy
 msgid "# RESERVE requests executed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/datastore/datastore_api.c:1020
+#: src/datastore/datastore_api.c:1036
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1080
+#: src/datastore/datastore_api.c:1096
 #, fuzzy
 msgid "# UPDATE requests executed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/datastore/datastore_api.c:1144
+#: src/datastore/datastore_api.c:1160
 #, fuzzy
 msgid "# REMOVE requests executed"
 msgstr "# dht Anfragen weitergeleitet"
 
-#: src/datastore/datastore_api.c:1248
+#: src/datastore/datastore_api.c:1264
 msgid "# Results received"
 msgstr "# empfangene Ergebnisse"
 
-#: src/datastore/datastore_api.c:1315
+#: src/datastore/datastore_api.c:1331
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1378
+#: src/datastore/datastore_api.c:1394
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1447
+#: src/datastore/datastore_api.c:1463
 msgid "# GET requests executed"
 msgstr "# ausgeführte GET-Anfragen"
 
@@ -1657,29 +1655,29 @@
 msgid "Manipulate GNUnet datastore"
 msgstr "sqlite Datenspeicher"
 
-#: src/datastore/gnunet-service-datastore.c:365
+#: src/datastore/gnunet-service-datastore.c:372
 msgid "# bytes expired"
 msgstr "# abgelaufene Bytes"
 
-#: src/datastore/gnunet-service-datastore.c:439
+#: src/datastore/gnunet-service-datastore.c:447
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:497
+#: src/datastore/gnunet-service-datastore.c:505
 #: src/gns/gnunet-gns-helper-service-w32.c:223
 msgid "Transmission to client failed!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:528
+#: src/datastore/gnunet-service-datastore.c:536
 #: src/gns/gnunet-gns-helper-service-w32.c:262
 msgid "Shutdown in progress, aborting transmission.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:643
+#: src/datastore/gnunet-service-datastore.c:652
 msgid "# results found"
 msgstr "# gefundene Ergebnisse"
 
-#: src/datastore/gnunet-service-datastore.c:686
+#: src/datastore/gnunet-service-datastore.c:696
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy `%s' request for "
@@ -1686,7 +1684,7 @@
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:697
+#: src/datastore/gnunet-service-datastore.c:707
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
@@ -1693,134 +1691,134 @@
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:701
+#: src/datastore/gnunet-service-datastore.c:711
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:707
+#: src/datastore/gnunet-service-datastore.c:717
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:712
-#: src/datastore/gnunet-service-datastore.c:767
-#: src/datastore/gnunet-service-datastore.c:1019
-#: src/datastore/gnunet-service-datastore.c:1597
+#: src/datastore/gnunet-service-datastore.c:723
+#: src/datastore/gnunet-service-datastore.c:779
+#: src/datastore/gnunet-service-datastore.c:1035
+#: src/datastore/gnunet-service-datastore.c:1630
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:780
+#: src/datastore/gnunet-service-datastore.c:793
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:865
+#: src/datastore/gnunet-service-datastore.c:879
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1071
+#: src/datastore/gnunet-service-datastore.c:1088
 #, fuzzy
 msgid "# GET requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:1083
+#: src/datastore/gnunet-service-datastore.c:1101
 msgid "# requests filtered by bloomfilter"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1121
+#: src/datastore/gnunet-service-datastore.c:1141
 #, fuzzy
 msgid "# UPDATE requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:1149
+#: src/datastore/gnunet-service-datastore.c:1170
 #, fuzzy
 msgid "# GET REPLICATION requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:1182
+#: src/datastore/gnunet-service-datastore.c:1204
 #, fuzzy
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1233
 msgid "Content not found"
 msgstr "Kein Inhalt gefunden"
 
-#: src/datastore/gnunet-service-datastore.c:1215
+#: src/datastore/gnunet-service-datastore.c:1244
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1247
+#: src/datastore/gnunet-service-datastore.c:1277
 #, fuzzy
 msgid "# REMOVE requests received"
 msgstr "# Client Trace-Anfragen empfangen"
 
-#: src/datastore/gnunet-service-datastore.c:1291
+#: src/datastore/gnunet-service-datastore.c:1321
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1296
+#: src/datastore/gnunet-service-datastore.c:1326
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1349
+#: src/datastore/gnunet-service-datastore.c:1379
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1360
+#: src/datastore/gnunet-service-datastore.c:1390
 #, fuzzy, c-format
 msgid "Failed to load datastore plugin for `%s'\n"
 msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
 
-#: src/datastore/gnunet-service-datastore.c:1429
-#: src/datastore/gnunet-service-datastore.c:1490
+#: src/datastore/gnunet-service-datastore.c:1459
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1477
+#: src/datastore/gnunet-service-datastore.c:1509
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1487
+#: src/datastore/gnunet-service-datastore.c:1519
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1625
-#: src/datastore/gnunet-service-datastore.c:1636
+#: src/datastore/gnunet-service-datastore.c:1661
+#: src/datastore/gnunet-service-datastore.c:1673
 #, 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:1630
+#: src/datastore/gnunet-service-datastore.c:1667
 #, fuzzy, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr "# bytes erlaubt in der Datenbank"
 
-#: src/datastore/gnunet-service-datastore.c:1641
+#: src/datastore/gnunet-service-datastore.c:1679
 msgid "# quota"
 msgstr "# Kontingent"
 
-#: src/datastore/gnunet-service-datastore.c:1643
+#: src/datastore/gnunet-service-datastore.c:1681
 msgid "# cache size"
 msgstr "# Zwischenspeichergröße"
 
-#: src/datastore/gnunet-service-datastore.c:1656
+#: src/datastore/gnunet-service-datastore.c:1696
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1674
-#: src/datastore/gnunet-service-datastore.c:1690
+#: src/datastore/gnunet-service-datastore.c:1714
+#: src/datastore/gnunet-service-datastore.c:1730
 #, fuzzy, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr "Datei wurde als `%s' gespeichert.\n"
 
-#: src/datastore/gnunet-service-datastore.c:1720
+#: src/datastore/gnunet-service-datastore.c:1760
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "Bloomfilter konnte nicht initialisiert werden.\n"
 
@@ -1879,7 +1877,7 @@
 #: src/namecache/plugin_namecache_sqlite.c:193
 #: src/namestore/plugin_namestore_sqlite.c:204
 #: src/peerstore/plugin_peerstore_sqlite.c:479
-#: src/psycstore/plugin_psycstore_sqlite.c:324
+#: src/psycstore/plugin_psycstore_sqlite.c:325
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "SQLite-Datenbank konnte nicht initialisiert werden: %s.\n"
@@ -1955,9 +1953,9 @@
 msgstr ""
 
 #: src/dht/gnunet-dht-get.c:204 src/dht/gnunet-dht-monitor.c:271
-#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:755
-#: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:961
-#: src/fs/gnunet-search.c:307 src/fs/gnunet-unindex.c:168
+#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:794
+#: src/fs/gnunet-download.c:327 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-search.c:306 src/fs/gnunet-unindex.c:167
 #: src/nse/gnunet-nse-profiler.c:873
 msgid "be verbose (print progress information)"
 msgstr ""
@@ -1974,8 +1972,7 @@
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1393
-#: src/testbed/gnunet-testbed-profiler.c:267
+#: src/dht/gnunet_dht_profiler.c:1393 src/testbed/gnunet-testbed-profiler.c:267
 #, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
@@ -2193,8 +2190,7 @@
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84
-#: src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
@@ -3063,7 +3059,7 @@
 msgid "Failed to connect to datastore."
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden."
 
-#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:443
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:441
 #, fuzzy, c-format
 msgid "Publishing failed: %s"
 msgstr ""
@@ -3070,49 +3066,49 @@
 "\n"
 "Fehler beim Uploaden der Datei: %s\n"
 
-#: src/fs/fs_publish.c:709 src/fs/fs_publish.c:726 src/fs/fs_publish.c:765
-#: src/fs/fs_publish.c:786 src/fs/fs_publish.c:810 src/fs/fs_publish.c:1060
+#: src/fs/fs_publish.c:707 src/fs/fs_publish.c:724 src/fs/fs_publish.c:763
+#: src/fs/fs_publish.c:784 src/fs/fs_publish.c:808 src/fs/fs_publish.c:1058
 #, fuzzy, c-format
 msgid "Can not index file `%s': %s.  Will try to insert instead.\n"
 msgstr "Indizieren der Datei `%s' schlug fehl.  Versuch Datei einzufügen...\n"
 
-#: src/fs/fs_publish.c:711
+#: src/fs/fs_publish.c:709
 msgid "timeout on index-start request to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:723
+#: src/fs/fs_publish.c:721
 #, fuzzy
 msgid "unknown error"
 msgstr "Unbekannter Fehler"
 
-#: src/fs/fs_publish.c:767
+#: src/fs/fs_publish.c:765
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:787
+#: src/fs/fs_publish.c:785
 msgid "filename too long"
 msgstr "Dateiname zu lang"
 
-#: src/fs/fs_publish.c:812
+#: src/fs/fs_publish.c:810
 #, fuzzy
 msgid "could not connect to `fs' service"
 msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
 
-#: src/fs/fs_publish.c:835
+#: src/fs/fs_publish.c:833
 #, fuzzy, c-format
 msgid "Failed to get file identifiers for `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/fs/fs_publish.c:899 src/fs/fs_publish.c:940
+#: src/fs/fs_publish.c:897 src/fs/fs_publish.c:938
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1014
+#: src/fs/fs_publish.c:1012
 #, fuzzy, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr "`%s' schlug fehl bei %s:%d mit dem Fehler: `%s'.\n"
 
-#: src/fs/fs_publish.c:1022
+#: src/fs/fs_publish.c:1020
 #, fuzzy, c-format
 msgid "Recursive upload failed: %s"
 msgstr ""
@@ -3119,22 +3115,22 @@
 "\n"
 "Fehler beim Uploaden der Datei: %s\n"
 
-#: src/fs/fs_publish.c:1062
+#: src/fs/fs_publish.c:1060
 #, fuzzy
 msgid "needs to be an actual file"
 msgstr "`%s' ist keine normale Datei.\n"
 
-#: src/fs/fs_publish.c:1301
+#: src/fs/fs_publish.c:1299
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "Verbindung fehlgeschlagen: %s\n"
 
-#: src/fs/fs_publish.c:1392
+#: src/fs/fs_publish.c:1390
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:219
+#: src/fs/fs_publish_ksk.c:224
 #, fuzzy
 msgid "Could not connect to datastore."
 msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
@@ -3315,48 +3311,48 @@
 msgid "Failed to save state to file %s\n"
 msgstr "Fehler beim Aktualisieren der Daten des Moduls `%s'\n"
 
-#: src/fs/gnunet-auto-share.c:402
+#: src/fs/gnunet-auto-share.c:415
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:490
+#: src/fs/gnunet-auto-share.c:504
 #, c-format
 msgid "Publishing `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:499
+#: src/fs/gnunet-auto-share.c:514
 #, fuzzy, c-format
 msgid "Failed to run `%s'\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/fs/gnunet-auto-share.c:688
+#: src/fs/gnunet-auto-share.c:725
 #, fuzzy, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
 msgstr "Sie dürfen nur eine Datei zum Deindizieren angeben.\n"
 
-#: src/fs/gnunet-auto-share.c:739 src/fs/gnunet-publish.c:908
+#: src/fs/gnunet-auto-share.c:778 src/fs/gnunet-publish.c:901
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr "Gewünschten Grad LEVEL an Sender-Anonymität festlegen"
 
-#: src/fs/gnunet-auto-share.c:743 src/fs/gnunet-publish.c:912
+#: src/fs/gnunet-auto-share.c:782 src/fs/gnunet-publish.c:905
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:746 src/fs/gnunet-publish.c:915
+#: src/fs/gnunet-auto-share.c:785 src/fs/gnunet-publish.c:908
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:749 src/fs/gnunet-publish.c:939
+#: src/fs/gnunet-auto-share.c:788 src/fs/gnunet-publish.c:932
 msgid "specify the priority of the content"
 msgstr "Die Priorität des Inhalts angeben"
 
-#: src/fs/gnunet-auto-share.c:752 src/fs/gnunet-publish.c:946
+#: src/fs/gnunet-auto-share.c:791 src/fs/gnunet-publish.c:939
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:772
+#: src/fs/gnunet-auto-share.c:815
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr ""
 
@@ -3426,65 +3422,65 @@
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr "Dateien aus dem GNUnet herunterladen."
 
-#: src/fs/gnunet-download.c:209 src/fs/gnunet-publish.c:319
-#: src/fs/gnunet-search.c:206 src/fs/gnunet-unindex.c:108
+#: src/fs/gnunet-download.c:208 src/fs/gnunet-publish.c:297
+#: src/fs/gnunet-search.c:205 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:234
+#: src/fs/gnunet-download.c:233
 #, fuzzy
 msgid "You need to specify a URI argument.\n"
 msgstr "Sie müssen einen Empfänger angeben!\n"
 
-#: src/fs/gnunet-download.c:240 src/fs/gnunet-publish.c:734
+#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:728
 #, fuzzy, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr "Datei `%s' hat URI: %s\n"
 
-#: src/fs/gnunet-download.c:247
+#: src/fs/gnunet-download.c:246
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:254
+#: src/fs/gnunet-download.c:253
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:268 src/fs/gnunet-publish.c:878
-#: src/fs/gnunet-search.c:256 src/fs/gnunet-unindex.c:140
+#: src/fs/gnunet-download.c:267 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:255 src/fs/gnunet-unindex.c:139
 #, fuzzy, c-format
 msgid "Could not initialize `%s' subsystem.\n"
 msgstr "`%s' Dienst konnte nicht initialisiert werden.\n"
 
-#: src/fs/gnunet-download.c:305 src/fs/gnunet-search.c:295
+#: src/fs/gnunet-download.c:304 src/fs/gnunet-search.c:294
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr "Den Grad LEVEL der gewünschten Empfänger-Anonymität setzen"
 
-#: src/fs/gnunet-download.c:308
+#: src/fs/gnunet-download.c:307
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:311 src/fs/gnunet-search.c:298
+#: src/fs/gnunet-download.c:310 src/fs/gnunet-search.c:297
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:314
+#: src/fs/gnunet-download.c:313
 msgid "write the file to FILENAME"
 msgstr "Die Datei in DATEINAME schreiben"
 
-#: src/fs/gnunet-download.c:318
+#: src/fs/gnunet-download.c:317
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:322
+#: src/fs/gnunet-download.c:321
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:325
+#: src/fs/gnunet-download.c:324
 msgid "download a GNUnet directory recursively"
 msgstr "Das GNUnet-Verzeichnis rekursiv herunterladen"
 
-#: src/fs/gnunet-download.c:339
+#: src/fs/gnunet-download.c:338
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
@@ -3515,137 +3511,137 @@
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:238 src/fs/gnunet-publish.c:250
+#: src/fs/gnunet-publish.c:221 src/fs/gnunet-publish.c:233
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:241
 #, fuzzy, c-format
 msgid "Error publishing: %s.\n"
 msgstr "Fehler beim Download: %s\n"
 
-#: src/fs/gnunet-publish.c:268
+#: src/fs/gnunet-publish.c:248
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:253
 #, fuzzy, c-format
 msgid "URI is `%s'.\n"
 msgstr "Ich bin Peer `%s'.\n"
 
-#: src/fs/gnunet-publish.c:281
+#: src/fs/gnunet-publish.c:261
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr "Ich bin Peer `%s'.\n"
 
-#: src/fs/gnunet-publish.c:299
+#: src/fs/gnunet-publish.c:277
 #, fuzzy
 msgid "Starting cleanup after abort\n"
 msgstr "`%s' Startvorgang abgeschlossen.\n"
 
-#: src/fs/gnunet-publish.c:306
+#: src/fs/gnunet-publish.c:284
 #, fuzzy
 msgid "Cleanup after abort completed.\n"
 msgstr "`%s' Startvorgang abgeschlossen.\n"
 
-#: src/fs/gnunet-publish.c:312
+#: src/fs/gnunet-publish.c:290
 #, fuzzy
 msgid "Cleanup after abort failed.\n"
 msgstr "`%s' Startvorgang abgeschlossen.\n"
 
-#: src/fs/gnunet-publish.c:447
+#: src/fs/gnunet-publish.c:432
 #, fuzzy, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr "Daten des Moduls `%s' werden aktualisiert\n"
 
-#: src/fs/gnunet-publish.c:449
+#: src/fs/gnunet-publish.c:437
 #, fuzzy, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "Schlüsselwörter für Datei `%s':\n"
 
-#: src/fs/gnunet-publish.c:594
+#: src/fs/gnunet-publish.c:591
 #, fuzzy
 msgid "Could not publish\n"
 msgstr "`%s': Kann nicht senden.\n"
 
-#: src/fs/gnunet-publish.c:619
+#: src/fs/gnunet-publish.c:616
 #, fuzzy
 msgid "Could not start publishing.\n"
 msgstr "Anwendung `%s' konnte nicht initialisiert werden.\n"
 
-#: src/fs/gnunet-publish.c:653
+#: src/fs/gnunet-publish.c:650
 #, fuzzy, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr "==> Verzeichnis `%s':\n"
 
-#: src/fs/gnunet-publish.c:657
+#: src/fs/gnunet-publish.c:654
 #, fuzzy, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "Binde Konfigurationsdatei `%s' ein\n"
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:660
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:670
+#: src/fs/gnunet-publish.c:667
 #, fuzzy
 msgid "Preprocessing complete.\n"
 msgstr "GNUnet wurde erfolgreich heruntergefahren.\n"
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:672
 #, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:682
+#: src/fs/gnunet-publish.c:679
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:691
+#: src/fs/gnunet-publish.c:688
 #, fuzzy
 msgid "Internal error scanning directory.\n"
 msgstr "=\tFehler beim Lesen des Verzeichnisses.\n"
 
-#: src/fs/gnunet-publish.c:723
+#: src/fs/gnunet-publish.c:716
 #, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:755
+#: src/fs/gnunet-publish.c:749
 #, fuzzy, c-format
 msgid "Failed to access `%s': %s\n"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/fs/gnunet-publish.c:769
+#: src/fs/gnunet-publish.c:763
 msgid ""
 "Failed to start meta directory scanner.  Is gnunet-helper-publish-fs "
 "installed?\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:825
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:832
+#: src/fs/gnunet-publish.c:826
 #, c-format
 msgid "You must specify one and only one filename for insertion.\n"
 msgstr "Sie dürfen nur eine einzige Datei zum Einfügen angeben.\n"
 
-#: src/fs/gnunet-publish.c:838
+#: src/fs/gnunet-publish.c:832
 #, fuzzy, c-format
 msgid "You must NOT specify an URI and a filename.\n"
 msgstr "Sie müssen einen Empfänger angeben!\n"
 
-#: src/fs/gnunet-publish.c:846 src/vpn/gnunet-vpn.c:209
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:209
 #, fuzzy, c-format
 msgid "Option `%s' is required when using option `%s'.\n"
 msgstr "Option `%s' macht keinen Sinn ohne die Option `%s'.\n"
 
-#: src/fs/gnunet-publish.c:857 src/fs/gnunet-publish.c:865
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
 #: src/transport/gnunet-transport.c:1928 src/transport/gnunet-transport.c:1958
 #: src/transport/gnunet-transport.c:1989
 #, c-format
@@ -3652,7 +3648,7 @@
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr "Die Option »%s« ergibt keinen Sinn ohne die Option »%s«.\n"
 
-#: src/fs/gnunet-publish.c:919
+#: src/fs/gnunet-publish.c:912
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
@@ -3660,7 +3656,7 @@
 "Liste der extrahierten Schlüsselworte, die verwendet werden würden, "
 "ausgeben, aber keinen Upload durchführen"
 
-#: src/fs/gnunet-publish.c:923
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "add an additional keyword for the top-level file or directory (this option "
 "can be specified multiple times)"
@@ -3668,13 +3664,13 @@
 "Ein zusätzliches Schlüsselwort für die Datei oder das Verzeichnis auf der "
 "obersten Ebene hinzufügen (diese Option kann mehrmals angegeben werden)"
 
-#: src/fs/gnunet-publish.c:927
+#: src/fs/gnunet-publish.c:920
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr ""
 "Die Meta-Daten des angegebenen Typs TYPE auf den angegebenen Wert VALUE "
 "setzen"
 
-#: src/fs/gnunet-publish.c:930
+#: src/fs/gnunet-publish.c:923
 msgid ""
 "do not index, perform full insertion (stores entire file in encrypted form "
 "in GNUnet database)"
@@ -3682,7 +3678,7 @@
 "Nicht indizieren, sondern komplett einfügen (speichert die gesamte Datei in "
 "verschlüsselter Form in der GNUnet-Datenbank)"
 
-#: src/fs/gnunet-publish.c:935
+#: src/fs/gnunet-publish.c:928
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
@@ -3690,19 +3686,19 @@
 "ID einer aktualisierten Version angeben, die in der Zukunft veröffentlicht "
 "werden soll. (nur für das Einfügen in Namensräume)"
 
-#: src/fs/gnunet-publish.c:943
+#: src/fs/gnunet-publish.c:936
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 "Die Datei unter dem Pseudonym NAME veröffentlichen (platziert die Datei in "
 "einem Namensraum)"
 
-#: src/fs/gnunet-publish.c:949
+#: src/fs/gnunet-publish.c:942
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:953
+#: src/fs/gnunet-publish.c:946
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
@@ -3709,13 +3705,13 @@
 "Die ID dieser Version der Veröffentlichung setzen (nur für das Einfügen in "
 "Namensräume)"
 
-#: src/fs/gnunet-publish.c:957
+#: src/fs/gnunet-publish.c:950
 msgid ""
 "URI to be published (can be used instead of passing a file to add keywords "
 "to the file with the respective URI)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:973
+#: src/fs/gnunet-publish.c:966
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
@@ -3729,28 +3725,28 @@
 msgid "Error searching: %s.\n"
 msgstr "Fehler beim Verlassen der DHT.\n"
 
-#: src/fs/gnunet-search.c:246
+#: src/fs/gnunet-search.c:245
 msgid "Could not create keyword URI from arguments.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:270
+#: src/fs/gnunet-search.c:269
 #, fuzzy
 msgid "Could not start searching.\n"
 msgstr "Fehler beim Starten der Collection.\n"
 
-#: src/fs/gnunet-search.c:301
+#: src/fs/gnunet-search.c:300
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
-#: src/fs/gnunet-search.c:304
+#: src/fs/gnunet-search.c:303
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:311
+#: src/fs/gnunet-search.c:310
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
-#: src/fs/gnunet-search.c:322
+#: src/fs/gnunet-search.c:321
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr ""
 
@@ -4138,17 +4134,17 @@
 msgid "Unindexing done.\n"
 msgstr "Dateien deindizieren."
 
-#: src/fs/gnunet-unindex.c:130
+#: src/fs/gnunet-unindex.c:129
 #, fuzzy, c-format
 msgid "You must specify one and only one filename for unindexing.\n"
 msgstr "Sie dürfen nur eine Datei zum Deindizieren angeben.\n"
 
-#: src/fs/gnunet-unindex.c:147
+#: src/fs/gnunet-unindex.c:146
 #, fuzzy
 msgid "Could not start unindex operation.\n"
 msgstr "Auf die Namespace Informationen konnte nicht zugegriffen werden.\n"
 
-#: src/fs/gnunet-unindex.c:179
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
@@ -4552,68 +4548,68 @@
 msgid "GNS REST API initialized\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:291
+#: src/gnsrecord/plugin_gnsrecord_dns.c:359
 #, c-format
 msgid "Unable to parse IPv4 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:312
+#: src/gnsrecord/plugin_gnsrecord_dns.c:380
 #, fuzzy, c-format
 msgid "Failed to serialize NS record with value `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:334
+#: src/gnsrecord/plugin_gnsrecord_dns.c:402
 #, c-format
 msgid "Failed to serialize CNAME record with value `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:418
+#: src/gnsrecord/plugin_gnsrecord_dns.c:486
 #, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:455
+#: src/gnsrecord/plugin_gnsrecord_dns.c:522
 #, fuzzy, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:474
+#: src/gnsrecord/plugin_gnsrecord_dns.c:541
 #, c-format
 msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:497
+#: src/gnsrecord/plugin_gnsrecord_dns.c:564
 #, fuzzy, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:520
+#: src/gnsrecord/plugin_gnsrecord_dns.c:587
 #, fuzzy, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:535
+#: src/gnsrecord/plugin_gnsrecord_dns.c:602
 #, fuzzy, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:562
+#: src/gnsrecord/plugin_gnsrecord_dns.c:629
 #, fuzzy, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr "Dateiformat fehlerhaft (kein GNUnet Verzeichnis?)\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:578
+#: src/gnsrecord/plugin_gnsrecord_dns.c:645
 #, fuzzy, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr "Fehler beim Lesen der Freunde-Liste von `%s'\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:595
+#: src/gnsrecord/plugin_gnsrecord_dns.c:662
 #, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:619
-#: src/gnsrecord/plugin_gnsrecord_dns.c:635
+#: src/gnsrecord/plugin_gnsrecord_dns.c:686
+#: src/gnsrecord/plugin_gnsrecord_dns.c:702
 #, fuzzy, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei `%s':"
@@ -5132,6 +5128,31 @@
 msgid "Namecache failed to cache block"
 msgstr ""
 
+#: src/namecache/plugin_namecache_flat.c:119
+#: src/namecache/plugin_namecache_flat.c:236
+#: src/namestore/plugin_namestore_flat.c:184
+#: src/namestore/plugin_namestore_flat.c:352
+#, fuzzy, c-format
+msgid "Unable to initialize file: %s.\n"
+msgstr "SQLite-Datenbank konnte nicht initialisiert werden: %s.\n"
+
+#: src/namecache/plugin_namecache_flat.c:130
+#: src/namestore/plugin_namestore_flat.c:195
+#, fuzzy, c-format
+msgid "Unable to get filesize: %s.\n"
+msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
+
+#: src/namecache/plugin_namecache_flat.c:142
+#: src/namestore/plugin_namestore_flat.c:207
+#, fuzzy, c-format
+msgid "Unable to read file: %s.\n"
+msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
+
+#: src/namecache/plugin_namecache_flat.c:391
+#, fuzzy
+msgid "flat plugin running\n"
+msgstr "Sqlite-Datenbank läuft\n"
+
 #: src/namecache/plugin_namecache_postgres.c:89
 #: src/namestore/plugin_namestore_postgres.c:96
 #, fuzzy
@@ -5230,8 +5251,7 @@
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:868
-#: src/peerinfo-tool/gnunet-peerinfo.c:817
+#: src/namestore/gnunet-namestore.c:868 src/peerinfo-tool/gnunet-peerinfo.c:817
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "Ungültiger Parameter: `%s'\n"
@@ -5389,11 +5409,20 @@
 msgid "Namestore failed to store record\n"
 msgstr ""
 
+#: src/namestore/plugin_namestore_flat.c:650
+#, fuzzy
+msgid "flat file database running\n"
+msgstr "Sqlite-Datenbank läuft\n"
+
 #: src/namestore/plugin_rest_namestore.c:1023
 #, fuzzy
 msgid "Namestore REST API initialized\n"
 msgstr " Verbindung fehlgeschlagen\n"
 
+#: src/nat/gnunet-nat.c:160
+msgid "GNUnet NAT traversal autoconfigure daemon"
+msgstr ""
+
 #: src/nat/gnunet-nat-server.c:279
 #, c-format
 msgid "Please pass valid port number as the first argument! (got `%s')\n"
@@ -5403,54 +5432,59 @@
 msgid "GNUnet NAT traversal test helper daemon"
 msgstr ""
 
-#: src/nat/nat_auto.c:179
+#: src/nat/nat_auto.c:394
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:180
+#: src/nat/nat_auto.c:395
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:201
+#: src/nat/nat_auto.c:416
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:249
+#: src/nat/nat_auto.c:448
 #, fuzzy, c-format
 msgid "Detected external IP `%s'\n"
 msgstr "Ungültiger RPC `%s' empfangen.\n"
 
-#: src/nat/nat_auto.c:327
+#: src/nat/nat_auto.c:579
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:343
+#: src/nat/nat_auto.c:597
 #, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:406
+#: src/nat/nat_auto.c:669 src/nat/nat_test.c:364
+#, fuzzy
+msgid "Failed to connect to `gnunet-nat-server'\n"
+msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
+
+#: src/nat/nat_auto.c:715
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:407
+#: src/nat/nat_auto.c:716
 #, fuzzy
 msgid "upnpc not found\n"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nat/nat_auto.c:437
+#: src/nat/nat_auto.c:748
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:445 src/nat/nat_auto.c:490
+#: src/nat/nat_auto.c:756 src/nat/nat_auto.c:804
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:453 src/nat/nat_auto.c:498
+#: src/nat/nat_auto.c:764 src/nat/nat_auto.c:812
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:483
+#: src/nat/nat_auto.c:797
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
@@ -5464,26 +5498,26 @@
 msgid "Failed to start %s\n"
 msgstr "Fehler beim Starten der Collection.\n"
 
-#: src/nat/nat.c:1286
+#: src/nat/nat.c:1305
 msgid "Error while running upnp client:\n"
 msgstr ""
 
-#: src/nat/nat.c:1356
+#: src/nat/nat.c:1375
 #, fuzzy, c-format
 msgid "Failed to run upnp client for port %u\n"
 msgstr "SQLite Datenbank konnte nicht initialisiert werden.\n"
 
-#: src/nat/nat.c:1498
+#: src/nat/nat.c:1517
 msgid "malformed"
 msgstr ""
 
-#: src/nat/nat.c:1552
+#: src/nat/nat.c:1571
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP \n"
 msgstr ""
 
-#: src/nat/nat.c:1680 src/nat/nat.c:1692
+#: src/nat/nat.c:1700 src/nat/nat.c:1712
 #, c-format
 msgid ""
 "Configuration requires `%s', but binary is not installed properly (SUID bit "
@@ -5490,93 +5524,93 @@
 "not set).  Option disabled.\n"
 msgstr ""
 
-#: src/nat/nat.c:1830
+#: src/nat/nat.c:1855
 msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
 msgstr ""
 
-#: src/nat/nat.c:1846
+#: src/nat/nat.c:1871
 #, c-format
 msgid "Running gnunet-helper-nat-client %s %s %u\n"
 msgstr ""
 
-#: src/nat/nat.c:1931
+#: src/nat/nat.c:1958
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat/nat.c:1933
+#: src/nat/nat.c:1960
 msgid "Internal Failure (IPC, ...)"
 msgstr ""
 
-#: src/nat/nat.c:1935
+#: src/nat/nat.c:1962
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat/nat.c:1937
+#: src/nat/nat.c:1964
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat/nat.c:1939
+#: src/nat/nat.c:1966
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat/nat.c:1941
+#: src/nat/nat.c:1968
 #, fuzzy
 msgid "`upnpc` command not found"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nat/nat.c:1943
+#: src/nat/nat.c:1970
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/nat/nat.c:1945
+#: src/nat/nat.c:1972
 msgid "`upnpc' command took too long, process killed"
 msgstr ""
 
-#: src/nat/nat.c:1947
+#: src/nat/nat.c:1974
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat/nat.c:1949
+#: src/nat/nat.c:1976
 msgid "`external-ip' command not found"
 msgstr ""
 
-#: src/nat/nat.c:1951
+#: src/nat/nat.c:1978
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
 
-#: src/nat/nat.c:1953
+#: src/nat/nat.c:1980
 #, fuzzy
 msgid "`external-ip' command output invalid"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nat/nat.c:1955
+#: src/nat/nat.c:1982
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat/nat.c:1957
+#: src/nat/nat.c:1984
 #, fuzzy
 msgid "Could not determine interface with internal/local network address"
 msgstr "Öffentliche IP-Adresse konnte nicht ermittelt werden.\n"
 
-#: src/nat/nat.c:1959
+#: src/nat/nat.c:1986
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat/nat.c:1961
+#: src/nat/nat.c:1988
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat/nat.c:1963
+#: src/nat/nat.c:1990
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat/nat.c:1965
+#: src/nat/nat.c:1992
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat/nat.c:1967
+#: src/nat/nat.c:1994
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
@@ -5590,17 +5624,12 @@
 msgid "`upnpc' command not found\n"
 msgstr "Kommando `%s' wurde nicht gefunden!\n"
 
-#: src/nat/nat_test.c:360
-#, fuzzy
-msgid "Failed to connect to `gnunet-nat-server'\n"
-msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
-
-#: src/nat/nat_test.c:462
+#: src/nat/nat_test.c:467
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat/nat_test.c:497
+#: src/nat/nat_test.c:502
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
@@ -5641,8 +5670,8 @@
 msgid "Measure quality and performance of the NSE service."
 msgstr ""
 
-#: src/nse/gnunet-service-nse.c:1537
-#: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260
+#: src/nse/gnunet-service-nse.c:1541
+#: src/revocation/gnunet-service-revocation.c:848 src/util/gnunet-scrypt.c:260
 msgid "Value is too large.\n"
 msgstr ""
 
@@ -5902,7 +5931,7 @@
 msgstr ""
 
 #: src/peerstore/plugin_peerstore_sqlite.c:398
-#: src/psycstore/plugin_psycstore_sqlite.c:281
+#: src/psycstore/plugin_psycstore_sqlite.c:282
 #, c-format
 msgid ""
 "Error executing SQL query: %s\n"
@@ -5910,7 +5939,7 @@
 msgstr ""
 
 #: src/peerstore/plugin_peerstore_sqlite.c:422
-#: src/psycstore/plugin_psycstore_sqlite.c:258
+#: src/psycstore/plugin_psycstore_sqlite.c:259
 #, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
@@ -5967,43 +5996,48 @@
 msgid "Failed to get master counters!\n"
 msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:645
-#, fuzzy
-msgid "Failed to begin modifying state!\n"
+#: src/psycstore/gnunet-service-psycstore.c:657
+#, fuzzy, c-format
+msgid "Failed to begin modifying state: %d\n"
 msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:656
+#: src/psycstore/gnunet-service-psycstore.c:667
+#, fuzzy, c-format
+msgid "Failed to modify state: %d\n"
+msgstr "Es konnte keine Verbindung mit gnunetd hergestellt werden.\n"
+
+#: src/psycstore/gnunet-service-psycstore.c:675
 #, fuzzy
 msgid "Failed to end modifying state!\n"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:686
+#: src/psycstore/gnunet-service-psycstore.c:706
 msgid "Tried to set invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:700
+#: src/psycstore/gnunet-service-psycstore.c:720
 #, fuzzy
 msgid "Failed to begin synchronizing state!\n"
 msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:717
+#: src/psycstore/gnunet-service-psycstore.c:737
 #, fuzzy
 msgid "Failed to end synchronizing state!\n"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:737
-#: src/psycstore/gnunet-service-psycstore.c:756
+#: src/psycstore/gnunet-service-psycstore.c:757
+#: src/psycstore/gnunet-service-psycstore.c:776
 #, fuzzy
 msgid "Failed to reset state!\n"
 msgstr "Zustellung der Nachricht `%s' fehlgeschlagen.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:779
-#: src/psycstore/gnunet-service-psycstore.c:830
+#: src/psycstore/gnunet-service-psycstore.c:799
+#: src/psycstore/gnunet-service-psycstore.c:850
 msgid "Tried to get invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:806
-#: src/psycstore/gnunet-service-psycstore.c:845
+#: src/psycstore/gnunet-service-psycstore.c:826
+#: src/psycstore/gnunet-service-psycstore.c:865
 #, fuzzy
 msgid "Failed to get state variable!\n"
 msgstr "Statistiken über den Netzwerkverkehr konnten nicht ermittelt werden.\n"
@@ -6013,7 +6047,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:1907
+#: src/psycstore/plugin_psycstore_sqlite.c:1923
 #, fuzzy
 msgid "SQLite database running\n"
 msgstr "SQL Datenbank beschädigt, Ergebnis wird ignoriert.\n"
@@ -6275,36 +6309,36 @@
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:427
+#: src/revocation/gnunet-service-revocation.c:481
 msgid "# unsupported revocations received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:436
+#: src/revocation/gnunet-service-revocation.c:490
 #, fuzzy
 msgid "# revocation messages received via set union"
 msgstr "# verschlüsselter PING Nachrichten empfangen"
 
-#: src/revocation/gnunet-service-revocation.c:441
+#: src/revocation/gnunet-service-revocation.c:495
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:445
+#: src/revocation/gnunet-service-revocation.c:499
 #, fuzzy
 msgid "# revocation set unions failed"
 msgstr " Verbindung fehlgeschlagen\n"
 
-#: src/revocation/gnunet-service-revocation.c:454
+#: src/revocation/gnunet-service-revocation.c:508
 #, fuzzy
 msgid "# revocation set unions completed"
 msgstr "# Klartext PONG Nachrichten empfangen"
 
-#: src/revocation/gnunet-service-revocation.c:493
-#: src/revocation/gnunet-service-revocation.c:759
+#: src/revocation/gnunet-service-revocation.c:547
+#: src/revocation/gnunet-service-revocation.c:780
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:851
+#: src/revocation/gnunet-service-revocation.c:872
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "Knoten `%s' konnte nicht in der Routing Tabelle gefunden werden!\n"
@@ -6368,7 +6402,9 @@
 msgstr ""
 
 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1419
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1564
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1549
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1193
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1252
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr " Verbindung fehlgeschlagen\n"
@@ -6634,7 +6670,7 @@
 msgid "Error loading sensor from file: %s\n"
 msgstr "Fehler beim Lesen von »%s«: %s\n"
 
-#: src/set/gnunet-service-set.c:1531
+#: src/set/gnunet-service-set.c:1960
 #, fuzzy
 msgid "Could not connect to cadet service\n"
 msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
@@ -6759,7 +6795,7 @@
 msgid "Could not save some persistent statistics\n"
 msgstr ""
 
-#: src/statistics/statistics_api.c:1090
+#: src/statistics/statistics_api.c:1088
 msgid ""
 "Failed to receive acknowledgement from statistics service, some statistics "
 "might have been lost!\n"
@@ -8359,7 +8395,7 @@
 msgid "# sessions allocated"
 msgstr "# Sitzungsschlüssel akzeptiert"
 
-#: src/transport/transport_api.c:812
+#: src/transport/transport_api.c:827
 #, fuzzy, c-format
 msgid "Received unexpected message of type %u in %s:%u\n"
 msgstr "Es wurde eine unbekannte Testbed Nachricht des Typs %u empfangen.\n"
@@ -8403,17 +8439,17 @@
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:263 src/util/client.c:889 src/util/service.c:621
+#: src/util/client.c:264 src/util/client.c:894 src/util/service.c:621
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/util/client.c:267 src/util/client.c:894 src/util/service.c:625
+#: src/util/client.c:268 src/util/client.c:899 src/util/service.c:625
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
-#: src/util/client.c:362
+#: src/util/client.c:367
 #, c-format
 msgid ""
 "Could not determine valid hostname and port for service `%s' from "
@@ -8420,17 +8456,17 @@
 "configuration.\n"
 msgstr ""
 
-#: src/util/client.c:370
+#: src/util/client.c:375
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/client.c:1039
+#: src/util/client.c:1044
 #, fuzzy, c-format
 msgid "Could not connect to service `%s', configuration broken.\n"
 msgstr "Verbindung zu gnunetd konnte nicht hergestellt werden.\n"
 
-#: src/util/client.c:1051
+#: src/util/client.c:1056
 #, fuzzy, c-format
 msgid "Failure to transmit request to service `%s'\n"
 msgstr "Fehler beim Senden einer `%s' Anfrage an den SMTP Server.\n"
@@ -8516,12 +8552,12 @@
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/connection.c:424
+#: src/util/connection.c:429
 #, c-format
 msgid "Access denied to `%s'\n"
 msgstr "Zugriff verweigert auf »%s«\n"
 
-#: src/util/connection.c:441
+#: src/util/connection.c:446
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
@@ -8589,17 +8625,17 @@
 msgstr ""
 "libgcrypt hat nicht die erwartete Version (Version %s wird vorausgesetzt).\n"
 
-#: src/util/crypto_rsa.c:981
+#: src/util/crypto_rsa.c:999
 #, fuzzy, c-format
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr "RSA Signaturüberprüfung fehlgeschlagen bei %s:%d: %s\n"
 
-#: src/util/disk.c:1221
+#: src/util/disk.c:1226
 #, fuzzy, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr "`%s' erwartet, dass `%s' ein Verzeichnis ist!\n"
 
-#: src/util/disk.c:1444 src/util/service.c:1328
+#: src/util/disk.c:1449 src/util/service.c:1328
 #, fuzzy, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Fehler beim Speichern der Konfigurationsdatei: `%s': %s.\n"
@@ -9100,6 +9136,16 @@
 msgid "signal (%d, %p) returned %d.\n"
 msgstr "Aufruf von `%s' gibt %d zurück.\n"
 
+#: src/util/socks.c:592
+#, c-format
+msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
+msgstr ""
+
+#: src/util/socks.c:605
+#, c-format
+msgid "Attempting to proxy service `%s' to invalid port %d or hostname `%s'.\n"
+msgstr ""
+
 #: src/util/strings.c:146
 msgid "b"
 msgstr "b"

Modified: gnunet/po/es.po
===================================================================
--- gnunet/po/es.po     2015-09-16 13:18:29 UTC (rev 36366)
+++ gnunet/po/es.po     2015-09-22 01:20:28 UTC (rev 36367)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gnunet 0.9.5a\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2015-07-24 15:20+0200\n"
+"POT-Creation-Date: 2015-09-06 02:18+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"
@@ -378,14 +378,12 @@
 "No hay configurada una cuota de salida para la red «%s», asignando el ancho "
 "de banda predeterminado %llu\n"
 
-#: src/ats/gnunet-ats-solver-eval.c:3290
-#: src/ats-tests/gnunet-solver-eval.c:918
+#: src/ats/gnunet-ats-solver-eval.c:3290 src/ats-tests/gnunet-solver-eval.c:918
 #, fuzzy
 msgid "solver to use"
 msgstr "valor a establecer"
 
-#: src/ats/gnunet-ats-solver-eval.c:3293
-#: src/ats-tests/gnunet-solver-eval.c:921
+#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:921
 #: src/ats-tests/gnunet-solver-eval.c:924
 msgid "experiment to use"
 msgstr ""
@@ -694,57 +692,57 @@
 msgid "Print information about ATS state"
 msgstr "Imprime información acerca del estado del ATS"
 
-#: src/cadet/gnunet-cadet.c:376
+#: src/cadet/gnunet-cadet.c:458
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/cadet/gnunet-cadet.c:643
+#: src/cadet/gnunet-cadet.c:735
 #, fuzzy, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr "URI no válida: «%s»\n"
 
-#: src/cadet/gnunet-cadet.c:686
+#: src/cadet/gnunet-cadet.c:778
 #, fuzzy, c-format
 msgid "Invalid tunnel owner `%s'\n"
 msgstr "Formato de tiempo no válido «%s»\n"
 
-#: src/cadet/gnunet-cadet.c:752
-msgid "You must NOT give a TARGETwhen using 'request all' options\n"
+#: src/cadet/gnunet-cadet.c:844
+msgid "You must NOT give a TARGET when using 'request all' options\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:849
+#: src/cadet/gnunet-cadet.c:941
 #, fuzzy
 msgid "provide information about a particular connection"
 msgstr "proveer información acerca de un túnel en particular"
 
-#: src/cadet/gnunet-cadet.c:852
+#: src/cadet/gnunet-cadet.c:944
 msgid "activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:855
+#: src/cadet/gnunet-cadet.c:947
 msgid "dump debug information to STDERR"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:861
+#: src/cadet/gnunet-cadet.c:953
 msgid "port to listen to (default; 0)"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:864
+#: src/cadet/gnunet-cadet.c:956
 #, fuzzy
 msgid "provide information about a patricular peer"
 msgstr "proveer información acerca de un túnel en particular"
 
-#: src/cadet/gnunet-cadet.c:867
+#: src/cadet/gnunet-cadet.c:959
 #, fuzzy
 msgid "provide information about all peers"
 msgstr "proveer información acerca de un túnel en particular"
 
-#: src/cadet/gnunet-cadet.c:870
+#: src/cadet/gnunet-cadet.c:962
 msgid "provide information about a particular tunnel"
 msgstr "proveer información acerca de un túnel en particular"
 
-#: src/cadet/gnunet-cadet.c:873
+#: src/cadet/gnunet-cadet.c:965
 #, fuzzy
 msgid "provide information about all tunnels"
 msgstr "proveer información acerca de un túnel en particular"
@@ -1481,20 +1479,20 @@
 msgid "# PAYLOAD dropped (out of order)"
 msgstr "# bytes omitidos (fuera de secuencia)"
 
-#: src/core/gnunet-service-core_neighbours.c:177
+#: src/core/gnunet-service-core_neighbours.c:178
 msgid "# sessions terminated by transport disconnect"
 msgstr "# sesiones terminadas por desconexión de transporte"
 
-#: src/core/gnunet-service-core_neighbours.c:193
-#: src/core/gnunet-service-core_neighbours.c:355
+#: src/core/gnunet-service-core_neighbours.c:194
+#: src/core/gnunet-service-core_neighbours.c:362
 msgid "# neighbour entries allocated"
 msgstr "# entradas de vecinos alojadas"
 
-#: src/core/gnunet-service-core_neighbours.c:264
+#: src/core/gnunet-service-core_neighbours.c:270
 msgid "# encrypted bytes given to transport"
 msgstr "# bytes cifrados dados al transporte"
 
-#: src/core/gnunet-service-core_neighbours.c:438
+#: src/core/gnunet-service-core_neighbours.c:448
 #, c-format
 msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n"
 msgstr "Mensaje no soportado del tipo %u (%u bytes) recibido del par «%s»\n"
@@ -1539,7 +1537,7 @@
 msgstr "# actualizaciones de mi mapa de tipos"
 
 #: src/datacache/datacache.c:119 src/datacache/datacache.c:294
-#: src/datastore/gnunet-service-datastore.c:853
+#: src/datastore/gnunet-service-datastore.c:866
 msgid "# bytes stored"
 msgstr "# bytes almacenados"
 
@@ -1620,85 +1618,85 @@
 "Se produjo un fallo al transmitir la petición de eliminación a la base de "
 "datos.\n"
 
-#: src/datastore/datastore_api.c:394
+#: src/datastore/datastore_api.c:395
 msgid "# queue entry timeouts"
 msgstr "# expiraciones de plazo en la cola de entradas"
 
-#: src/datastore/datastore_api.c:443
+#: src/datastore/datastore_api.c:450
 msgid "# queue overflows"
 msgstr "# desbordamientos de la cola"
 
-#: src/datastore/datastore_api.c:471
+#: src/datastore/datastore_api.c:478
 msgid "# queue entries created"
 msgstr "# entradas creadas en la cola"
 
-#: src/datastore/datastore_api.c:491
+#: src/datastore/datastore_api.c:498
 msgid "# Requests dropped from datastore queue"
 msgstr "# Peticiones omitidas de la cola del almacén de datos"
 
-#: src/datastore/datastore_api.c:533
+#: src/datastore/datastore_api.c:540
 msgid "# datastore connections (re)created"
 msgstr "# conexiones a almacenes de datos (re)creadas"
 
-#: src/datastore/datastore_api.c:621
+#: src/datastore/datastore_api.c:628
 msgid "# transmission request failures"
 msgstr "# fallos en peticiones de transmisión"
 
-#: src/datastore/datastore_api.c:645
+#: src/datastore/datastore_api.c:652
 msgid "# bytes sent to datastore"
 msgstr "# bytes mandados al almacén de datos"
 
-#: src/datastore/datastore_api.c:787
+#: src/datastore/datastore_api.c:794
 msgid "Failed to receive status response from database."
 msgstr ""
 "Se produjo un fallo al recibir el estado de respuesta de la base de datos."
 
-#: src/datastore/datastore_api.c:801
+#: src/datastore/datastore_api.c:808
 msgid "Error reading response from datastore service"
 msgstr "Error leyendo respuesta del servicio de almacenamiento de datos"
 
-#: src/datastore/datastore_api.c:813 src/datastore/datastore_api.c:819
+#: src/datastore/datastore_api.c:820 src/datastore/datastore_api.c:826
 msgid "Invalid error message received from datastore service"
 msgstr ""
 "Mensaje de error no válido recibido del servicio de almacenamiento de datos"
 
-#: src/datastore/datastore_api.c:823
+#: src/datastore/datastore_api.c:830
 msgid "# status messages received"
 msgstr "# mensajes de estado recibidos"
 
-#: src/datastore/datastore_api.c:893
+#: src/datastore/datastore_api.c:909
 msgid "# PUT requests executed"
 msgstr "# peticiones «PUT» ejecutadas"
 
-#: src/datastore/datastore_api.c:959
+#: src/datastore/datastore_api.c:975
 msgid "# RESERVE requests executed"
 msgstr "# peticiones «RESERVE» ejecutadas"
 
-#: src/datastore/datastore_api.c:1020
+#: src/datastore/datastore_api.c:1036
 msgid "# RELEASE RESERVE requests executed"
 msgstr "# Peticiones «RELEASE RESERVE» ejecutadas"
 
-#: src/datastore/datastore_api.c:1080
+#: src/datastore/datastore_api.c:1096
 msgid "# UPDATE requests executed"
 msgstr "# peticiones «UPDATE» ejecutadas"
 
-#: src/datastore/datastore_api.c:1144
+#: src/datastore/datastore_api.c:1160
 msgid "# REMOVE requests executed"
 msgstr "# peticiones «REMOVE» ejecutadas"
 
-#: src/datastore/datastore_api.c:1248
+#: src/datastore/datastore_api.c:1264
 msgid "# Results received"
 msgstr "# Resultados recibidos"
 
-#: src/datastore/datastore_api.c:1315
+#: src/datastore/datastore_api.c:1331
 msgid "# GET REPLICATION requests executed"
 msgstr "# peticiones «GET REPLICATION» ejecutadas"
 
-#: src/datastore/datastore_api.c:1378
+#: src/datastore/datastore_api.c:1394
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr "# peticiones «GET ZERO ANONYMITY» ejecutadas"
 
-#: src/datastore/datastore_api.c:1447
+#: src/datastore/datastore_api.c:1463
 msgid "# GET requests executed"
 msgstr "# peticiones «GET» ejecutadas"
 
@@ -1723,29 +1721,29 @@
 msgid "Manipulate GNUnet datastore"
 msgstr "Manipular ficheros de configuración de GNUnet"
 
-#: src/datastore/gnunet-service-datastore.c:365
+#: src/datastore/gnunet-service-datastore.c:372
 msgid "# bytes expired"
 msgstr "# bytes expirados"
 
-#: src/datastore/gnunet-service-datastore.c:439
+#: src/datastore/gnunet-service-datastore.c:447
 msgid "# bytes purged (low-priority)"
 msgstr "# bytes purgados (baja prioridad)"
 
-#: src/datastore/gnunet-service-datastore.c:497
+#: src/datastore/gnunet-service-datastore.c:505
 #: src/gns/gnunet-gns-helper-service-w32.c:223
 msgid "Transmission to client failed!\n"
 msgstr "¡La transmisión con el cliente ha fallado!\n"
 
-#: src/datastore/gnunet-service-datastore.c:528
+#: src/datastore/gnunet-service-datastore.c:536
 #: src/gns/gnunet-gns-helper-service-w32.c:262
 msgid "Shutdown in progress, aborting transmission.\n"
 msgstr "Apagado en proceso, abortando transmisión.\n"
 
-#: src/datastore/gnunet-service-datastore.c:643
+#: src/datastore/gnunet-service-datastore.c:652
 msgid "# results found"
 msgstr "# resultados encontrados"
 
-#: src/datastore/gnunet-service-datastore.c:686
+#: src/datastore/gnunet-service-datastore.c:696
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy `%s' request for "
@@ -1754,7 +1752,7 @@
 "Espacio insuficiente (%llu bytes están disponibles) para satisfacer la "
 "petición «%s» de %llu bytes\n"
 
-#: src/datastore/gnunet-service-datastore.c:697
+#: src/datastore/gnunet-service-datastore.c:707
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
@@ -1763,7 +1761,7 @@
 "La cantidad solicitada (%llu bytes) es mayor que el tamaño de la caché (%llu "
 "bytes)\n"
 
-#: src/datastore/gnunet-service-datastore.c:701
+#: src/datastore/gnunet-service-datastore.c:711
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
@@ -1771,61 +1769,61 @@
 "Espacio insuficiente para satisfacer la petición y la cantidad pedida es "
 "mayor que el tamaño de la caché"
 
-#: src/datastore/gnunet-service-datastore.c:707
+#: src/datastore/gnunet-service-datastore.c:717
 msgid "Insufficient space to satisfy request"
 msgstr "Espacio insuficiente para satisfacer la petición"
 
-#: src/datastore/gnunet-service-datastore.c:712
-#: src/datastore/gnunet-service-datastore.c:767
-#: src/datastore/gnunet-service-datastore.c:1019
-#: src/datastore/gnunet-service-datastore.c:1597
+#: src/datastore/gnunet-service-datastore.c:723
+#: src/datastore/gnunet-service-datastore.c:779
+#: src/datastore/gnunet-service-datastore.c:1035
+#: src/datastore/gnunet-service-datastore.c:1630
 msgid "# reserved"
 msgstr "# reservado"
 
-#: src/datastore/gnunet-service-datastore.c:780
+#: src/datastore/gnunet-service-datastore.c:793
 msgid "Could not find matching reservation"
 msgstr "No se pudo encontrar una reserva coincidente"
 
-#: src/datastore/gnunet-service-datastore.c:865
+#: src/datastore/gnunet-service-datastore.c:879
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 "Se necesitan %llu bytes más de espacio (%llu permitidos, usando %llu)\n"
 
-#: src/datastore/gnunet-service-datastore.c:1071
+#: src/datastore/gnunet-service-datastore.c:1088
 msgid "# GET requests received"
 msgstr "# peticiones «GET» recibidas"
 
-#: src/datastore/gnunet-service-datastore.c:1083
+#: src/datastore/gnunet-service-datastore.c:1101
 msgid "# requests filtered by bloomfilter"
 msgstr "# peticiones filtradas por el «bloomfilter»"
 
-#: src/datastore/gnunet-service-datastore.c:1121
+#: src/datastore/gnunet-service-datastore.c:1141
 msgid "# UPDATE requests received"
 msgstr "# peticiones «UPDATE» recibidas"
 
-#: src/datastore/gnunet-service-datastore.c:1149
+#: src/datastore/gnunet-service-datastore.c:1170
 msgid "# GET REPLICATION requests received"
 msgstr "# peticiones «GET REPLICATION» recibidas"
 
-#: src/datastore/gnunet-service-datastore.c:1182
+#: src/datastore/gnunet-service-datastore.c:1204
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr "# peticiones «GET ZERO ANONYMITY» recibidas"
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1233
 msgid "Content not found"
 msgstr "Contenido no encontrado"
 
-#: src/datastore/gnunet-service-datastore.c:1215
+#: src/datastore/gnunet-service-datastore.c:1244
 msgid "# bytes removed (explicit request)"
 msgstr "# bytes eliminados (petición explícita)"
 
-#: src/datastore/gnunet-service-datastore.c:1247
+#: src/datastore/gnunet-service-datastore.c:1277
 msgid "# REMOVE requests received"
 msgstr "# peticiones «REMOVE» recibidas"
 
 # Miguel: ¿Cómo traducir «payload»? ¿Código cargado?
-#: src/datastore/gnunet-service-datastore.c:1291
+#: src/datastore/gnunet-service-datastore.c:1321
 #, fuzzy, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
@@ -1833,62 +1831,62 @@
 "El «payload» del almacén de datos es impreciso (%lld < %lld).  Intentando "
 "repararlo.\n"
 
-#: src/datastore/gnunet-service-datastore.c:1296
+#: src/datastore/gnunet-service-datastore.c:1326
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1349
+#: src/datastore/gnunet-service-datastore.c:1379
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr "Cargando el módulo del almacén de datos «%s»\n"
 
-#: src/datastore/gnunet-service-datastore.c:1360
+#: src/datastore/gnunet-service-datastore.c:1390
 #, c-format
 msgid "Failed to load datastore plugin for `%s'\n"
 msgstr ""
 "Se produjo un fallo al inicializar el módulo del almacén de datos para «%s»\n"
 
-#: src/datastore/gnunet-service-datastore.c:1429
-#: src/datastore/gnunet-service-datastore.c:1490
+#: src/datastore/gnunet-service-datastore.c:1459
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "Bloomfilter construction complete.\n"
 msgstr "Construcción de «bloomfilter» completa.\n"
 
-#: src/datastore/gnunet-service-datastore.c:1477
+#: src/datastore/gnunet-service-datastore.c:1509
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr "Reconstruyendo «bloomfilter».  Por favor, tenga paciencia.\n"
 
-#: src/datastore/gnunet-service-datastore.c:1487
+#: src/datastore/gnunet-service-datastore.c:1519
 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:1625
-#: src/datastore/gnunet-service-datastore.c:1636
+#: src/datastore/gnunet-service-datastore.c:1661
+#: src/datastore/gnunet-service-datastore.c:1673
 #, 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:1630
+#: src/datastore/gnunet-service-datastore.c:1667
 #, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr "# bytes usados en el almacén de ficheros compartidos «%s»"
 
-#: src/datastore/gnunet-service-datastore.c:1641
+#: src/datastore/gnunet-service-datastore.c:1679
 msgid "# quota"
 msgstr "# cuota"
 
-#: src/datastore/gnunet-service-datastore.c:1643
+#: src/datastore/gnunet-service-datastore.c:1681
 msgid "# cache size"
 msgstr "# tamaño de la caché"
 
-#: src/datastore/gnunet-service-datastore.c:1656
+#: src/datastore/gnunet-service-datastore.c:1696
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 "No se pudo usar el nombre de fichero especificado «%s» para «bloomfilter».\n"
 
-#: src/datastore/gnunet-service-datastore.c:1674
-#: src/datastore/gnunet-service-datastore.c:1690
+#: src/datastore/gnunet-service-datastore.c:1714
+#: src/datastore/gnunet-service-datastore.c:1730
 #, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr ""
@@ -1895,7 +1893,7 @@
 "Se produjo un fallo al borrar el fichero de configuración defectuoso de "
 "«bloomfilter» «%s»:\n"
 
-#: src/datastore/gnunet-service-datastore.c:1720
+#: src/datastore/gnunet-service-datastore.c:1760
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "Se produjo un fallo al inicializar «bloomfilter».\n"
 
@@ -1953,7 +1951,7 @@
 #: src/namecache/plugin_namecache_sqlite.c:193
 #: src/namestore/plugin_namestore_sqlite.c:204
 #: src/peerstore/plugin_peerstore_sqlite.c:479
-#: src/psycstore/plugin_psycstore_sqlite.c:324
+#: src/psycstore/plugin_psycstore_sqlite.c:325
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "Imposible inicializar SQLite: %s.\n"
@@ -2036,9 +2034,9 @@
 msgstr "opción para usar el demultiplexado de la DHT siempre"
 
 #: src/dht/gnunet-dht-get.c:204 src/dht/gnunet-dht-monitor.c:271
-#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:755
-#: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:961
-#: src/fs/gnunet-search.c:307 src/fs/gnunet-unindex.c:168
+#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:794
+#: src/fs/gnunet-download.c:327 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-search.c:306 src/fs/gnunet-unindex.c:167
 #: src/nse/gnunet-nse-profiler.c:873
 msgid "be verbose (print progress information)"
 msgstr "ser prolijo (imprime información de progreso)"
@@ -2056,8 +2054,7 @@
 msgid "Prints all packets that go through the DHT."
 msgstr "Imprime todos los paquetes que pasan por la DHT."
 
-#: src/dht/gnunet_dht_profiler.c:1393
-#: src/testbed/gnunet-testbed-profiler.c:267
+#: src/dht/gnunet_dht_profiler.c:1393 src/testbed/gnunet-testbed-profiler.c:267
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "El número máximo de conexiones es %u\n"
@@ -2279,8 +2276,7 @@
 msgid "# GET requests given to datacache"
 msgstr "# Peticiones «GET» realizadas a la caché de datos"
 
-#: src/dht/gnunet-service-dht_hello.c:84
-#: src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
 msgid "# HELLOs obtained from peerinfo"
 msgstr "# «HELLO» obtenidos de «peerinfo»"
 
@@ -3173,74 +3169,74 @@
 msgid "Failed to connect to datastore."
 msgstr "Se produjo un fallo al conectar con el almacén de datos."
 
-#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:443
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:441
 #, c-format
 msgid "Publishing failed: %s"
 msgstr "Publicación fallida: %s"
 
-#: src/fs/fs_publish.c:709 src/fs/fs_publish.c:726 src/fs/fs_publish.c:765
-#: src/fs/fs_publish.c:786 src/fs/fs_publish.c:810 src/fs/fs_publish.c:1060
+#: src/fs/fs_publish.c:707 src/fs/fs_publish.c:724 src/fs/fs_publish.c:763
+#: src/fs/fs_publish.c:784 src/fs/fs_publish.c:808 src/fs/fs_publish.c:1058
 #, c-format
 msgid "Can not index file `%s': %s.  Will try to insert instead.\n"
 msgstr "No se pudo indexar el fichero «%s»: %s.  Se intentará insertar.\n"
 
-#: src/fs/fs_publish.c:711
+#: src/fs/fs_publish.c:709
 msgid "timeout on index-start request to `fs' service"
 msgstr ""
 "expiración del plazo en la petición de inicio de indexado (index-start) al "
 "servicio «fs»"
 
-#: src/fs/fs_publish.c:723
+#: src/fs/fs_publish.c:721
 msgid "unknown error"
 msgstr "error desconocido"
 
-#: src/fs/fs_publish.c:767
+#: src/fs/fs_publish.c:765
 msgid "failed to compute hash"
 msgstr "se produjo un fallo al calcular el hash"
 
-#: src/fs/fs_publish.c:787
+#: src/fs/fs_publish.c:785
 msgid "filename too long"
 msgstr "nombre de fichero demasiado largo"
 
-#: src/fs/fs_publish.c:812
+#: src/fs/fs_publish.c:810
 msgid "could not connect to `fs' service"
 msgstr "no se pudo conectar con el servicio «fs»"
 
-#: src/fs/fs_publish.c:835
+#: src/fs/fs_publish.c:833
 #, c-format
 msgid "Failed to get file identifiers for `%s'\n"
 msgstr ""
 "Se produjo un fallo al obtener los identificadores de fichero para «%s»\n"
 
-#: src/fs/fs_publish.c:899 src/fs/fs_publish.c:940
+#: src/fs/fs_publish.c:897 src/fs/fs_publish.c:938
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1014
+#: src/fs/fs_publish.c:1012
 #, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr "La subida recursiva falló en «%s»: %s"
 
-#: src/fs/fs_publish.c:1022
+#: src/fs/fs_publish.c:1020
 #, c-format
 msgid "Recursive upload failed: %s"
 msgstr "Subida recursiva fallida: %s"
 
-#: src/fs/fs_publish.c:1062
+#: src/fs/fs_publish.c:1060
 msgid "needs to be an actual file"
 msgstr "tiene que ser un fichero de verdad"
 
-#: src/fs/fs_publish.c:1301
+#: src/fs/fs_publish.c:1299
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "# «PUT» en el almacén de datos fallidos"
 
-#: src/fs/fs_publish.c:1392
+#: src/fs/fs_publish.c:1390
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr "Reservando espacio para %u entradas y %llu bytes para publicación\n"
 
-#: src/fs/fs_publish_ksk.c:219
+#: src/fs/fs_publish_ksk.c:224
 msgid "Could not connect to datastore."
 msgstr "No se pudo conectar con el almacén de datos."
 
@@ -3429,22 +3425,22 @@
 msgid "Failed to save state to file %s\n"
 msgstr "Se produjo un fallo al guardar el estado en el fichero %s\n"
 
-#: src/fs/gnunet-auto-share.c:402
+#: src/fs/gnunet-auto-share.c:415
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr "Publicación de «%s» finalizada\n"
 
-#: src/fs/gnunet-auto-share.c:490
+#: src/fs/gnunet-auto-share.c:504
 #, c-format
 msgid "Publishing `%s'\n"
 msgstr "Publicando «%s»\n"
 
-#: src/fs/gnunet-auto-share.c:499
+#: src/fs/gnunet-auto-share.c:514
 #, c-format
 msgid "Failed to run `%s'\n"
 msgstr "Se produjo un fallo al ejecutar «%s»\n"
 
-#: src/fs/gnunet-auto-share.c:688
+#: src/fs/gnunet-auto-share.c:725
 #, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
@@ -3452,28 +3448,28 @@
 "Debes especificar uno y solo un nombre de directorio para publicación "
 "automática.\n"
 
-#: src/fs/gnunet-auto-share.c:739 src/fs/gnunet-publish.c:908
+#: src/fs/gnunet-auto-share.c:778 src/fs/gnunet-publish.c:901
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr "establece el nivel LEVEL deseado de anonimato del emisor"
 
-#: src/fs/gnunet-auto-share.c:743 src/fs/gnunet-publish.c:912
+#: src/fs/gnunet-auto-share.c:782 src/fs/gnunet-publish.c:905
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 "deshabilitar añadir tiempo de creación a los metadatos del fichero subido"
 
-#: src/fs/gnunet-auto-share.c:746 src/fs/gnunet-publish.c:915
+#: src/fs/gnunet-auto-share.c:785 src/fs/gnunet-publish.c:908
 msgid "do not use libextractor to add keywords or metadata"
 msgstr "no usar libextractor para añadir palabras clave o metadatos"
 
-#: src/fs/gnunet-auto-share.c:749 src/fs/gnunet-publish.c:939
+#: src/fs/gnunet-auto-share.c:788 src/fs/gnunet-publish.c:932
 msgid "specify the priority of the content"
 msgstr "especificar la prioridad del contenido"
 
-#: src/fs/gnunet-auto-share.c:752 src/fs/gnunet-publish.c:946
+#: src/fs/gnunet-auto-share.c:791 src/fs/gnunet-publish.c:939
 msgid "set the desired replication LEVEL"
 msgstr "establece el nivel LEVEL deseado de replicación"
 
-#: src/fs/gnunet-auto-share.c:772
+#: src/fs/gnunet-auto-share.c:815
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr "Publicar automáticamente ficheros de un directorio en GNUnet"
 
@@ -3542,64 +3538,64 @@
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr "Finalizada descarga «%s» (%s/s).\n"
 
-#: src/fs/gnunet-download.c:209 src/fs/gnunet-publish.c:319
-#: src/fs/gnunet-search.c:206 src/fs/gnunet-unindex.c:108
+#: src/fs/gnunet-download.c:208 src/fs/gnunet-publish.c:297
+#: src/fs/gnunet-search.c:205 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr "Estado inesperado: %d\n"
 
-#: src/fs/gnunet-download.c:234
+#: src/fs/gnunet-download.c:233
 msgid "You need to specify a URI argument.\n"
 msgstr "Tiene que especificar una URI como parámetro.\n"
 
-#: src/fs/gnunet-download.c:240 src/fs/gnunet-publish.c:734
+#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:728
 #, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr "Se produjo un fallo al procesar la URI: %s\n"
 
-#: src/fs/gnunet-download.c:247
+#: src/fs/gnunet-download.c:246
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr "Sólo URI «CHK» o «LOC» soportadas.\n"
 
-#: src/fs/gnunet-download.c:254
+#: src/fs/gnunet-download.c:253
 msgid "Target filename must be specified.\n"
 msgstr "El nombre de fichero de destino debe ser especificado.\n"
 
-#: src/fs/gnunet-download.c:268 src/fs/gnunet-publish.c:878
-#: src/fs/gnunet-search.c:256 src/fs/gnunet-unindex.c:140
+#: src/fs/gnunet-download.c:267 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:255 src/fs/gnunet-unindex.c:139
 #, c-format
 msgid "Could not initialize `%s' subsystem.\n"
 msgstr "No se pudo inicializar el subsistema «%s».\n"
 
-#: src/fs/gnunet-download.c:305 src/fs/gnunet-search.c:295
+#: src/fs/gnunet-download.c:304 src/fs/gnunet-search.c:294
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr "establece el nivel LEVEL deseado de anonimato del receptor"
 
-#: src/fs/gnunet-download.c:308
+#: src/fs/gnunet-download.c:307
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr "borra descargas incompletas (cuando fueron abortadas con CTRL-C="
 
-#: src/fs/gnunet-download.c:311 src/fs/gnunet-search.c:298
+#: src/fs/gnunet-download.c:310 src/fs/gnunet-search.c:297
 msgid "only search the local peer (no P2P network search)"
 msgstr "únicamente buscar en el par local (no buscar en la red P2P)"
 
-#: src/fs/gnunet-download.c:314
+#: src/fs/gnunet-download.c:313
 msgid "write the file to FILENAME"
 msgstr "escribe los datos al nombre del fichero proporcionado (FILENAME)"
 
-#: src/fs/gnunet-download.c:318
+#: src/fs/gnunet-download.c:317
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr "establece el número máximo de descargas paralelas permitido"
 
-#: src/fs/gnunet-download.c:322
+#: src/fs/gnunet-download.c:321
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr "establece el número máximo de peticiones de bloque paralelas permitido"
 
-#: src/fs/gnunet-download.c:325
+#: src/fs/gnunet-download.c:324
 msgid "download a GNUnet directory recursively"
 msgstr "descarga un directorio de GNUnet recursivamente"
 
-#: src/fs/gnunet-download.c:339
+#: src/fs/gnunet-download.c:338
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
@@ -3635,107 +3631,107 @@
 "ejecuta una batería de pruebas para medir el rendimiento de la compartición "
 "de ficheros"
 
-#: src/fs/gnunet-publish.c:238 src/fs/gnunet-publish.c:250
+#: src/fs/gnunet-publish.c:221 src/fs/gnunet-publish.c:233
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr "Publicando «%s» en %llu/%llu (%s restantes)\n"
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:241
 #, c-format
 msgid "Error publishing: %s.\n"
 msgstr "Error publicando: %s.\n"
 
-#: src/fs/gnunet-publish.c:268
+#: src/fs/gnunet-publish.c:248
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr "Publicación «%s» finalizada.\n"
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:253
 #, c-format
 msgid "URI is `%s'.\n"
 msgstr "La URI es «%s».\n"
 
-#: src/fs/gnunet-publish.c:281
+#: src/fs/gnunet-publish.c:261
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr "La URI es «%s».\n"
 
-#: src/fs/gnunet-publish.c:299
+#: src/fs/gnunet-publish.c:277
 #, fuzzy
 msgid "Starting cleanup after abort\n"
 msgstr "Limpieza completada\n"
 
-#: src/fs/gnunet-publish.c:306
+#: src/fs/gnunet-publish.c:284
 #, fuzzy
 msgid "Cleanup after abort completed.\n"
 msgstr "Limpieza completada\n"
 
-#: src/fs/gnunet-publish.c:312
+#: src/fs/gnunet-publish.c:290
 #, fuzzy
 msgid "Cleanup after abort failed.\n"
 msgstr "Limpieza completada\n"
 
-#: src/fs/gnunet-publish.c:447
+#: src/fs/gnunet-publish.c:432
 #, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr "Metadatos para el fichero «%s» (%s)\n"
 
-#: src/fs/gnunet-publish.c:449
+#: src/fs/gnunet-publish.c:437
 #, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "Palabras clave para el fichero «%s» (%s)\n"
 
-#: src/fs/gnunet-publish.c:594
+#: src/fs/gnunet-publish.c:591
 msgid "Could not publish\n"
 msgstr "No se pudo publicar\n"
 
-#: src/fs/gnunet-publish.c:619
+#: src/fs/gnunet-publish.c:616
 msgid "Could not start publishing.\n"
 msgstr "No se pudo empezar a publicar.\n"
 
-#: src/fs/gnunet-publish.c:653
+#: src/fs/gnunet-publish.c:650
 #, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr "Escaneando directorio «%s».\n"
 
-#: src/fs/gnunet-publish.c:657
+#: src/fs/gnunet-publish.c:654
 #, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "Escaneando fichero «%s».\n"
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:660
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr "Hubo un problema procesando el fichero «%s», omitiéndolo.\n"
 
-#: src/fs/gnunet-publish.c:670
+#: src/fs/gnunet-publish.c:667
 msgid "Preprocessing complete.\n"
 msgstr "Preprocesado completo.\n"
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:672
 #, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr "Extracción de metadatos del fichero «%s» completa.\n"
 
-#: src/fs/gnunet-publish.c:682
+#: src/fs/gnunet-publish.c:679
 msgid "Meta data extraction has finished.\n"
 msgstr "La extracción de metadatos ha finalizado.\n"
 
-#: src/fs/gnunet-publish.c:691
+#: src/fs/gnunet-publish.c:688
 msgid "Internal error scanning directory.\n"
 msgstr "Error interno escaneando directorio.\n"
 
-#: src/fs/gnunet-publish.c:723
+#: src/fs/gnunet-publish.c:716
 #, fuzzy, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr "Espacio de nombres «%s» desconocido.\n"
 
-#: src/fs/gnunet-publish.c:755
+#: src/fs/gnunet-publish.c:749
 #, c-format
 msgid "Failed to access `%s': %s\n"
 msgstr "Se produjo un fallo al acceder «%s»: %s\n"
 
-#: src/fs/gnunet-publish.c:769
+#: src/fs/gnunet-publish.c:763
 msgid ""
 "Failed to start meta directory scanner.  Is gnunet-helper-publish-fs "
 "installed?\n"
@@ -3743,27 +3739,27 @@
 "Se produjo un fallo al iniciar el meta-escáner de directorios.  ¿Está "
 "«gnunet-helper-publish-fs» instalado?\n"
 
-#: src/fs/gnunet-publish.c:825
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr "¡No se pueden extraer metadatos de una URI!\n"
 
-#: src/fs/gnunet-publish.c:832
+#: src/fs/gnunet-publish.c:826
 #, c-format
 msgid "You must specify one and only one filename for insertion.\n"
 msgstr "Se debe especificar uno y solo un nombre de fichero para insertar.\n"
 
-#: src/fs/gnunet-publish.c:838
+#: src/fs/gnunet-publish.c:832
 #, c-format
 msgid "You must NOT specify an URI and a filename.\n"
 msgstr "No se puede especificar una URI y un nombre de fichero.\n"
 
-#: src/fs/gnunet-publish.c:846 src/vpn/gnunet-vpn.c:209
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:209
 #, c-format
 msgid "Option `%s' is required when using option `%s'.\n"
 msgstr "La opción «%s» es obligatoria cuando se usa la opción «%s».\n"
 
-#: src/fs/gnunet-publish.c:857 src/fs/gnunet-publish.c:865
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
 #: src/transport/gnunet-transport.c:1928 src/transport/gnunet-transport.c:1958
 #: src/transport/gnunet-transport.c:1989
 #, c-format
@@ -3770,7 +3766,7 @@
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr "La opción «%s» no tiene sentido sin la opción «%s».\n"
 
-#: src/fs/gnunet-publish.c:919
+#: src/fs/gnunet-publish.c:912
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
@@ -3778,7 +3774,7 @@
 "imprimir una lista de las palabras clave extraídas que podrían ser usadas, "
 "pero sin realizar la subida"
 
-#: src/fs/gnunet-publish.c:923
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "add an additional keyword for the top-level file or directory (this option "
 "can be specified multiple times)"
@@ -3786,11 +3782,11 @@
 "añadir una palabra clave adicional para el fichero del nivel más alto o el "
 "directorio (esta opción puede ser especificada varias veces)"
 
-#: src/fs/gnunet-publish.c:927
+#: src/fs/gnunet-publish.c:920
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr "establece los metadatos para el tipo TYPE dado al valor VALUE dado"
 
-#: src/fs/gnunet-publish.c:930
+#: src/fs/gnunet-publish.c:923
 msgid ""
 "do not index, perform full insertion (stores entire file in encrypted form "
 "in GNUnet database)"
@@ -3798,7 +3794,7 @@
 "no indexar, hacer inserciones totales (almacena el fichero entero de forma "
 "cifrada en la base de datos de GNUnet)"
 
-#: src/fs/gnunet-publish.c:935
+#: src/fs/gnunet-publish.c:928
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
@@ -3806,13 +3802,13 @@
 "especificar la ID de una versión actualizada para ser publicada en el futuro "
 "(para inserciones en el espacio de nombres únicamente)"
 
-#: src/fs/gnunet-publish.c:943
+#: src/fs/gnunet-publish.c:936
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 "publicar los ficheros bajo el seudónimo NAME (coloca el fichero en el "
 "espacio)"
 
-#: src/fs/gnunet-publish.c:949
+#: src/fs/gnunet-publish.c:942
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
@@ -3820,7 +3816,7 @@
 "únicamente simular el proceso pero no publicar nada realmente (útil para "
 "calcular URI)"
 
-#: src/fs/gnunet-publish.c:953
+#: src/fs/gnunet-publish.c:946
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
@@ -3827,7 +3823,7 @@
 "establece la ID de esta versión de la publicación (para inserciones en el "
 "espacio únicamente)"
 
-#: src/fs/gnunet-publish.c:957
+#: src/fs/gnunet-publish.c:950
 msgid ""
 "URI to be published (can be used instead of passing a file to add keywords "
 "to the file with the respective URI)"
@@ -3835,7 +3831,7 @@
 "URI a ser publicada (puede ser usado en vez de pasar un fichero para añadir "
 "claves con el fichero con la URI respectiva)"
 
-#: src/fs/gnunet-publish.c:973
+#: src/fs/gnunet-publish.c:966
 msgid "Publish a file or directory on GNUnet"
 msgstr "Publicar un fichero o un directorio en GNUnet"
 
@@ -3851,27 +3847,27 @@
 msgid "Error searching: %s.\n"
 msgstr "Error buscando: %s.\n"
 
-#: src/fs/gnunet-search.c:246
+#: src/fs/gnunet-search.c:245
 msgid "Could not create keyword URI from arguments.\n"
 msgstr "No se pudo crear URI de palabra clave a partir de los parámetros.\n"
 
-#: src/fs/gnunet-search.c:270
+#: src/fs/gnunet-search.c:269
 msgid "Could not start searching.\n"
 msgstr "No se pudo empezar a buscar.\n"
 
-#: src/fs/gnunet-search.c:301
+#: src/fs/gnunet-search.c:300
 msgid "write search results to file starting with PREFIX"
 msgstr "escribir resultados de búsqueda al fichero que empiecen por «PREFIX»"
 
-#: src/fs/gnunet-search.c:304
+#: src/fs/gnunet-search.c:303
 msgid "automatically terminate search after DELAY"
 msgstr "terminar búsqueda automáticamente después de «DELAY»"
 
-#: src/fs/gnunet-search.c:311
+#: src/fs/gnunet-search.c:310
 msgid "automatically terminate search after VALUE results are found"
 msgstr "terminar búsqueda después de «VALUE» resultados encontrados"
 
-#: src/fs/gnunet-search.c:322
+#: src/fs/gnunet-search.c:321
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr "Buscar en GNUnet ficheros que han sido publicados en GNUnet"
 
@@ -4248,16 +4244,16 @@
 msgid "Unindexing done.\n"
 msgstr "Desindexado finalizado.\n"
 
-#: src/fs/gnunet-unindex.c:130
+#: src/fs/gnunet-unindex.c:129
 #, c-format
 msgid "You must specify one and only one filename for unindexing.\n"
 msgstr "Se debe especificar uno y solo un fichero para desindexar.\n"
 
-#: src/fs/gnunet-unindex.c:147
+#: src/fs/gnunet-unindex.c:146
 msgid "Could not start unindex operation.\n"
 msgstr "No se pudo empezar la operación de desindexado.\n"
 
-#: src/fs/gnunet-unindex.c:179
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr "Desindexa un fichero previamente indexado con «gnunet-publish»."
 
@@ -4670,12 +4666,12 @@
 msgid "GNS REST API initialized\n"
 msgstr "Conexión fallida\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:291
+#: src/gnsrecord/plugin_gnsrecord_dns.c:359
 #, c-format
 msgid "Unable to parse IPv4 address `%s'\n"
 msgstr "No se pudo procesar la dirección IPv4 «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:312
+#: src/gnsrecord/plugin_gnsrecord_dns.c:380
 #, fuzzy, c-format
 msgid "Failed to serialize NS record with value `%s'\n"
 msgstr ""
@@ -4682,7 +4678,7 @@
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:334
+#: src/gnsrecord/plugin_gnsrecord_dns.c:402
 #, fuzzy, c-format
 msgid "Failed to serialize CNAME record with value `%s'\n"
 msgstr ""
@@ -4689,7 +4685,7 @@
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:418
+#: src/gnsrecord/plugin_gnsrecord_dns.c:486
 #, fuzzy, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr ""
@@ -4696,17 +4692,17 @@
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:455
+#: src/gnsrecord/plugin_gnsrecord_dns.c:522
 #, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr "No se pudo procesar el registro SOA «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:474
+#: src/gnsrecord/plugin_gnsrecord_dns.c:541
 #, fuzzy, c-format
 msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n"
 msgstr "Se produjo un fallo al crear un registro para el dominio «%s»: %s\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:497
+#: src/gnsrecord/plugin_gnsrecord_dns.c:564
 #, fuzzy, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr ""
@@ -4713,12 +4709,12 @@
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:520
+#: src/gnsrecord/plugin_gnsrecord_dns.c:587
 #, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr "No se pudo procesar el registro MX «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:535
+#: src/gnsrecord/plugin_gnsrecord_dns.c:602
 #, fuzzy, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr ""
@@ -4725,12 +4721,12 @@
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:562
+#: src/gnsrecord/plugin_gnsrecord_dns.c:629
 #, fuzzy, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr "No se pudo procesar el registro SOA «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:578
+#: src/gnsrecord/plugin_gnsrecord_dns.c:645
 #, fuzzy, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr ""
@@ -4737,13 +4733,13 @@
 "Se produjo un fallo al escribir el directorio con los resultados de búsqueda "
 "de «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:595
+#: src/gnsrecord/plugin_gnsrecord_dns.c:662
 #, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr "No se pudo procesar dirección IPv4 «%s»\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:619
-#: src/gnsrecord/plugin_gnsrecord_dns.c:635
+#: src/gnsrecord/plugin_gnsrecord_dns.c:686
+#: src/gnsrecord/plugin_gnsrecord_dns.c:702
 #, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr "No se pudo procesar la cadena de registro TLSA «%s»\n"
@@ -5290,6 +5286,31 @@
 msgid "Namecache failed to cache block"
 msgstr "El almacén de nombres no pudo añadir el registro"
 
+#: src/namecache/plugin_namecache_flat.c:119
+#: src/namecache/plugin_namecache_flat.c:236
+#: src/namestore/plugin_namestore_flat.c:184
+#: src/namestore/plugin_namestore_flat.c:352
+#, fuzzy, c-format
+msgid "Unable to initialize file: %s.\n"
+msgstr "Imposible inicializar SQLite: %s.\n"
+
+#: src/namecache/plugin_namecache_flat.c:130
+#: src/namestore/plugin_namestore_flat.c:195
+#, fuzzy, c-format
+msgid "Unable to get filesize: %s.\n"
+msgstr "Se produjo un fallo al crear los índices\n"
+
+#: src/namecache/plugin_namecache_flat.c:142
+#: src/namestore/plugin_namestore_flat.c:207
+#, fuzzy, c-format
+msgid "Unable to read file: %s.\n"
+msgstr "Se produjo un fallo al crear los índices\n"
+
+#: src/namecache/plugin_namecache_flat.c:391
+#, fuzzy
+msgid "flat plugin running\n"
+msgstr "Base de datos sqlite ejecutándose\n"
+
 #: src/namecache/plugin_namecache_postgres.c:89
 #: src/namestore/plugin_namestore_postgres.c:96
 msgid "Failed to create indices\n"
@@ -5386,8 +5407,7 @@
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "Parámetro no válido «%s»\n"
 
-#: src/namestore/gnunet-namestore.c:868
-#: src/peerinfo-tool/gnunet-peerinfo.c:817
+#: src/namestore/gnunet-namestore.c:868 src/peerinfo-tool/gnunet-peerinfo.c:817
 #, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "URI no válida: «%s»\n"
@@ -5553,11 +5573,21 @@
 msgid "Namestore failed to store record\n"
 msgstr "El almacén de nombres no pudo añadir el registro\n"
 
+#: src/namestore/plugin_namestore_flat.c:650
+#, fuzzy
+msgid "flat file database running\n"
+msgstr "Base de datos de plantilla ejecutándose\n"
+
 #: src/namestore/plugin_rest_namestore.c:1023
 #, fuzzy
 msgid "Namestore REST API initialized\n"
 msgstr "Conexión fallida\n"
 
+#: src/nat/gnunet-nat.c:160
+#, fuzzy
+msgid "GNUnet NAT traversal autoconfigure daemon"
+msgstr "Demonio de ayuda en las pruebas de recorrido NAT de GNUnet"
+
 #: src/nat/gnunet-nat-server.c:279
 #, c-format
 msgid "Please pass valid port number as the first argument! (got `%s')\n"
@@ -5569,54 +5599,58 @@
 msgid "GNUnet NAT traversal test helper daemon"
 msgstr "Demonio de ayuda en las pruebas de recorrido NAT de GNUnet"
 
-#: src/nat/nat_auto.c:179
+#: src/nat/nat_auto.c:394
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr "Recorrido NAT con servidor ICMP satisfactorio.\n"
 
-#: src/nat/nat_auto.c:180
+#: src/nat/nat_auto.c:395
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr "Recorrido NAT con servidor ICMP fallido.\n"
 
-#: src/nat/nat_auto.c:201
+#: src/nat/nat_auto.c:416
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr "Probando conexión inversa con el servidor ICMP.\n"
 
-#: src/nat/nat_auto.c:249
+#: src/nat/nat_auto.c:448
 #, c-format
 msgid "Detected external IP `%s'\n"
 msgstr "Detectada IP externa «%s»\n"
 
-#: src/nat/nat_auto.c:327
+#: src/nat/nat_auto.c:579
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 "Este sistema tiene una dirección IPv6 global, fijando IPv6 a habilitado.\n"
 
-#: src/nat/nat_auto.c:343
+#: src/nat/nat_auto.c:597
 #, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr "Detectada dirección de la red interna «%s».\n"
 
-#: src/nat/nat_auto.c:406
+#: src/nat/nat_auto.c:669 src/nat/nat_test.c:364
+msgid "Failed to connect to `gnunet-nat-server'\n"
+msgstr "Se produjo un fallo al conectar con «gnunet-nat-server»\n"
+
+#: src/nat/nat_auto.c:715
 msgid "upnpc found, enabling its use\n"
 msgstr "«upnpc» encontrado, habilitando su uso\n"
 
-#: src/nat/nat_auto.c:407
+#: src/nat/nat_auto.c:716
 msgid "upnpc not found\n"
 msgstr "«upnpc» no encontrado\n"
 
-#: src/nat/nat_auto.c:437
+#: src/nat/nat_auto.c:748
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:445 src/nat/nat_auto.c:490
+#: src/nat/nat_auto.c:756 src/nat/nat_auto.c:804
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:453 src/nat/nat_auto.c:498
+#: src/nat/nat_auto.c:764 src/nat/nat_auto.c:812
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr "No se ha encontrado un «gnunet-helper-nat-server» funcional\n"
 
-#: src/nat/nat_auto.c:483
+#: src/nat/nat_auto.c:797
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
@@ -5630,27 +5664,27 @@
 msgid "Failed to start %s\n"
 msgstr "Se produjo un fallo al arrancar %s\n"
 
-#: src/nat/nat.c:1286
+#: src/nat/nat.c:1305
 msgid "Error while running upnp client:\n"
 msgstr ""
 
-#: src/nat/nat.c:1356
+#: src/nat/nat.c:1375
 #, fuzzy, c-format
 msgid "Failed to run upnp client for port %u\n"
 msgstr ""
 "Se produjo un fallo al inicializar la clave de la máquina desde el par %u\n"
 
-#: src/nat/nat.c:1498
+#: src/nat/nat.c:1517
 msgid "malformed"
 msgstr "mal formado"
 
-#: src/nat/nat.c:1552
+#: src/nat/nat.c:1571
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP \n"
 msgstr ""
 
-#: src/nat/nat.c:1680 src/nat/nat.c:1692
+#: src/nat/nat.c:1700 src/nat/nat.c:1712
 #, c-format
 msgid ""
 "Configuration requires `%s', but binary is not installed properly (SUID bit "
@@ -5659,98 +5693,98 @@
 "La configuración requiere «%s», pero el binario no está instalado de forma "
 "correcta (SUID bit no activado).  Opción deshabilitada.\n"
 
-#: src/nat/nat.c:1830
+#: src/nat/nat.c:1855
 msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
 msgstr ""
 "Direcciones internas IP no conocidas, no se puede usar el método del "
 "recorrido NAT ICMP\n"
 
-#: src/nat/nat.c:1846
+#: src/nat/nat.c:1871
 #, c-format
 msgid "Running gnunet-helper-nat-client %s %s %u\n"
 msgstr "Ejecutando gnunet-helper-nat-client %s %s %u\n"
 
-#: src/nat/nat.c:1931
+#: src/nat/nat.c:1958
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat/nat.c:1933
+#: src/nat/nat.c:1960
 msgid "Internal Failure (IPC, ...)"
 msgstr ""
 
-#: src/nat/nat.c:1935
+#: src/nat/nat.c:1962
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat/nat.c:1937
+#: src/nat/nat.c:1964
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat/nat.c:1939
+#: src/nat/nat.c:1966
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat/nat.c:1941
+#: src/nat/nat.c:1968
 #, fuzzy
 msgid "`upnpc` command not found"
 msgstr "comando «upnpc» no encontrado\n"
 
-#: src/nat/nat.c:1943
+#: src/nat/nat.c:1970
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "Se produjo un fallo al ejecutar «%s»\n"
 
-#: src/nat/nat.c:1945
+#: src/nat/nat.c:1972
 #, fuzzy
 msgid "`upnpc' command took too long, process killed"
 msgstr "comando «upnpc» no encontrado\n"
 
-#: src/nat/nat.c:1947
+#: src/nat/nat.c:1974
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat/nat.c:1949
+#: src/nat/nat.c:1976
 #, fuzzy
 msgid "`external-ip' command not found"
 msgstr "comando «external-ip» no encontrado\n"
 
-#: src/nat/nat.c:1951
+#: src/nat/nat.c:1978
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "Se produjo un fallo al ejecutar «%s»\n"
 
-#: src/nat/nat.c:1953
+#: src/nat/nat.c:1980
 #, fuzzy
 msgid "`external-ip' command output invalid"
 msgstr "comando «external-ip» no encontrado\n"
 
-#: src/nat/nat.c:1955
+#: src/nat/nat.c:1982
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat/nat.c:1957
+#: src/nat/nat.c:1984
 #, fuzzy
 msgid "Could not determine interface with internal/local network address"
 msgstr "No se pudo determinar la ruta de instalación de los módulos.\n"
 
-#: src/nat/nat.c:1959
+#: src/nat/nat.c:1986
 #, fuzzy
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr "No se ha encontrado un «gnunet-helper-nat-server» funcional\n"
 
-#: src/nat/nat.c:1961
+#: src/nat/nat.c:1988
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat/nat.c:1963
+#: src/nat/nat.c:1990
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat/nat.c:1965
+#: src/nat/nat.c:1992
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat/nat.c:1967
+#: src/nat/nat.c:1994
 #, fuzzy
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr "No se ha encontrado un «gnunet-helper-nat-server» funcional\n"
@@ -5763,11 +5797,7 @@
 msgid "`upnpc' command not found\n"
 msgstr "comando «upnpc» no encontrado\n"
 
-#: src/nat/nat_test.c:360
-msgid "Failed to connect to `gnunet-nat-server'\n"
-msgstr "Se produjo un fallo al conectar con «gnunet-nat-server»\n"
-
-#: src/nat/nat_test.c:462
+#: src/nat/nat_test.c:467
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
@@ -5774,7 +5804,7 @@
 "Se produjo un fallo al crear el «socket» de escucha asociado a «%s» para "
 "pruebas NAT: %s\n"
 
-#: src/nat/nat_test.c:497
+#: src/nat/nat_test.c:502
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "El almacén de nombres no pudo añadir el registro\n"
@@ -5818,8 +5848,8 @@
 msgid "Measure quality and performance of the NSE service."
 msgstr "Medir la calidad y rendimiento del servicio NSE."
 
-#: src/nse/gnunet-service-nse.c:1537
-#: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260
+#: src/nse/gnunet-service-nse.c:1541
+#: src/revocation/gnunet-service-revocation.c:848 src/util/gnunet-scrypt.c:260
 msgid "Value is too large.\n"
 msgstr ""
 
@@ -6092,7 +6122,7 @@
 msgstr ""
 
 #: src/peerstore/plugin_peerstore_sqlite.c:398
-#: src/psycstore/plugin_psycstore_sqlite.c:281
+#: src/psycstore/plugin_psycstore_sqlite.c:282
 #, fuzzy, c-format
 msgid ""
 "Error executing SQL query: %s\n"
@@ -6100,7 +6130,7 @@
 msgstr "Error abriendo fichero «%s»: %s\n"
 
 #: src/peerstore/plugin_peerstore_sqlite.c:422
-#: src/psycstore/plugin_psycstore_sqlite.c:258
+#: src/psycstore/plugin_psycstore_sqlite.c:259
 #, fuzzy, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
@@ -6157,43 +6187,48 @@
 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:645
-#, fuzzy
-msgid "Failed to begin modifying state!\n"
+#: src/psycstore/gnunet-service-psycstore.c:657
+#, fuzzy, c-format
+msgid "Failed to begin modifying state: %d\n"
 msgstr "Se produjo un fallo al cargar el estado: %s\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:656
+#: src/psycstore/gnunet-service-psycstore.c:667
+#, fuzzy, c-format
+msgid "Failed to modify state: %d\n"
+msgstr "Se produjo un fallo al cargar el estado: %s\n"
+
+#: src/psycstore/gnunet-service-psycstore.c:675
 #, 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:686
+#: src/psycstore/gnunet-service-psycstore.c:706
 msgid "Tried to set invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:700
+#: src/psycstore/gnunet-service-psycstore.c:720
 #, 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:717
+#: src/psycstore/gnunet-service-psycstore.c:737
 #, 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:737
-#: src/psycstore/gnunet-service-psycstore.c:756
+#: src/psycstore/gnunet-service-psycstore.c:757
+#: src/psycstore/gnunet-service-psycstore.c:776
 #, 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:779
-#: src/psycstore/gnunet-service-psycstore.c:830
+#: src/psycstore/gnunet-service-psycstore.c:799
+#: src/psycstore/gnunet-service-psycstore.c:850
 msgid "Tried to get invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:806
-#: src/psycstore/gnunet-service-psycstore.c:845
+#: src/psycstore/gnunet-service-psycstore.c:826
+#: src/psycstore/gnunet-service-psycstore.c:865
 #, fuzzy
 msgid "Failed to get state variable!\n"
 msgstr "¡Se produjo un fallo al obtener la clave de máquina!\n"
@@ -6203,7 +6238,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:1907
+#: src/psycstore/plugin_psycstore_sqlite.c:1923
 #, fuzzy
 msgid "SQLite database running\n"
 msgstr "Base de datos sqlite ejecutándose\n"
@@ -6477,37 +6512,37 @@
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:427
+#: src/revocation/gnunet-service-revocation.c:481
 #, fuzzy
 msgid "# unsupported revocations received via set union"
 msgstr "Opciones de paquete IPv4 recibidas.  Ignoradas.\n"
 
-#: src/revocation/gnunet-service-revocation.c:436
+#: src/revocation/gnunet-service-revocation.c:490
 #, fuzzy
 msgid "# revocation messages received via set union"
 msgstr "# mensajes «DATA» recibidos vía WLAN"
 
-#: src/revocation/gnunet-service-revocation.c:441
+#: src/revocation/gnunet-service-revocation.c:495
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:445
+#: src/revocation/gnunet-service-revocation.c:499
 #, fuzzy
 msgid "# revocation set unions failed"
 msgstr "# sesiones wlan creadas"
 
-#: src/revocation/gnunet-service-revocation.c:454
+#: src/revocation/gnunet-service-revocation.c:508
 #, fuzzy
 msgid "# revocation set unions completed"
 msgstr "# transmisiones de fragmentos completadas"
 
-#: src/revocation/gnunet-service-revocation.c:493
-#: src/revocation/gnunet-service-revocation.c:759
+#: src/revocation/gnunet-service-revocation.c:547
+#: src/revocation/gnunet-service-revocation.c:780
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:851
+#: src/revocation/gnunet-service-revocation.c:872
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "No se pudo conectar con el almacén de datos."
@@ -6571,7 +6606,9 @@
 msgstr ""
 
 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1419
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1564
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1549
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1193
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1252
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr "Conexión fallida (¿bug?)\n"
@@ -6850,7 +6887,7 @@
 "\n"
 "Error subiendo el fichero %s\n"
 
-#: src/set/gnunet-service-set.c:1531
+#: src/set/gnunet-service-set.c:1960
 #, fuzzy
 msgid "Could not connect to cadet service\n"
 msgstr "¡No se pudo conectar al servicio %s!\n"
@@ -6978,7 +7015,7 @@
 msgid "Could not save some persistent statistics\n"
 msgstr "No se pudieron guardar algunas estadísticas persistentes\n"
 
-#: src/statistics/statistics_api.c:1090
+#: src/statistics/statistics_api.c:1088
 msgid ""
 "Failed to receive acknowledgement from statistics service, some statistics "
 "might have been lost!\n"
@@ -8683,7 +8720,7 @@
 msgid "# sessions allocated"
 msgstr "# sesiones WLAN alojadas"
 
-#: src/transport/transport_api.c:812
+#: src/transport/transport_api.c:827
 #, c-format
 msgid "Received unexpected message of type %u in %s:%u\n"
 msgstr "Recibido mensaje inesperado del tipo %u en %s:%u\n"
@@ -8726,18 +8763,18 @@
 msgid "Metadata `%s' failed to deserialize"
 msgstr "Se produjo un fallo al deserializar los metadatos «%s»"
 
-#: src/util/client.c:263 src/util/client.c:889 src/util/service.c:621
+#: src/util/client.c:264 src/util/client.c:894 src/util/service.c:621
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 "La ruta tipo UNIX «%s» es demasiado larga, la longitud máxima es %llu\n"
 
-#: src/util/client.c:267 src/util/client.c:894 src/util/service.c:625
+#: src/util/client.c:268 src/util/client.c:899 src/util/service.c:625
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr "Usando «%s» en su defecto\n"
 
-#: src/util/client.c:362
+#: src/util/client.c:367
 #, c-format
 msgid ""
 "Could not determine valid hostname and port for service `%s' from "
@@ -8746,17 +8783,17 @@
 "No se pudo determinar un nombre de máquina y un puerto válidos para el "
 "servicio «%s» a partir de la configuración.\n"
 
-#: src/util/client.c:370
+#: src/util/client.c:375
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr "Se necesita un nombre de máquina no vacío para el servicio «%s».\n"
 
-#: src/util/client.c:1039
+#: src/util/client.c:1044
 #, fuzzy, c-format
 msgid "Could not connect to service `%s', configuration broken.\n"
 msgstr "No se pudo conectar con el servicio «%s», no debe estar corriendo.\n"
 
-#: src/util/client.c:1051
+#: src/util/client.c:1056
 #, c-format
 msgid "Failure to transmit request to service `%s'\n"
 msgstr "Se produjo un fallo al transmitir la petición al servicio «%s»\n"
@@ -8842,12 +8879,12 @@
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/connection.c:424
+#: src/util/connection.c:429
 #, c-format
 msgid "Access denied to `%s'\n"
 msgstr "Acceso denegado a «%s»\n"
 
-#: src/util/connection.c:441
+#: src/util/connection.c:446
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr "Aceptando conexión desde «%s»: %p\n"
@@ -8921,17 +8958,17 @@
 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:981
+#: src/util/crypto_rsa.c:999
 #, 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"
 
-#: src/util/disk.c:1221
+#: src/util/disk.c:1226
 #, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr "¡Se esperaba que «%s» fuera un directorio!\n"
 
-#: src/util/disk.c:1444 src/util/service.c:1328
+#: src/util/disk.c:1449 src/util/service.c:1328
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "No se pudo obtener información acerca del usuario «%s»: %s\n"
@@ -9450,6 +9487,16 @@
 msgid "signal (%d, %p) returned %d.\n"
 msgstr "señal (%d, %p) devolvió %d.\n"
 
+#: src/util/socks.c:592
+#, c-format
+msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
+msgstr ""
+
+#: src/util/socks.c:605
+#, c-format
+msgid "Attempting to proxy service `%s' to invalid port %d or hostname `%s'.\n"
+msgstr ""
+
 #: src/util/strings.c:146
 msgid "b"
 msgstr "b"

Modified: gnunet/po/fr.po
===================================================================
--- gnunet/po/fr.po     2015-09-16 13:18:29 UTC (rev 36366)
+++ gnunet/po/fr.po     2015-09-22 01:20:28 UTC (rev 36367)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gnunet 0.10.1\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2015-07-24 15:20+0200\n"
+"POT-Creation-Date: 2015-09-06 02:18+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"
@@ -342,13 +342,11 @@
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3290
-#: src/ats-tests/gnunet-solver-eval.c:918
+#: src/ats/gnunet-ats-solver-eval.c:3290 src/ats-tests/gnunet-solver-eval.c:918
 msgid "solver to use"
 msgstr "solveur utilisé"
 
-#: src/ats/gnunet-ats-solver-eval.c:3293
-#: src/ats-tests/gnunet-solver-eval.c:921
+#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:921
 #: src/ats-tests/gnunet-solver-eval.c:924
 msgid "experiment to use"
 msgstr ""
@@ -625,54 +623,54 @@
 msgid "Print information about ATS state"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:376
+#: src/cadet/gnunet-cadet.c:458
 #, c-format
 msgid "Invalid target `%s'\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:643
+#: src/cadet/gnunet-cadet.c:735
 #, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:686
+#: src/cadet/gnunet-cadet.c:778
 #, c-format
 msgid "Invalid tunnel owner `%s'\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:752
-msgid "You must NOT give a TARGETwhen using 'request all' options\n"
+#: src/cadet/gnunet-cadet.c:844
+msgid "You must NOT give a TARGET when using 'request all' options\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:849
+#: src/cadet/gnunet-cadet.c:941
 msgid "provide information about a particular connection"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:852
+#: src/cadet/gnunet-cadet.c:944
 msgid "activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:855
+#: src/cadet/gnunet-cadet.c:947
 msgid "dump debug information to STDERR"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:861
+#: src/cadet/gnunet-cadet.c:953
 msgid "port to listen to (default; 0)"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:864
+#: src/cadet/gnunet-cadet.c:956
 msgid "provide information about a patricular peer"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:867
+#: src/cadet/gnunet-cadet.c:959
 msgid "provide information about all peers"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:870
+#: src/cadet/gnunet-cadet.c:962
 msgid "provide information about a particular tunnel"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:873
+#: src/cadet/gnunet-cadet.c:965
 msgid "provide information about all tunnels"
 msgstr ""
 
@@ -1365,20 +1363,20 @@
 msgid "# PAYLOAD dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:177
+#: src/core/gnunet-service-core_neighbours.c:178
 msgid "# sessions terminated by transport disconnect"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:193
-#: src/core/gnunet-service-core_neighbours.c:355
+#: src/core/gnunet-service-core_neighbours.c:194
+#: src/core/gnunet-service-core_neighbours.c:362
 msgid "# neighbour entries allocated"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:264
+#: src/core/gnunet-service-core_neighbours.c:270
 msgid "# encrypted bytes given to transport"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:438
+#: src/core/gnunet-service-core_neighbours.c:448
 #, c-format
 msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n"
 msgstr ""
@@ -1421,7 +1419,7 @@
 msgstr ""
 
 #: src/datacache/datacache.c:119 src/datacache/datacache.c:294
-#: src/datastore/gnunet-service-datastore.c:853
+#: src/datastore/gnunet-service-datastore.c:866
 msgid "# bytes stored"
 msgstr ""
 
@@ -1494,83 +1492,83 @@
 msgid "Failed to transmit request to drop database.\n"
 msgstr ""
 
-#: src/datastore/datastore_api.c:394
+#: src/datastore/datastore_api.c:395
 msgid "# queue entry timeouts"
 msgstr ""
 
-#: src/datastore/datastore_api.c:443
+#: src/datastore/datastore_api.c:450
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:471
+#: src/datastore/datastore_api.c:478
 msgid "# queue entries created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:491
+#: src/datastore/datastore_api.c:498
 msgid "# Requests dropped from datastore queue"
 msgstr ""
 
-#: src/datastore/datastore_api.c:533
+#: src/datastore/datastore_api.c:540
 msgid "# datastore connections (re)created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:621
+#: src/datastore/datastore_api.c:628
 msgid "# transmission request failures"
 msgstr ""
 
-#: src/datastore/datastore_api.c:645
+#: src/datastore/datastore_api.c:652
 msgid "# bytes sent to datastore"
 msgstr ""
 
-#: src/datastore/datastore_api.c:787
+#: src/datastore/datastore_api.c:794
 msgid "Failed to receive status response from database."
 msgstr ""
 
-#: src/datastore/datastore_api.c:801
+#: src/datastore/datastore_api.c:808
 msgid "Error reading response from datastore service"
 msgstr ""
 
-#: src/datastore/datastore_api.c:813 src/datastore/datastore_api.c:819
+#: src/datastore/datastore_api.c:820 src/datastore/datastore_api.c:826
 msgid "Invalid error message received from datastore service"
 msgstr ""
 
-#: src/datastore/datastore_api.c:823
+#: src/datastore/datastore_api.c:830
 msgid "# status messages received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:893
+#: src/datastore/datastore_api.c:909
 msgid "# PUT requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:959
+#: src/datastore/datastore_api.c:975
 msgid "# RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1020
+#: src/datastore/datastore_api.c:1036
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1080
+#: src/datastore/datastore_api.c:1096
 msgid "# UPDATE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1144
+#: src/datastore/datastore_api.c:1160
 msgid "# REMOVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1248
+#: src/datastore/datastore_api.c:1264
 msgid "# Results received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1315
+#: src/datastore/datastore_api.c:1331
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1378
+#: src/datastore/datastore_api.c:1394
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1447
+#: src/datastore/datastore_api.c:1463
 msgid "# GET requests executed"
 msgstr ""
 
@@ -1594,29 +1592,29 @@
 msgid "Manipulate GNUnet datastore"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:365
+#: src/datastore/gnunet-service-datastore.c:372
 msgid "# bytes expired"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:439
+#: src/datastore/gnunet-service-datastore.c:447
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:497
+#: src/datastore/gnunet-service-datastore.c:505
 #: src/gns/gnunet-gns-helper-service-w32.c:223
 msgid "Transmission to client failed!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:528
+#: src/datastore/gnunet-service-datastore.c:536
 #: src/gns/gnunet-gns-helper-service-w32.c:262
 msgid "Shutdown in progress, aborting transmission.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:643
+#: src/datastore/gnunet-service-datastore.c:652
 msgid "# results found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:686
+#: src/datastore/gnunet-service-datastore.c:696
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy `%s' request for "
@@ -1623,7 +1621,7 @@
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:697
+#: src/datastore/gnunet-service-datastore.c:707
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
@@ -1630,129 +1628,129 @@
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:701
+#: src/datastore/gnunet-service-datastore.c:711
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:707
+#: src/datastore/gnunet-service-datastore.c:717
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:712
-#: src/datastore/gnunet-service-datastore.c:767
-#: src/datastore/gnunet-service-datastore.c:1019
-#: src/datastore/gnunet-service-datastore.c:1597
+#: src/datastore/gnunet-service-datastore.c:723
+#: src/datastore/gnunet-service-datastore.c:779
+#: src/datastore/gnunet-service-datastore.c:1035
+#: src/datastore/gnunet-service-datastore.c:1630
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:780
+#: src/datastore/gnunet-service-datastore.c:793
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:865
+#: src/datastore/gnunet-service-datastore.c:879
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1071
+#: src/datastore/gnunet-service-datastore.c:1088
 msgid "# GET requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1083
+#: src/datastore/gnunet-service-datastore.c:1101
 msgid "# requests filtered by bloomfilter"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1121
+#: src/datastore/gnunet-service-datastore.c:1141
 msgid "# UPDATE requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1149
+#: src/datastore/gnunet-service-datastore.c:1170
 msgid "# GET REPLICATION requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1182
+#: src/datastore/gnunet-service-datastore.c:1204
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1233
 msgid "Content not found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1215
+#: src/datastore/gnunet-service-datastore.c:1244
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1247
+#: src/datastore/gnunet-service-datastore.c:1277
 msgid "# REMOVE requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1291
+#: src/datastore/gnunet-service-datastore.c:1321
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1296
+#: src/datastore/gnunet-service-datastore.c:1326
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1349
+#: src/datastore/gnunet-service-datastore.c:1379
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1360
+#: src/datastore/gnunet-service-datastore.c:1390
 #, c-format
 msgid "Failed to load datastore plugin for `%s'\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1429
-#: src/datastore/gnunet-service-datastore.c:1490
+#: src/datastore/gnunet-service-datastore.c:1459
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1477
+#: src/datastore/gnunet-service-datastore.c:1509
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1487
+#: src/datastore/gnunet-service-datastore.c:1519
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1625
-#: src/datastore/gnunet-service-datastore.c:1636
+#: src/datastore/gnunet-service-datastore.c:1661
+#: src/datastore/gnunet-service-datastore.c:1673
 #, c-format
 msgid "No `%s' specified for `%s' in configuration!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1630
+#: src/datastore/gnunet-service-datastore.c:1667
 #, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1641
+#: src/datastore/gnunet-service-datastore.c:1679
 msgid "# quota"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1643
+#: src/datastore/gnunet-service-datastore.c:1681
 msgid "# cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1656
+#: src/datastore/gnunet-service-datastore.c:1696
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1674
-#: src/datastore/gnunet-service-datastore.c:1690
+#: src/datastore/gnunet-service-datastore.c:1714
+#: src/datastore/gnunet-service-datastore.c:1730
 #, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1720
+#: src/datastore/gnunet-service-datastore.c:1760
 msgid "Failed to initialize bloomfilter.\n"
 msgstr ""
 
@@ -1809,7 +1807,7 @@
 #: src/namecache/plugin_namecache_sqlite.c:193
 #: src/namestore/plugin_namestore_sqlite.c:204
 #: src/peerstore/plugin_peerstore_sqlite.c:479
-#: src/psycstore/plugin_psycstore_sqlite.c:324
+#: src/psycstore/plugin_psycstore_sqlite.c:325
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr ""
@@ -1884,9 +1882,9 @@
 msgstr ""
 
 #: src/dht/gnunet-dht-get.c:204 src/dht/gnunet-dht-monitor.c:271
-#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:755
-#: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:961
-#: src/fs/gnunet-search.c:307 src/fs/gnunet-unindex.c:168
+#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:794
+#: src/fs/gnunet-download.c:327 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-search.c:306 src/fs/gnunet-unindex.c:167
 #: src/nse/gnunet-nse-profiler.c:873
 msgid "be verbose (print progress information)"
 msgstr ""
@@ -1903,8 +1901,7 @@
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1393
-#: src/testbed/gnunet-testbed-profiler.c:267
+#: src/dht/gnunet_dht_profiler.c:1393 src/testbed/gnunet-testbed-profiler.c:267
 #, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr ""
@@ -2117,8 +2114,7 @@
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84
-#: src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
@@ -2940,71 +2936,71 @@
 msgid "Failed to connect to datastore."
 msgstr ""
 
-#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:443
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:441
 #, c-format
 msgid "Publishing failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:709 src/fs/fs_publish.c:726 src/fs/fs_publish.c:765
-#: src/fs/fs_publish.c:786 src/fs/fs_publish.c:810 src/fs/fs_publish.c:1060
+#: src/fs/fs_publish.c:707 src/fs/fs_publish.c:724 src/fs/fs_publish.c:763
+#: src/fs/fs_publish.c:784 src/fs/fs_publish.c:808 src/fs/fs_publish.c:1058
 #, c-format
 msgid "Can not index file `%s': %s.  Will try to insert instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:711
+#: src/fs/fs_publish.c:709
 msgid "timeout on index-start request to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:723
+#: src/fs/fs_publish.c:721
 msgid "unknown error"
 msgstr ""
 
-#: src/fs/fs_publish.c:767
+#: src/fs/fs_publish.c:765
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:787
+#: src/fs/fs_publish.c:785
 msgid "filename too long"
 msgstr ""
 
-#: src/fs/fs_publish.c:812
+#: src/fs/fs_publish.c:810
 msgid "could not connect to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:835
+#: src/fs/fs_publish.c:833
 #, c-format
 msgid "Failed to get file identifiers for `%s'\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:899 src/fs/fs_publish.c:940
+#: src/fs/fs_publish.c:897 src/fs/fs_publish.c:938
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1014
+#: src/fs/fs_publish.c:1012
 #, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1022
+#: src/fs/fs_publish.c:1020
 #, c-format
 msgid "Recursive upload failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1062
+#: src/fs/fs_publish.c:1060
 msgid "needs to be an actual file"
 msgstr ""
 
-#: src/fs/fs_publish.c:1301
+#: src/fs/fs_publish.c:1299
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "pa_stream_new() échoué : %s\n"
 
-#: src/fs/fs_publish.c:1392
+#: src/fs/fs_publish.c:1390
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:219
+#: src/fs/fs_publish_ksk.c:224
 msgid "Could not connect to datastore."
 msgstr ""
 
@@ -3172,48 +3168,48 @@
 msgid "Failed to save state to file %s\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:402
+#: src/fs/gnunet-auto-share.c:415
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:490
+#: src/fs/gnunet-auto-share.c:504
 #, c-format
 msgid "Publishing `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:499
+#: src/fs/gnunet-auto-share.c:514
 #, c-format
 msgid "Failed to run `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:688
+#: src/fs/gnunet-auto-share.c:725
 #, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:739 src/fs/gnunet-publish.c:908
+#: src/fs/gnunet-auto-share.c:778 src/fs/gnunet-publish.c:901
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:743 src/fs/gnunet-publish.c:912
+#: src/fs/gnunet-auto-share.c:782 src/fs/gnunet-publish.c:905
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:746 src/fs/gnunet-publish.c:915
+#: src/fs/gnunet-auto-share.c:785 src/fs/gnunet-publish.c:908
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:749 src/fs/gnunet-publish.c:939
+#: src/fs/gnunet-auto-share.c:788 src/fs/gnunet-publish.c:932
 msgid "specify the priority of the content"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:752 src/fs/gnunet-publish.c:946
+#: src/fs/gnunet-auto-share.c:791 src/fs/gnunet-publish.c:939
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:772
+#: src/fs/gnunet-auto-share.c:815
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr ""
 
@@ -3280,64 +3276,64 @@
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:209 src/fs/gnunet-publish.c:319
-#: src/fs/gnunet-search.c:206 src/fs/gnunet-unindex.c:108
+#: src/fs/gnunet-download.c:208 src/fs/gnunet-publish.c:297
+#: src/fs/gnunet-search.c:205 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:234
+#: src/fs/gnunet-download.c:233
 msgid "You need to specify a URI argument.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:240 src/fs/gnunet-publish.c:734
+#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:728
 #, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:247
+#: src/fs/gnunet-download.c:246
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:254
+#: src/fs/gnunet-download.c:253
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:268 src/fs/gnunet-publish.c:878
-#: src/fs/gnunet-search.c:256 src/fs/gnunet-unindex.c:140
+#: src/fs/gnunet-download.c:267 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:255 src/fs/gnunet-unindex.c:139
 #, c-format
 msgid "Could not initialize `%s' subsystem.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:305 src/fs/gnunet-search.c:295
+#: src/fs/gnunet-download.c:304 src/fs/gnunet-search.c:294
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-download.c:308
+#: src/fs/gnunet-download.c:307
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:311 src/fs/gnunet-search.c:298
+#: src/fs/gnunet-download.c:310 src/fs/gnunet-search.c:297
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:314
+#: src/fs/gnunet-download.c:313
 msgid "write the file to FILENAME"
 msgstr ""
 
-#: src/fs/gnunet-download.c:318
+#: src/fs/gnunet-download.c:317
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:322
+#: src/fs/gnunet-download.c:321
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:325
+#: src/fs/gnunet-download.c:324
 msgid "download a GNUnet directory recursively"
 msgstr ""
 
-#: src/fs/gnunet-download.c:339
+#: src/fs/gnunet-download.c:338
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
@@ -3367,130 +3363,130 @@
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:238 src/fs/gnunet-publish.c:250
+#: src/fs/gnunet-publish.c:221 src/fs/gnunet-publish.c:233
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:241
 #, c-format
 msgid "Error publishing: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:268
+#: src/fs/gnunet-publish.c:248
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:253
 #, c-format
 msgid "URI is `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:281
+#: src/fs/gnunet-publish.c:261
 #, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:299
+#: src/fs/gnunet-publish.c:277
 msgid "Starting cleanup after abort\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:306
+#: src/fs/gnunet-publish.c:284
 msgid "Cleanup after abort completed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:312
+#: src/fs/gnunet-publish.c:290
 msgid "Cleanup after abort failed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:447
+#: src/fs/gnunet-publish.c:432
 #, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:449
+#: src/fs/gnunet-publish.c:437
 #, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:594
+#: src/fs/gnunet-publish.c:591
 msgid "Could not publish\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:619
+#: src/fs/gnunet-publish.c:616
 msgid "Could not start publishing.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:653
+#: src/fs/gnunet-publish.c:650
 #, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:657
+#: src/fs/gnunet-publish.c:654
 #, c-format
 msgid "Scanning file `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:660
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:670
+#: src/fs/gnunet-publish.c:667
 msgid "Preprocessing complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:672
 #, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:682
+#: src/fs/gnunet-publish.c:679
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:691
+#: src/fs/gnunet-publish.c:688
 msgid "Internal error scanning directory.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:723
+#: src/fs/gnunet-publish.c:716
 #, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:755
+#: src/fs/gnunet-publish.c:749
 #, c-format
 msgid "Failed to access `%s': %s\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:769
+#: src/fs/gnunet-publish.c:763
 msgid ""
 "Failed to start meta directory scanner.  Is gnunet-helper-publish-fs "
 "installed?\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:825
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:832
+#: src/fs/gnunet-publish.c:826
 #, c-format
 msgid "You must specify one and only one filename for insertion.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:838
+#: src/fs/gnunet-publish.c:832
 #, c-format
 msgid "You must NOT specify an URI and a filename.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:846 src/vpn/gnunet-vpn.c:209
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:209
 #, c-format
 msgid "Option `%s' is required when using option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:857 src/fs/gnunet-publish.c:865
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
 #: src/transport/gnunet-transport.c:1928 src/transport/gnunet-transport.c:1958
 #: src/transport/gnunet-transport.c:1989
 #, c-format
@@ -3497,56 +3493,56 @@
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:919
+#: src/fs/gnunet-publish.c:912
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:923
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "add an additional keyword for the top-level file or directory (this option "
 "can be specified multiple times)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:927
+#: src/fs/gnunet-publish.c:920
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:930
+#: src/fs/gnunet-publish.c:923
 msgid ""
 "do not index, perform full insertion (stores entire file in encrypted form "
 "in GNUnet database)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:935
+#: src/fs/gnunet-publish.c:928
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:943
+#: src/fs/gnunet-publish.c:936
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:949
+#: src/fs/gnunet-publish.c:942
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:953
+#: src/fs/gnunet-publish.c:946
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:957
+#: src/fs/gnunet-publish.c:950
 msgid ""
 "URI to be published (can be used instead of passing a file to add keywords "
 "to the file with the respective URI)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:973
+#: src/fs/gnunet-publish.c:966
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
@@ -3560,27 +3556,27 @@
 msgid "Error searching: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:246
+#: src/fs/gnunet-search.c:245
 msgid "Could not create keyword URI from arguments.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:270
+#: src/fs/gnunet-search.c:269
 msgid "Could not start searching.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:301
+#: src/fs/gnunet-search.c:300
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
-#: src/fs/gnunet-search.c:304
+#: src/fs/gnunet-search.c:303
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:311
+#: src/fs/gnunet-search.c:310
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
-#: src/fs/gnunet-search.c:322
+#: src/fs/gnunet-search.c:321
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr ""
 
@@ -3936,16 +3932,16 @@
 msgid "Unindexing done.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:130
+#: src/fs/gnunet-unindex.c:129
 #, c-format
 msgid "You must specify one and only one filename for unindexing.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:147
+#: src/fs/gnunet-unindex.c:146
 msgid "Could not start unindex operation.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:179
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
@@ -4334,68 +4330,68 @@
 msgid "GNS REST API initialized\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:291
+#: src/gnsrecord/plugin_gnsrecord_dns.c:359
 #, c-format
 msgid "Unable to parse IPv4 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:312
+#: src/gnsrecord/plugin_gnsrecord_dns.c:380
 #, c-format
 msgid "Failed to serialize NS record with value `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:334
+#: src/gnsrecord/plugin_gnsrecord_dns.c:402
 #, c-format
 msgid "Failed to serialize CNAME record with value `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:418
+#: src/gnsrecord/plugin_gnsrecord_dns.c:486
 #, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:455
+#: src/gnsrecord/plugin_gnsrecord_dns.c:522
 #, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:474
+#: src/gnsrecord/plugin_gnsrecord_dns.c:541
 #, c-format
 msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:497
+#: src/gnsrecord/plugin_gnsrecord_dns.c:564
 #, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:520
+#: src/gnsrecord/plugin_gnsrecord_dns.c:587
 #, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:535
+#: src/gnsrecord/plugin_gnsrecord_dns.c:602
 #, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:562
+#: src/gnsrecord/plugin_gnsrecord_dns.c:629
 #, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:578
+#: src/gnsrecord/plugin_gnsrecord_dns.c:645
 #, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:595
+#: src/gnsrecord/plugin_gnsrecord_dns.c:662
 #, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:619
-#: src/gnsrecord/plugin_gnsrecord_dns.c:635
+#: src/gnsrecord/plugin_gnsrecord_dns.c:686
+#: src/gnsrecord/plugin_gnsrecord_dns.c:702
 #, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr ""
@@ -4900,6 +4896,30 @@
 msgid "Namecache failed to cache block"
 msgstr ""
 
+#: src/namecache/plugin_namecache_flat.c:119
+#: src/namecache/plugin_namecache_flat.c:236
+#: src/namestore/plugin_namestore_flat.c:184
+#: src/namestore/plugin_namestore_flat.c:352
+#, c-format
+msgid "Unable to initialize file: %s.\n"
+msgstr ""
+
+#: src/namecache/plugin_namecache_flat.c:130
+#: src/namestore/plugin_namestore_flat.c:195
+#, c-format
+msgid "Unable to get filesize: %s.\n"
+msgstr ""
+
+#: src/namecache/plugin_namecache_flat.c:142
+#: src/namestore/plugin_namestore_flat.c:207
+#, fuzzy, c-format
+msgid "Unable to read file: %s.\n"
+msgstr "pa_stream_new() échoué : %s\n"
+
+#: src/namecache/plugin_namecache_flat.c:391
+msgid "flat plugin running\n"
+msgstr ""
+
 #: src/namecache/plugin_namecache_postgres.c:89
 #: src/namestore/plugin_namestore_postgres.c:96
 msgid "Failed to create indices\n"
@@ -4996,8 +5016,7 @@
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr ""
 
-#: src/namestore/gnunet-namestore.c:868
-#: src/peerinfo-tool/gnunet-peerinfo.c:817
+#: src/namestore/gnunet-namestore.c:868 src/peerinfo-tool/gnunet-peerinfo.c:817
 #, c-format
 msgid "Invalid URI `%s'\n"
 msgstr ""
@@ -5153,10 +5172,18 @@
 msgid "Namestore failed to store record\n"
 msgstr ""
 
+#: src/namestore/plugin_namestore_flat.c:650
+msgid "flat file database running\n"
+msgstr ""
+
 #: src/namestore/plugin_rest_namestore.c:1023
 msgid "Namestore REST API initialized\n"
 msgstr ""
 
+#: src/nat/gnunet-nat.c:160
+msgid "GNUnet NAT traversal autoconfigure daemon"
+msgstr ""
+
 #: src/nat/gnunet-nat-server.c:279
 #, c-format
 msgid "Please pass valid port number as the first argument! (got `%s')\n"
@@ -5166,53 +5193,57 @@
 msgid "GNUnet NAT traversal test helper daemon"
 msgstr ""
 
-#: src/nat/nat_auto.c:179
+#: src/nat/nat_auto.c:394
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:180
+#: src/nat/nat_auto.c:395
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:201
+#: src/nat/nat_auto.c:416
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:249
+#: src/nat/nat_auto.c:448
 #, c-format
 msgid "Detected external IP `%s'\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:327
+#: src/nat/nat_auto.c:579
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:343
+#: src/nat/nat_auto.c:597
 #, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:406
+#: src/nat/nat_auto.c:669 src/nat/nat_test.c:364
+msgid "Failed to connect to `gnunet-nat-server'\n"
+msgstr ""
+
+#: src/nat/nat_auto.c:715
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:407
+#: src/nat/nat_auto.c:716
 msgid "upnpc not found\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:437
+#: src/nat/nat_auto.c:748
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:445 src/nat/nat_auto.c:490
+#: src/nat/nat_auto.c:756 src/nat/nat_auto.c:804
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:453 src/nat/nat_auto.c:498
+#: src/nat/nat_auto.c:764 src/nat/nat_auto.c:812
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:483
+#: src/nat/nat_auto.c:797
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
@@ -5226,26 +5257,26 @@
 msgid "Failed to start %s\n"
 msgstr ""
 
-#: src/nat/nat.c:1286
+#: src/nat/nat.c:1305
 msgid "Error while running upnp client:\n"
 msgstr ""
 
-#: src/nat/nat.c:1356
+#: src/nat/nat.c:1375
 #, c-format
 msgid "Failed to run upnp client for port %u\n"
 msgstr ""
 
-#: src/nat/nat.c:1498
+#: src/nat/nat.c:1517
 msgid "malformed"
 msgstr ""
 
-#: src/nat/nat.c:1552
+#: src/nat/nat.c:1571
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP \n"
 msgstr ""
 
-#: src/nat/nat.c:1680 src/nat/nat.c:1692
+#: src/nat/nat.c:1700 src/nat/nat.c:1712
 #, c-format
 msgid ""
 "Configuration requires `%s', but binary is not installed properly (SUID bit "
@@ -5252,88 +5283,88 @@
 "not set).  Option disabled.\n"
 msgstr ""
 
-#: src/nat/nat.c:1830
+#: src/nat/nat.c:1855
 msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
 msgstr ""
 
-#: src/nat/nat.c:1846
+#: src/nat/nat.c:1871
 #, c-format
 msgid "Running gnunet-helper-nat-client %s %s %u\n"
 msgstr ""
 
-#: src/nat/nat.c:1931
+#: src/nat/nat.c:1958
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat/nat.c:1933
+#: src/nat/nat.c:1960
 msgid "Internal Failure (IPC, ...)"
 msgstr ""
 
-#: src/nat/nat.c:1935
+#: src/nat/nat.c:1962
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat/nat.c:1937
+#: src/nat/nat.c:1964
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat/nat.c:1939
+#: src/nat/nat.c:1966
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat/nat.c:1941
+#: src/nat/nat.c:1968
 msgid "`upnpc` command not found"
 msgstr ""
 
-#: src/nat/nat.c:1943
+#: src/nat/nat.c:1970
 msgid "Failed to run `upnpc` command"
 msgstr ""
 
-#: src/nat/nat.c:1945
+#: src/nat/nat.c:1972
 msgid "`upnpc' command took too long, process killed"
 msgstr ""
 
-#: src/nat/nat.c:1947
+#: src/nat/nat.c:1974
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat/nat.c:1949
+#: src/nat/nat.c:1976
 msgid "`external-ip' command not found"
 msgstr ""
 
-#: src/nat/nat.c:1951
+#: src/nat/nat.c:1978
 msgid "Failed to run `external-ip` command"
 msgstr ""
 
-#: src/nat/nat.c:1953
+#: src/nat/nat.c:1980
 msgid "`external-ip' command output invalid"
 msgstr ""
 
-#: src/nat/nat.c:1955
+#: src/nat/nat.c:1982
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat/nat.c:1957
+#: src/nat/nat.c:1984
 msgid "Could not determine interface with internal/local network address"
 msgstr ""
 
-#: src/nat/nat.c:1959
+#: src/nat/nat.c:1986
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat/nat.c:1961
+#: src/nat/nat.c:1988
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat/nat.c:1963
+#: src/nat/nat.c:1990
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat/nat.c:1965
+#: src/nat/nat.c:1992
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat/nat.c:1967
+#: src/nat/nat.c:1994
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
@@ -5345,16 +5376,12 @@
 msgid "`upnpc' command not found\n"
 msgstr ""
 
-#: src/nat/nat_test.c:360
-msgid "Failed to connect to `gnunet-nat-server'\n"
-msgstr ""
-
-#: src/nat/nat_test.c:462
+#: src/nat/nat_test.c:467
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat/nat_test.c:497
+#: src/nat/nat_test.c:502
 msgid "NAT test failed to start NAT library\n"
 msgstr ""
 
@@ -5394,8 +5421,8 @@
 msgid "Measure quality and performance of the NSE service."
 msgstr ""
 
-#: src/nse/gnunet-service-nse.c:1537
-#: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260
+#: src/nse/gnunet-service-nse.c:1541
+#: src/revocation/gnunet-service-revocation.c:848 src/util/gnunet-scrypt.c:260
 msgid "Value is too large.\n"
 msgstr ""
 
@@ -5644,7 +5671,7 @@
 msgstr ""
 
 #: src/peerstore/plugin_peerstore_sqlite.c:398
-#: src/psycstore/plugin_psycstore_sqlite.c:281
+#: src/psycstore/plugin_psycstore_sqlite.c:282
 #, c-format
 msgid ""
 "Error executing SQL query: %s\n"
@@ -5652,7 +5679,7 @@
 msgstr ""
 
 #: src/peerstore/plugin_peerstore_sqlite.c:422
-#: src/psycstore/plugin_psycstore_sqlite.c:258
+#: src/psycstore/plugin_psycstore_sqlite.c:259
 #, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
@@ -5702,38 +5729,44 @@
 msgid "Failed to get master counters!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:645
-msgid "Failed to begin modifying state!\n"
+#: src/psycstore/gnunet-service-psycstore.c:657
+#, c-format
+msgid "Failed to begin modifying state: %d\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:656
+#: src/psycstore/gnunet-service-psycstore.c:667
+#, c-format
+msgid "Failed to modify state: %d\n"
+msgstr ""
+
+#: src/psycstore/gnunet-service-psycstore.c:675
 msgid "Failed to end modifying state!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:686
+#: src/psycstore/gnunet-service-psycstore.c:706
 msgid "Tried to set invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:700
+#: src/psycstore/gnunet-service-psycstore.c:720
 msgid "Failed to begin synchronizing state!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:717
+#: src/psycstore/gnunet-service-psycstore.c:737
 msgid "Failed to end synchronizing state!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:737
-#: src/psycstore/gnunet-service-psycstore.c:756
+#: src/psycstore/gnunet-service-psycstore.c:757
+#: src/psycstore/gnunet-service-psycstore.c:776
 msgid "Failed to reset state!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:779
-#: src/psycstore/gnunet-service-psycstore.c:830
+#: src/psycstore/gnunet-service-psycstore.c:799
+#: src/psycstore/gnunet-service-psycstore.c:850
 msgid "Tried to get invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:806
-#: src/psycstore/gnunet-service-psycstore.c:845
+#: src/psycstore/gnunet-service-psycstore.c:826
+#: src/psycstore/gnunet-service-psycstore.c:865
 msgid "Failed to get state variable!\n"
 msgstr ""
 
@@ -5742,7 +5775,7 @@
 msgid "`%s' failed at %s:%d with error: %s (%d)\n"
 msgstr ""
 
-#: src/psycstore/plugin_psycstore_sqlite.c:1907
+#: src/psycstore/plugin_psycstore_sqlite.c:1923
 msgid "SQLite database running\n"
 msgstr ""
 
@@ -5993,33 +6026,33 @@
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:427
+#: src/revocation/gnunet-service-revocation.c:481
 msgid "# unsupported revocations received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:436
+#: src/revocation/gnunet-service-revocation.c:490
 msgid "# revocation messages received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:441
+#: src/revocation/gnunet-service-revocation.c:495
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:445
+#: src/revocation/gnunet-service-revocation.c:499
 msgid "# revocation set unions failed"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:454
+#: src/revocation/gnunet-service-revocation.c:508
 msgid "# revocation set unions completed"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:493
-#: src/revocation/gnunet-service-revocation.c:759
+#: src/revocation/gnunet-service-revocation.c:547
+#: src/revocation/gnunet-service-revocation.c:780
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:851
+#: src/revocation/gnunet-service-revocation.c:872
 msgid "Could not open revocation database file!"
 msgstr ""
 
@@ -6081,7 +6114,9 @@
 msgstr ""
 
 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1419
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1564
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1549
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1193
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1252
 msgid "Connect to CADET failed\n"
 msgstr ""
 
@@ -6326,7 +6361,7 @@
 msgid "Error loading sensor from file: %s\n"
 msgstr ""
 
-#: src/set/gnunet-service-set.c:1531
+#: src/set/gnunet-service-set.c:1960
 msgid "Could not connect to cadet service\n"
 msgstr ""
 
@@ -6447,7 +6482,7 @@
 msgid "Could not save some persistent statistics\n"
 msgstr ""
 
-#: src/statistics/statistics_api.c:1090
+#: src/statistics/statistics_api.c:1088
 msgid ""
 "Failed to receive acknowledgement from statistics service, some statistics "
 "might have been lost!\n"
@@ -7981,7 +8016,7 @@
 msgid "# sessions allocated"
 msgstr ""
 
-#: src/transport/transport_api.c:812
+#: src/transport/transport_api.c:827
 #, c-format
 msgid "Received unexpected message of type %u in %s:%u\n"
 msgstr ""
@@ -8024,17 +8059,17 @@
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:263 src/util/client.c:889 src/util/service.c:621
+#: src/util/client.c:264 src/util/client.c:894 src/util/service.c:621
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/util/client.c:267 src/util/client.c:894 src/util/service.c:625
+#: src/util/client.c:268 src/util/client.c:899 src/util/service.c:625
 #, c-format
 msgid "Using `%s' instead\n"
 msgstr ""
 
-#: src/util/client.c:362
+#: src/util/client.c:367
 #, c-format
 msgid ""
 "Could not determine valid hostname and port for service `%s' from "
@@ -8041,17 +8076,17 @@
 "configuration.\n"
 msgstr ""
 
-#: src/util/client.c:370
+#: src/util/client.c:375
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/client.c:1039
+#: src/util/client.c:1044
 #, c-format
 msgid "Could not connect to service `%s', configuration broken.\n"
 msgstr ""
 
-#: src/util/client.c:1051
+#: src/util/client.c:1056
 #, c-format
 msgid "Failure to transmit request to service `%s'\n"
 msgstr ""
@@ -8133,12 +8168,12 @@
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/connection.c:424
+#: src/util/connection.c:429
 #, c-format
 msgid "Access denied to `%s'\n"
 msgstr ""
 
-#: src/util/connection.c:441
+#: src/util/connection.c:446
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
@@ -8203,17 +8238,17 @@
 msgid "libgcrypt has not the expected version (version %s is required).\n"
 msgstr ""
 
-#: src/util/crypto_rsa.c:981
+#: src/util/crypto_rsa.c:999
 #, c-format
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr ""
 
-#: src/util/disk.c:1221
+#: src/util/disk.c:1226
 #, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr ""
 
-#: src/util/disk.c:1444 src/util/service.c:1328
+#: src/util/disk.c:1449 src/util/service.c:1328
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr ""
@@ -8702,6 +8737,16 @@
 msgid "signal (%d, %p) returned %d.\n"
 msgstr ""
 
+#: src/util/socks.c:592
+#, c-format
+msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
+msgstr ""
+
+#: src/util/socks.c:605
+#, c-format
+msgid "Attempting to proxy service `%s' to invalid port %d or hostname `%s'.\n"
+msgstr ""
+
 #: src/util/strings.c:146
 msgid "b"
 msgstr ""

Modified: gnunet/po/sv.po
===================================================================
--- gnunet/po/sv.po     2015-09-16 13:18:29 UTC (rev 36366)
+++ gnunet/po/sv.po     2015-09-22 01:20:28 UTC (rev 36367)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: GNUnet 0.7.0b\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2015-07-24 15:20+0200\n"
+"POT-Creation-Date: 2015-09-06 02:18+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"
@@ -352,13 +352,11 @@
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3290
-#: src/ats-tests/gnunet-solver-eval.c:918
+#: src/ats/gnunet-ats-solver-eval.c:3290 src/ats-tests/gnunet-solver-eval.c:918
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3293
-#: src/ats-tests/gnunet-solver-eval.c:921
+#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:921
 #: src/ats-tests/gnunet-solver-eval.c:924
 msgid "experiment to use"
 msgstr ""
@@ -643,58 +641,58 @@
 msgid "Print information about ATS state"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/cadet/gnunet-cadet.c:376
+#: src/cadet/gnunet-cadet.c:458
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/cadet/gnunet-cadet.c:643
+#: src/cadet/gnunet-cadet.c:735
 #, fuzzy, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr "Ogiltiga argument: "
 
-#: src/cadet/gnunet-cadet.c:686
+#: src/cadet/gnunet-cadet.c:778
 #, fuzzy, c-format
 msgid "Invalid tunnel owner `%s'\n"
 msgstr "Ogiltigt format för IP: \"%s\"\n"
 
-#: src/cadet/gnunet-cadet.c:752
-msgid "You must NOT give a TARGETwhen using 'request all' options\n"
+#: src/cadet/gnunet-cadet.c:844
+msgid "You must NOT give a TARGET when using 'request all' options\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:849
+#: src/cadet/gnunet-cadet.c:941
 #, fuzzy
 msgid "provide information about a particular connection"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/cadet/gnunet-cadet.c:852
+#: src/cadet/gnunet-cadet.c:944
 msgid "activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:855
+#: src/cadet/gnunet-cadet.c:947
 msgid "dump debug information to STDERR"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:861
+#: src/cadet/gnunet-cadet.c:953
 msgid "port to listen to (default; 0)"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:864
+#: src/cadet/gnunet-cadet.c:956
 #, fuzzy
 msgid "provide information about a patricular peer"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/cadet/gnunet-cadet.c:867
+#: src/cadet/gnunet-cadet.c:959
 #, fuzzy
 msgid "provide information about all peers"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/cadet/gnunet-cadet.c:870
+#: src/cadet/gnunet-cadet.c:962
 #, fuzzy
 msgid "provide information about a particular tunnel"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/cadet/gnunet-cadet.c:873
+#: src/cadet/gnunet-cadet.c:965
 #, fuzzy
 msgid "provide information about all tunnels"
 msgstr "Skriv ut information om GNUnets motparter."
@@ -1437,21 +1435,21 @@
 msgid "# PAYLOAD dropped (out of order)"
 msgstr "# byte kastade via UDP (utgående)"
 
-#: src/core/gnunet-service-core_neighbours.c:177
+#: src/core/gnunet-service-core_neighbours.c:178
 #, fuzzy
 msgid "# sessions terminated by transport disconnect"
 msgstr "Nätverksannonsering avstängd i konfigurationen!\n"
 
-#: src/core/gnunet-service-core_neighbours.c:193
-#: src/core/gnunet-service-core_neighbours.c:355
+#: src/core/gnunet-service-core_neighbours.c:194
+#: src/core/gnunet-service-core_neighbours.c:362
 msgid "# neighbour entries allocated"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:264
+#: src/core/gnunet-service-core_neighbours.c:270
 msgid "# encrypted bytes given to transport"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:438
+#: src/core/gnunet-service-core_neighbours.c:448
 #, c-format
 msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n"
 msgstr ""
@@ -1498,7 +1496,7 @@
 msgstr ""
 
 #: src/datacache/datacache.c:119 src/datacache/datacache.c:294
-#: src/datastore/gnunet-service-datastore.c:853
+#: src/datastore/gnunet-service-datastore.c:866
 #, fuzzy
 msgid "# bytes stored"
 msgstr "# byte krypterade"
@@ -1577,91 +1575,91 @@
 msgid "Failed to transmit request to drop database.\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
 
-#: src/datastore/datastore_api.c:394
+#: src/datastore/datastore_api.c:395
 msgid "# queue entry timeouts"
 msgstr ""
 
-#: src/datastore/datastore_api.c:443
+#: src/datastore/datastore_api.c:450
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:471
+#: src/datastore/datastore_api.c:478
 #, fuzzy
 msgid "# queue entries created"
 msgstr "# PING-meddelanden skapade"
 
-#: src/datastore/datastore_api.c:491
+#: src/datastore/datastore_api.c:498
 msgid "# Requests dropped from datastore queue"
 msgstr ""
 
-#: src/datastore/datastore_api.c:533
+#: src/datastore/datastore_api.c:540
 #, fuzzy
 msgid "# datastore connections (re)created"
 msgstr "Nätverksanslutning"
 
-#: src/datastore/datastore_api.c:621
+#: src/datastore/datastore_api.c:628
 #, fuzzy
 msgid "# transmission request failures"
 msgstr "# klartext PONG-meddelanden mottagna"
 
-#: src/datastore/datastore_api.c:645
+#: src/datastore/datastore_api.c:652
 #, fuzzy
 msgid "# bytes sent to datastore"
 msgstr "# byte krypterade"
 
-#: src/datastore/datastore_api.c:787
+#: src/datastore/datastore_api.c:794
 #, fuzzy
 msgid "Failed to receive status response from database."
 msgstr "Misslyckades att ta emot svar till \"%s\" meddelande från gnunetd\n"
 
-#: src/datastore/datastore_api.c:801
+#: src/datastore/datastore_api.c:808
 msgid "Error reading response from datastore service"
 msgstr ""
 
-#: src/datastore/datastore_api.c:813 src/datastore/datastore_api.c:819
+#: src/datastore/datastore_api.c:820 src/datastore/datastore_api.c:826
 #, fuzzy
 msgid "Invalid error message received from datastore service"
 msgstr "Ogiltigt meddelande mottogs den %s:%d."
 
-#: src/datastore/datastore_api.c:823
+#: src/datastore/datastore_api.c:830
 #, fuzzy
 msgid "# status messages received"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/datastore/datastore_api.c:893
+#: src/datastore/datastore_api.c:909
 msgid "# PUT requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:959
+#: src/datastore/datastore_api.c:975
 msgid "# RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1020
+#: src/datastore/datastore_api.c:1036
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1080
+#: src/datastore/datastore_api.c:1096
 msgid "# UPDATE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1144
+#: src/datastore/datastore_api.c:1160
 msgid "# REMOVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1248
+#: src/datastore/datastore_api.c:1264
 #, fuzzy
 msgid "# Results received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/datastore_api.c:1315
+#: src/datastore/datastore_api.c:1331
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1378
+#: src/datastore/datastore_api.c:1394
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1447
+#: src/datastore/datastore_api.c:1463
 msgid "# GET requests executed"
 msgstr ""
 
@@ -1686,30 +1684,30 @@
 msgid "Manipulate GNUnet datastore"
 msgstr "skriv ut ett värde från konfigurationsfilen till standard ut"
 
-#: src/datastore/gnunet-service-datastore.c:365
+#: src/datastore/gnunet-service-datastore.c:372
 #, fuzzy
 msgid "# bytes expired"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/gnunet-service-datastore.c:439
+#: src/datastore/gnunet-service-datastore.c:447
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:497
+#: src/datastore/gnunet-service-datastore.c:505
 #: src/gns/gnunet-gns-helper-service-w32.c:223
 msgid "Transmission to client failed!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:528
+#: src/datastore/gnunet-service-datastore.c:536
 #: src/gns/gnunet-gns-helper-service-w32.c:262
 msgid "Shutdown in progress, aborting transmission.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:643
+#: src/datastore/gnunet-service-datastore.c:652
 msgid "# results found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:686
+#: src/datastore/gnunet-service-datastore.c:696
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy `%s' request for "
@@ -1716,7 +1714,7 @@
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:697
+#: src/datastore/gnunet-service-datastore.c:707
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
@@ -1723,133 +1721,133 @@
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:701
+#: src/datastore/gnunet-service-datastore.c:711
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:707
+#: src/datastore/gnunet-service-datastore.c:717
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:712
-#: src/datastore/gnunet-service-datastore.c:767
-#: src/datastore/gnunet-service-datastore.c:1019
-#: src/datastore/gnunet-service-datastore.c:1597
+#: src/datastore/gnunet-service-datastore.c:723
+#: src/datastore/gnunet-service-datastore.c:779
+#: src/datastore/gnunet-service-datastore.c:1035
+#: src/datastore/gnunet-service-datastore.c:1630
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:780
+#: src/datastore/gnunet-service-datastore.c:793
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:865
+#: src/datastore/gnunet-service-datastore.c:879
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1071
+#: src/datastore/gnunet-service-datastore.c:1088
 #, fuzzy
 msgid "# GET requests received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/gnunet-service-datastore.c:1083
+#: src/datastore/gnunet-service-datastore.c:1101
 msgid "# requests filtered by bloomfilter"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1121
+#: src/datastore/gnunet-service-datastore.c:1141
 #, fuzzy
 msgid "# UPDATE requests received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/gnunet-service-datastore.c:1149
+#: src/datastore/gnunet-service-datastore.c:1170
 msgid "# GET REPLICATION requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1182
+#: src/datastore/gnunet-service-datastore.c:1204
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1233
 #, fuzzy
 msgid "Content not found"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/datastore/gnunet-service-datastore.c:1215
+#: src/datastore/gnunet-service-datastore.c:1244
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1247
+#: src/datastore/gnunet-service-datastore.c:1277
 #, fuzzy
 msgid "# REMOVE requests received"
 msgstr "# byte mottogs via TCP"
 
-#: src/datastore/gnunet-service-datastore.c:1291
+#: src/datastore/gnunet-service-datastore.c:1321
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1296
+#: src/datastore/gnunet-service-datastore.c:1326
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1349
+#: src/datastore/gnunet-service-datastore.c:1379
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1360
+#: src/datastore/gnunet-service-datastore.c:1390
 #, fuzzy, c-format
 msgid "Failed to load datastore plugin for `%s'\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/datastore/gnunet-service-datastore.c:1429
-#: src/datastore/gnunet-service-datastore.c:1490
+#: src/datastore/gnunet-service-datastore.c:1459
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1477
+#: src/datastore/gnunet-service-datastore.c:1509
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1487
+#: src/datastore/gnunet-service-datastore.c:1519
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1625
-#: src/datastore/gnunet-service-datastore.c:1636
+#: src/datastore/gnunet-service-datastore.c:1661
+#: src/datastore/gnunet-service-datastore.c:1673
 #, 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:1630
+#: src/datastore/gnunet-service-datastore.c:1667
 #, fuzzy, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr "# byte krypterade"
 
-#: src/datastore/gnunet-service-datastore.c:1641
+#: src/datastore/gnunet-service-datastore.c:1679
 msgid "# quota"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1643
+#: src/datastore/gnunet-service-datastore.c:1681
 msgid "# cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1656
+#: src/datastore/gnunet-service-datastore.c:1696
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1674
-#: src/datastore/gnunet-service-datastore.c:1690
+#: src/datastore/gnunet-service-datastore.c:1714
+#: src/datastore/gnunet-service-datastore.c:1730
 #, fuzzy, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr "Kunde inte spara konfigurationsfil \"%s\":"
 
-#: src/datastore/gnunet-service-datastore.c:1720
+#: src/datastore/gnunet-service-datastore.c:1760
 #, fuzzy
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
@@ -1909,7 +1907,7 @@
 #: src/namecache/plugin_namecache_sqlite.c:193
 #: src/namestore/plugin_namestore_sqlite.c:204
 #: src/peerstore/plugin_peerstore_sqlite.c:479
-#: src/psycstore/plugin_psycstore_sqlite.c:324
+#: src/psycstore/plugin_psycstore_sqlite.c:325
 #, fuzzy, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "Kunde inte initiera SQLite.\n"
@@ -1986,9 +1984,9 @@
 msgstr ""
 
 #: src/dht/gnunet-dht-get.c:204 src/dht/gnunet-dht-monitor.c:271
-#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:755
-#: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:961
-#: src/fs/gnunet-search.c:307 src/fs/gnunet-unindex.c:168
+#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:794
+#: src/fs/gnunet-download.c:327 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-search.c:306 src/fs/gnunet-unindex.c:167
 #: src/nse/gnunet-nse-profiler.c:873
 msgid "be verbose (print progress information)"
 msgstr ""
@@ -2005,8 +2003,7 @@
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1393
-#: src/testbed/gnunet-testbed-profiler.c:267
+#: src/dht/gnunet_dht_profiler.c:1393 src/testbed/gnunet-testbed-profiler.c:267
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "Maximalt antal chattklienter uppnått.\n"
@@ -2230,8 +2227,7 @@
 msgid "# GET requests given to datacache"
 msgstr "# byte mottogs via TCP"
 
-#: src/dht/gnunet-service-dht_hello.c:84
-#: src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
 #, fuzzy
 msgid "# HELLOs obtained from peerinfo"
 msgstr "Meddelande mottaget från klient är ogiltig.\n"
@@ -3108,7 +3104,7 @@
 msgid "Failed to connect to datastore."
 msgstr "Misslyckades att ansluta till gnunetd.\n"
 
-#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:443
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:441
 #, fuzzy, c-format
 msgid "Publishing failed: %s"
 msgstr ""
@@ -3115,49 +3111,49 @@
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/fs/fs_publish.c:709 src/fs/fs_publish.c:726 src/fs/fs_publish.c:765
-#: src/fs/fs_publish.c:786 src/fs/fs_publish.c:810 src/fs/fs_publish.c:1060
+#: src/fs/fs_publish.c:707 src/fs/fs_publish.c:724 src/fs/fs_publish.c:763
+#: src/fs/fs_publish.c:784 src/fs/fs_publish.c:808 src/fs/fs_publish.c:1058
 #, fuzzy, c-format
 msgid "Can not index file `%s': %s.  Will try to insert instead.\n"
 msgstr "Indexering av fil \"%s\" misslyckades. Försöker att infoga fil...\n"
 
-#: src/fs/fs_publish.c:711
+#: src/fs/fs_publish.c:709
 msgid "timeout on index-start request to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:723
+#: src/fs/fs_publish.c:721
 #, fuzzy
 msgid "unknown error"
 msgstr "Okänt fel"
 
-#: src/fs/fs_publish.c:767
+#: src/fs/fs_publish.c:765
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:787
+#: src/fs/fs_publish.c:785
 msgid "filename too long"
 msgstr ""
 
-#: src/fs/fs_publish.c:812
+#: src/fs/fs_publish.c:810
 #, fuzzy
 msgid "could not connect to `fs' service"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/fs/fs_publish.c:835
+#: src/fs/fs_publish.c:833
 #, fuzzy, c-format
 msgid "Failed to get file identifiers for `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/fs/fs_publish.c:899 src/fs/fs_publish.c:940
+#: src/fs/fs_publish.c:897 src/fs/fs_publish.c:938
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1014
+#: src/fs/fs_publish.c:1012
 #, fuzzy, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/fs/fs_publish.c:1022
+#: src/fs/fs_publish.c:1020
 #, fuzzy, c-format
 msgid "Recursive upload failed: %s"
 msgstr ""
@@ -3164,21 +3160,21 @@
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/fs/fs_publish.c:1062
+#: src/fs/fs_publish.c:1060
 msgid "needs to be an actual file"
 msgstr ""
 
-#: src/fs/fs_publish.c:1301
+#: src/fs/fs_publish.c:1299
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr " Anslutning misslyckades (fel?)\n"
 
-#: src/fs/fs_publish.c:1392
+#: src/fs/fs_publish.c:1390
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:219
+#: src/fs/fs_publish_ksk.c:224
 #, fuzzy
 msgid "Could not connect to datastore."
 msgstr "Kunde inte ansluta till gnunetd.\n"
@@ -3359,12 +3355,12 @@
 msgid "Failed to save state to file %s\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/fs/gnunet-auto-share.c:402
+#: src/fs/gnunet-auto-share.c:415
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:490
+#: src/fs/gnunet-auto-share.c:504
 #, fuzzy, c-format
 msgid "Publishing `%s'\n"
 msgstr ""
@@ -3371,38 +3367,38 @@
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/fs/gnunet-auto-share.c:499
+#: src/fs/gnunet-auto-share.c:514
 #, fuzzy, c-format
 msgid "Failed to run `%s'\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/fs/gnunet-auto-share.c:688
+#: src/fs/gnunet-auto-share.c:725
 #, fuzzy, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
 msgstr "Du måste ange en och endast en fil att avindexera.\n"
 
-#: src/fs/gnunet-auto-share.c:739 src/fs/gnunet-publish.c:908
+#: src/fs/gnunet-auto-share.c:778 src/fs/gnunet-publish.c:901
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:743 src/fs/gnunet-publish.c:912
+#: src/fs/gnunet-auto-share.c:782 src/fs/gnunet-publish.c:905
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:746 src/fs/gnunet-publish.c:915
+#: src/fs/gnunet-auto-share.c:785 src/fs/gnunet-publish.c:908
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:749 src/fs/gnunet-publish.c:939
+#: src/fs/gnunet-auto-share.c:788 src/fs/gnunet-publish.c:932
 msgid "specify the priority of the content"
 msgstr "ange prioritet för innehållet"
 
-#: src/fs/gnunet-auto-share.c:752 src/fs/gnunet-publish.c:946
+#: src/fs/gnunet-auto-share.c:791 src/fs/gnunet-publish.c:939
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:772
+#: src/fs/gnunet-auto-share.c:815
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr ""
 
@@ -3472,65 +3468,65 @@
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr "Uppladdning vägrades!"
 
-#: src/fs/gnunet-download.c:209 src/fs/gnunet-publish.c:319
-#: src/fs/gnunet-search.c:206 src/fs/gnunet-unindex.c:108
+#: src/fs/gnunet-download.c:208 src/fs/gnunet-publish.c:297
+#: src/fs/gnunet-search.c:205 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:234
+#: src/fs/gnunet-download.c:233
 #, fuzzy
 msgid "You need to specify a URI argument.\n"
 msgstr "Du måste ange en och endast en fil att avindexera.\n"
 
-#: src/fs/gnunet-download.c:240 src/fs/gnunet-publish.c:734
+#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:728
 #, fuzzy, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr "Fil \"%s\" har URI: %s\n"
 
-#: src/fs/gnunet-download.c:247
+#: src/fs/gnunet-download.c:246
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:254
+#: src/fs/gnunet-download.c:253
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:268 src/fs/gnunet-publish.c:878
-#: src/fs/gnunet-search.c:256 src/fs/gnunet-unindex.c:140
+#: src/fs/gnunet-download.c:267 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:255 src/fs/gnunet-unindex.c:139
 #, fuzzy, c-format
 msgid "Could not initialize `%s' subsystem.\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/fs/gnunet-download.c:305 src/fs/gnunet-search.c:295
+#: src/fs/gnunet-download.c:304 src/fs/gnunet-search.c:294
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-download.c:308
+#: src/fs/gnunet-download.c:307
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:311 src/fs/gnunet-search.c:298
+#: src/fs/gnunet-download.c:310 src/fs/gnunet-search.c:297
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:314
+#: src/fs/gnunet-download.c:313
 msgid "write the file to FILENAME"
 msgstr "skriv filen till FILNAMN"
 
-#: src/fs/gnunet-download.c:318
+#: src/fs/gnunet-download.c:317
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:322
+#: src/fs/gnunet-download.c:321
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:325
+#: src/fs/gnunet-download.c:324
 msgid "download a GNUnet directory recursively"
 msgstr "hämta en GNUnet-katalog rekursivt"
 
-#: src/fs/gnunet-download.c:339
+#: src/fs/gnunet-download.c:338
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
@@ -3561,137 +3557,137 @@
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:238 src/fs/gnunet-publish.c:250
+#: src/fs/gnunet-publish.c:221 src/fs/gnunet-publish.c:233
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:241
 #, fuzzy, c-format
 msgid "Error publishing: %s.\n"
 msgstr "Fel vid nedladdning: %s\n"
 
-#: src/fs/gnunet-publish.c:268
+#: src/fs/gnunet-publish.c:248
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:253
 #, fuzzy, c-format
 msgid "URI is `%s'.\n"
 msgstr "Jag är ändpunkt \"%s\".\n"
 
-#: src/fs/gnunet-publish.c:281
+#: src/fs/gnunet-publish.c:261
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr "Jag är ändpunkt \"%s\".\n"
 
-#: src/fs/gnunet-publish.c:299
+#: src/fs/gnunet-publish.c:277
 #, fuzzy
 msgid "Starting cleanup after abort\n"
 msgstr "\"%s\" uppstart klar.\n"
 
-#: src/fs/gnunet-publish.c:306
+#: src/fs/gnunet-publish.c:284
 #, fuzzy
 msgid "Cleanup after abort completed.\n"
 msgstr "\"%s\" uppstart klar.\n"
 
-#: src/fs/gnunet-publish.c:312
+#: src/fs/gnunet-publish.c:290
 #, fuzzy
 msgid "Cleanup after abort failed.\n"
 msgstr "\"%s\" uppstart klar.\n"
 
-#: src/fs/gnunet-publish.c:447
+#: src/fs/gnunet-publish.c:432
 #, fuzzy, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr "Uppdaterar data för modul \"%s\"\n"
 
-#: src/fs/gnunet-publish.c:449
+#: src/fs/gnunet-publish.c:437
 #, fuzzy, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "Nyckelord för fil \"%s\":\n"
 
-#: src/fs/gnunet-publish.c:594
+#: src/fs/gnunet-publish.c:591
 #, fuzzy
 msgid "Could not publish\n"
 msgstr "Kunde inte köra \"%s\": %s\n"
 
-#: src/fs/gnunet-publish.c:619
+#: src/fs/gnunet-publish.c:616
 #, fuzzy
 msgid "Could not start publishing.\n"
 msgstr "Kunde inte slå upp \"%s\": %s\n"
 
-#: src/fs/gnunet-publish.c:653
+#: src/fs/gnunet-publish.c:650
 #, fuzzy, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/fs/gnunet-publish.c:657
+#: src/fs/gnunet-publish.c:654
 #, fuzzy, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "Startade samling \"%s\".\n"
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:660
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:670
+#: src/fs/gnunet-publish.c:667
 #, fuzzy
 msgid "Preprocessing complete.\n"
 msgstr "Nedstängning klar.\n"
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:672
 #, fuzzy, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr "Uppdaterar data för modul \"%s\"\n"
 
-#: src/fs/gnunet-publish.c:682
+#: src/fs/gnunet-publish.c:679
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:691
+#: src/fs/gnunet-publish.c:688
 #, fuzzy
 msgid "Internal error scanning directory.\n"
 msgstr "=\tFel vid läsning av katalog.\n"
 
-#: src/fs/gnunet-publish.c:723
+#: src/fs/gnunet-publish.c:716
 #, fuzzy, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr "Namnrymd \"%s\" skapad(rot: %s).\n"
 
-#: src/fs/gnunet-publish.c:755
+#: src/fs/gnunet-publish.c:749
 #, fuzzy, c-format
 msgid "Failed to access `%s': %s\n"
 msgstr "Misslyckades att leverera \"%s\" meddelande.\n"
 
-#: src/fs/gnunet-publish.c:769
+#: src/fs/gnunet-publish.c:763
 msgid ""
 "Failed to start meta directory scanner.  Is gnunet-helper-publish-fs "
 "installed?\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:825
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:832
+#: src/fs/gnunet-publish.c:826
 #, fuzzy, c-format
 msgid "You must specify one and only one filename for insertion.\n"
 msgstr "Du måste ange en och endast en fil att avindexera.\n"
 
-#: src/fs/gnunet-publish.c:838
+#: src/fs/gnunet-publish.c:832
 #, fuzzy, c-format
 msgid "You must NOT specify an URI and a filename.\n"
 msgstr "Du måste ange en och endast en fil att avindexera.\n"
 
-#: src/fs/gnunet-publish.c:846 src/vpn/gnunet-vpn.c:209
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:209
 #, fuzzy, c-format
 msgid "Option `%s' is required when using option `%s'.\n"
 msgstr "Kommando \"%s\" kräver ett argument (\"%s\").\n"
 
-#: src/fs/gnunet-publish.c:857 src/fs/gnunet-publish.c:865
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
 #: src/transport/gnunet-transport.c:1928 src/transport/gnunet-transport.c:1958
 #: src/transport/gnunet-transport.c:1989
 #, c-format
@@ -3698,56 +3694,56 @@
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:919
+#: src/fs/gnunet-publish.c:912
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:923
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "add an additional keyword for the top-level file or directory (this option "
 "can be specified multiple times)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:927
+#: src/fs/gnunet-publish.c:920
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:930
+#: src/fs/gnunet-publish.c:923
 msgid ""
 "do not index, perform full insertion (stores entire file in encrypted form "
 "in GNUnet database)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:935
+#: src/fs/gnunet-publish.c:928
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:943
+#: src/fs/gnunet-publish.c:936
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:949
+#: src/fs/gnunet-publish.c:942
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:953
+#: src/fs/gnunet-publish.c:946
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:957
+#: src/fs/gnunet-publish.c:950
 msgid ""
 "URI to be published (can be used instead of passing a file to add keywords "
 "to the file with the respective URI)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:973
+#: src/fs/gnunet-publish.c:966
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
@@ -3761,29 +3757,29 @@
 msgid "Error searching: %s.\n"
 msgstr "Fel vid lämning av DHT.\n"
 
-#: src/fs/gnunet-search.c:246
+#: src/fs/gnunet-search.c:245
 #, fuzzy
 msgid "Could not create keyword URI from arguments.\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/fs/gnunet-search.c:270
+#: src/fs/gnunet-search.c:269
 #, fuzzy
 msgid "Could not start searching.\n"
 msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
 
-#: src/fs/gnunet-search.c:301
+#: src/fs/gnunet-search.c:300
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
-#: src/fs/gnunet-search.c:304
+#: src/fs/gnunet-search.c:303
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:311
+#: src/fs/gnunet-search.c:310
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
-#: src/fs/gnunet-search.c:322
+#: src/fs/gnunet-search.c:321
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr ""
 
@@ -4171,17 +4167,17 @@
 msgid "Unindexing done.\n"
 msgstr "Avindexera filer."
 
-#: src/fs/gnunet-unindex.c:130
+#: src/fs/gnunet-unindex.c:129
 #, fuzzy, c-format
 msgid "You must specify one and only one filename for unindexing.\n"
 msgstr "Du måste ange en och endast en fil att avindexera.\n"
 
-#: src/fs/gnunet-unindex.c:147
+#: src/fs/gnunet-unindex.c:146
 #, fuzzy
 msgid "Could not start unindex operation.\n"
 msgstr "Kunde inte komma åt namnrymdsinformation.\n"
 
-#: src/fs/gnunet-unindex.c:179
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
@@ -4586,68 +4582,68 @@
 msgid "GNS REST API initialized\n"
 msgstr " Anslutning misslyckades\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:291
+#: src/gnsrecord/plugin_gnsrecord_dns.c:359
 #, fuzzy, c-format
 msgid "Unable to parse IPv4 address `%s'\n"
 msgstr "Ogiltigt svar på \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:312
+#: src/gnsrecord/plugin_gnsrecord_dns.c:380
 #, fuzzy, c-format
 msgid "Failed to serialize NS record with value `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:334
+#: src/gnsrecord/plugin_gnsrecord_dns.c:402
 #, fuzzy, c-format
 msgid "Failed to serialize CNAME record with value `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:418
+#: src/gnsrecord/plugin_gnsrecord_dns.c:486
 #, fuzzy, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:455
+#: src/gnsrecord/plugin_gnsrecord_dns.c:522
 #, fuzzy, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:474
+#: src/gnsrecord/plugin_gnsrecord_dns.c:541
 #, fuzzy, c-format
 msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:497
+#: src/gnsrecord/plugin_gnsrecord_dns.c:564
 #, fuzzy, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:520
+#: src/gnsrecord/plugin_gnsrecord_dns.c:587
 #, fuzzy, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:535
+#: src/gnsrecord/plugin_gnsrecord_dns.c:602
 #, fuzzy, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:562
+#: src/gnsrecord/plugin_gnsrecord_dns.c:629
 #, fuzzy, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:578
+#: src/gnsrecord/plugin_gnsrecord_dns.c:645
 #, fuzzy, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr "Kunde inte tolka konfigurationsfil \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:595
+#: src/gnsrecord/plugin_gnsrecord_dns.c:662
 #, fuzzy, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr "Ogiltigt svar på \"%s\".\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:619
-#: src/gnsrecord/plugin_gnsrecord_dns.c:635
+#: src/gnsrecord/plugin_gnsrecord_dns.c:686
+#: src/gnsrecord/plugin_gnsrecord_dns.c:702
 #, fuzzy, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr "Misslyckades att läsa kompislista från \"%s\"\n"
@@ -5166,6 +5162,30 @@
 msgid "Namecache failed to cache block"
 msgstr ""
 
+#: src/namecache/plugin_namecache_flat.c:119
+#: src/namecache/plugin_namecache_flat.c:236
+#: src/namestore/plugin_namestore_flat.c:184
+#: src/namestore/plugin_namestore_flat.c:352
+#, fuzzy, c-format
+msgid "Unable to initialize file: %s.\n"
+msgstr "Kunde inte initiera SQLite.\n"
+
+#: src/namecache/plugin_namecache_flat.c:130
+#: src/namestore/plugin_namestore_flat.c:195
+#, fuzzy, c-format
+msgid "Unable to get filesize: %s.\n"
+msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
+
+#: src/namecache/plugin_namecache_flat.c:142
+#: src/namestore/plugin_namestore_flat.c:207
+#, fuzzy, c-format
+msgid "Unable to read file: %s.\n"
+msgstr "Kunde inte skapa namnrymd \"%s\" (existerar?).\n"
+
+#: src/namecache/plugin_namecache_flat.c:391
+msgid "flat plugin running\n"
+msgstr ""
+
 #: src/namecache/plugin_namecache_postgres.c:89
 #: src/namestore/plugin_namestore_postgres.c:96
 #, fuzzy
@@ -5270,8 +5290,7 @@
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "Ogiltigt argument: \"%s\"\n"
 
-#: src/namestore/gnunet-namestore.c:868
-#: src/peerinfo-tool/gnunet-peerinfo.c:817
+#: src/namestore/gnunet-namestore.c:868 src/peerinfo-tool/gnunet-peerinfo.c:817
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "Ogiltiga argument: "
@@ -5433,11 +5452,19 @@
 msgid "Namestore failed to store record\n"
 msgstr ""
 
+#: src/namestore/plugin_namestore_flat.c:650
+msgid "flat file database running\n"
+msgstr ""
+
 #: src/namestore/plugin_rest_namestore.c:1023
 #, fuzzy
 msgid "Namestore REST API initialized\n"
 msgstr " Anslutning misslyckades\n"
 
+#: src/nat/gnunet-nat.c:160
+msgid "GNUnet NAT traversal autoconfigure daemon"
+msgstr ""
+
 #: src/nat/gnunet-nat-server.c:279
 #, c-format
 msgid "Please pass valid port number as the first argument! (got `%s')\n"
@@ -5447,55 +5474,60 @@
 msgid "GNUnet NAT traversal test helper daemon"
 msgstr ""
 
-#: src/nat/nat_auto.c:179
+#: src/nat/nat_auto.c:394
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:180
+#: src/nat/nat_auto.c:395
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:201
+#: src/nat/nat_auto.c:416
 #, fuzzy
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr "Skriv ut information om GNUnets motparter."
 
-#: src/nat/nat_auto.c:249
+#: src/nat/nat_auto.c:448
 #, fuzzy, c-format
 msgid "Detected external IP `%s'\n"
 msgstr "Mottog ogiltig RPC \"%s\".\n"
 
-#: src/nat/nat_auto.c:327
+#: src/nat/nat_auto.c:579
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:343
+#: src/nat/nat_auto.c:597
 #, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:406
+#: src/nat/nat_auto.c:669 src/nat/nat_test.c:364
+#, fuzzy
+msgid "Failed to connect to `gnunet-nat-server'\n"
+msgstr "Misslyckades att ansluta till gnunetd.\n"
+
+#: src/nat/nat_auto.c:715
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:407
+#: src/nat/nat_auto.c:716
 #, fuzzy
 msgid "upnpc not found\n"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/nat/nat_auto.c:437
+#: src/nat/nat_auto.c:748
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:445 src/nat/nat_auto.c:490
+#: src/nat/nat_auto.c:756 src/nat/nat_auto.c:804
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:453 src/nat/nat_auto.c:498
+#: src/nat/nat_auto.c:764 src/nat/nat_auto.c:812
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:483
+#: src/nat/nat_auto.c:797
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
@@ -5509,26 +5541,26 @@
 msgid "Failed to start %s\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/nat/nat.c:1286
+#: src/nat/nat.c:1305
 msgid "Error while running upnp client:\n"
 msgstr ""
 
-#: src/nat/nat.c:1356
+#: src/nat/nat.c:1375
 #, fuzzy, c-format
 msgid "Failed to run upnp client for port %u\n"
 msgstr "Misslyckades att initiera tjänsten \"%s\".\n"
 
-#: src/nat/nat.c:1498
+#: src/nat/nat.c:1517
 msgid "malformed"
 msgstr ""
 
-#: src/nat/nat.c:1552
+#: src/nat/nat.c:1571
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP \n"
 msgstr ""
 
-#: src/nat/nat.c:1680 src/nat/nat.c:1692
+#: src/nat/nat.c:1700 src/nat/nat.c:1712
 #, c-format
 msgid ""
 "Configuration requires `%s', but binary is not installed properly (SUID bit "
@@ -5535,94 +5567,94 @@
 "not set).  Option disabled.\n"
 msgstr ""
 
-#: src/nat/nat.c:1830
+#: src/nat/nat.c:1855
 msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
 msgstr ""
 
-#: src/nat/nat.c:1846
+#: src/nat/nat.c:1871
 #, c-format
 msgid "Running gnunet-helper-nat-client %s %s %u\n"
 msgstr ""
 
-#: src/nat/nat.c:1931
+#: src/nat/nat.c:1958
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat/nat.c:1933
+#: src/nat/nat.c:1960
 msgid "Internal Failure (IPC, ...)"
 msgstr ""
 
-#: src/nat/nat.c:1935
+#: src/nat/nat.c:1962
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat/nat.c:1937
+#: src/nat/nat.c:1964
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat/nat.c:1939
+#: src/nat/nat.c:1966
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat/nat.c:1941
+#: src/nat/nat.c:1968
 #, fuzzy
 msgid "`upnpc` command not found"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/nat/nat.c:1943
+#: src/nat/nat.c:1970
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/nat/nat.c:1945
+#: src/nat/nat.c:1972
 #, fuzzy
 msgid "`upnpc' command took too long, process killed"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/nat/nat.c:1947
+#: src/nat/nat.c:1974
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat/nat.c:1949
+#: src/nat/nat.c:1976
 #, fuzzy
 msgid "`external-ip' command not found"
 msgstr "Kommando \"%s\" hittades inte!\n"
 
-#: src/nat/nat.c:1951
+#: src/nat/nat.c:1978
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/nat/nat.c:1953
+#: src/nat/nat.c:1980
 msgid "`external-ip' command output invalid"
 msgstr ""
 
-#: src/nat/nat.c:1955
+#: src/nat/nat.c:1982
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat/nat.c:1957
+#: src/nat/nat.c:1984
 #, fuzzy
 msgid "Could not determine interface with internal/local network address"
 msgstr "Kunde inte fastställa min publika IPv6-adress.\n"
 
-#: src/nat/nat.c:1959
+#: src/nat/nat.c:1986
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat/nat.c:1961
+#: src/nat/nat.c:1988
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat/nat.c:1963
+#: src/nat/nat.c:1990
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat/nat.c:1965
+#: src/nat/nat.c:1992
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat/nat.c:1967
+#: src/nat/nat.c:1994
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
@@ -5634,17 +5666,12 @@
 msgid "`upnpc' command not found\n"
 msgstr ""
 
-#: src/nat/nat_test.c:360
-#, fuzzy
-msgid "Failed to connect to `gnunet-nat-server'\n"
-msgstr "Misslyckades att ansluta till gnunetd.\n"
-
-#: src/nat/nat_test.c:462
+#: src/nat/nat_test.c:467
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat/nat_test.c:497
+#: src/nat/nat_test.c:502
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "Misslyckades att starta samling.\n"
@@ -5689,8 +5716,8 @@
 msgid "Measure quality and performance of the NSE service."
 msgstr "Kan inte tillgå tjänsten"
 
-#: src/nse/gnunet-service-nse.c:1537
-#: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260
+#: src/nse/gnunet-service-nse.c:1541
+#: src/revocation/gnunet-service-revocation.c:848 src/util/gnunet-scrypt.c:260
 msgid "Value is too large.\n"
 msgstr ""
 
@@ -5950,7 +5977,7 @@
 msgstr ""
 
 #: src/peerstore/plugin_peerstore_sqlite.c:398
-#: src/psycstore/plugin_psycstore_sqlite.c:281
+#: src/psycstore/plugin_psycstore_sqlite.c:282
 #, fuzzy, c-format
 msgid ""
 "Error executing SQL query: %s\n"
@@ -5958,7 +5985,7 @@
 msgstr "Fel vid skapandet av användare"
 
 #: src/peerstore/plugin_peerstore_sqlite.c:422
-#: src/psycstore/plugin_psycstore_sqlite.c:258
+#: src/psycstore/plugin_psycstore_sqlite.c:259
 #, fuzzy, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
@@ -6015,43 +6042,48 @@
 msgid "Failed to get master counters!\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:645
-#, fuzzy
-msgid "Failed to begin modifying state!\n"
+#: src/psycstore/gnunet-service-psycstore.c:657
+#, fuzzy, c-format
+msgid "Failed to begin modifying state: %d\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:656
+#: src/psycstore/gnunet-service-psycstore.c:667
+#, fuzzy, c-format
+msgid "Failed to modify state: %d\n"
+msgstr "Misslyckades att starta samling.\n"
+
+#: src/psycstore/gnunet-service-psycstore.c:675
 #, fuzzy
 msgid "Failed to end modifying state!\n"
 msgstr "Misslyckades att starta samling.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:686
+#: src/psycstore/gnunet-service-psycstore.c:706
 msgid "Tried to set invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:700
+#: src/psycstore/gnunet-service-psycstore.c:720
 #, fuzzy
 msgid "Failed to begin synchronizing state!\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:717
+#: src/psycstore/gnunet-service-psycstore.c:737
 #, fuzzy
 msgid "Failed to end synchronizing state!\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:737
-#: src/psycstore/gnunet-service-psycstore.c:756
+#: src/psycstore/gnunet-service-psycstore.c:757
+#: src/psycstore/gnunet-service-psycstore.c:776
 #, fuzzy
 msgid "Failed to reset state!\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:779
-#: src/psycstore/gnunet-service-psycstore.c:830
+#: src/psycstore/gnunet-service-psycstore.c:799
+#: src/psycstore/gnunet-service-psycstore.c:850
 msgid "Tried to get invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:806
-#: src/psycstore/gnunet-service-psycstore.c:845
+#: src/psycstore/gnunet-service-psycstore.c:826
+#: src/psycstore/gnunet-service-psycstore.c:865
 #, fuzzy
 msgid "Failed to get state variable!\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
@@ -6061,7 +6093,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:1907
+#: src/psycstore/plugin_psycstore_sqlite.c:1923
 msgid "SQLite database running\n"
 msgstr ""
 
@@ -6333,37 +6365,37 @@
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:427
+#: src/revocation/gnunet-service-revocation.c:481
 #, fuzzy
 msgid "# unsupported revocations received via set union"
 msgstr "# byte mottogs via TCP"
 
-#: src/revocation/gnunet-service-revocation.c:436
+#: src/revocation/gnunet-service-revocation.c:490
 #, fuzzy
 msgid "# revocation messages received via set union"
 msgstr "# krypterade PONG-meddelanden mottagna"
 
-#: src/revocation/gnunet-service-revocation.c:441
+#: src/revocation/gnunet-service-revocation.c:495
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:445
+#: src/revocation/gnunet-service-revocation.c:499
 #, fuzzy
 msgid "# revocation set unions failed"
 msgstr "# sessionsnycklar accepterade"
 
-#: src/revocation/gnunet-service-revocation.c:454
+#: src/revocation/gnunet-service-revocation.c:508
 #, fuzzy
 msgid "# revocation set unions completed"
 msgstr "# klartext PONG-meddelanden mottagna"
 
-#: src/revocation/gnunet-service-revocation.c:493
-#: src/revocation/gnunet-service-revocation.c:759
+#: src/revocation/gnunet-service-revocation.c:547
+#: src/revocation/gnunet-service-revocation.c:780
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:851
+#: src/revocation/gnunet-service-revocation.c:872
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "Kunde inte ansluta till gnunetd.\n"
@@ -6427,7 +6459,9 @@
 msgstr ""
 
 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1419
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1564
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1549
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1193
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1252
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr " Anslutning misslyckades (fel?)\n"
@@ -6700,7 +6734,7 @@
 "\n"
 "Fel vid uppladdning av fil: %s\n"
 
-#: src/set/gnunet-service-set.c:1531
+#: src/set/gnunet-service-set.c:1960
 #, fuzzy
 msgid "Could not connect to cadet service\n"
 msgstr "Kunde inte ansluta till gnunetd.\n"
@@ -6826,7 +6860,7 @@
 msgid "Could not save some persistent statistics\n"
 msgstr "Kunde inte skapa värdnyckel!\n"
 
-#: src/statistics/statistics_api.c:1090
+#: src/statistics/statistics_api.c:1088
 msgid ""
 "Failed to receive acknowledgement from statistics service, some statistics "
 "might have been lost!\n"
@@ -8473,7 +8507,7 @@
 msgid "# sessions allocated"
 msgstr "# sessionsnycklar accepterade"
 
-#: src/transport/transport_api.c:812
+#: src/transport/transport_api.c:827
 #, fuzzy, c-format
 msgid "Received unexpected message of type %u in %s:%u\n"
 msgstr "Mottog skadat meddelande från motpart \"%s\"i %s:%d.\n"
@@ -8518,17 +8552,17 @@
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:263 src/util/client.c:889 src/util/service.c:621
+#: src/util/client.c:264 src/util/client.c:894 src/util/service.c:621
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/util/client.c:267 src/util/client.c:894 src/util/service.c:625
+#: src/util/client.c:268 src/util/client.c:899 src/util/service.c:625
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s: flagga \"%s\" är tvetydig\n"
 
-#: src/util/client.c:362
+#: src/util/client.c:367
 #, c-format
 msgid ""
 "Could not determine valid hostname and port for service `%s' from "
@@ -8535,17 +8569,17 @@
 "configuration.\n"
 msgstr ""
 
-#: src/util/client.c:370
+#: src/util/client.c:375
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/client.c:1039
+#: src/util/client.c:1044
 #, fuzzy, c-format
 msgid "Could not connect to service `%s', configuration broken.\n"
 msgstr "Kunde inte ansluta till gnunetd.\n"
 
-#: src/util/client.c:1051
+#: src/util/client.c:1056
 #, fuzzy, c-format
 msgid "Failure to transmit request to service `%s'\n"
 msgstr "Misslyckades att skicka HTTP-begäran till värd \"%s\": %s\n"
@@ -8627,12 +8661,12 @@
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/connection.c:424
+#: src/util/connection.c:429
 #, fuzzy, c-format
 msgid "Access denied to `%s'\n"
 msgstr "Åtkomst nekad för \"%s\" vid %s:%d.\n"
 
-#: src/util/connection.c:441
+#: src/util/connection.c:446
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
@@ -8699,17 +8733,17 @@
 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:981
+#: src/util/crypto_rsa.c:999
 #, fuzzy, c-format
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr "\"%s\" misslyckades vid %s:%d med fel: \"%s\".\n"
 
-#: src/util/disk.c:1221
+#: src/util/disk.c:1226
 #, fuzzy, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr "\"%s\" förväntade att \"%s\" skulle vara en katalog!\n"
 
-#: src/util/disk.c:1444 src/util/service.c:1328
+#: src/util/disk.c:1449 src/util/service.c:1328
 #, fuzzy, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Kan inte öppna konfigurationsfil \"%s\".\n"
@@ -9211,6 +9245,16 @@
 msgid "signal (%d, %p) returned %d.\n"
 msgstr "Anrop till \"%s\" returnerade %d.\n"
 
+#: src/util/socks.c:592
+#, c-format
+msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
+msgstr ""
+
+#: src/util/socks.c:605
+#, c-format
+msgid "Attempting to proxy service `%s' to invalid port %d or hostname `%s'.\n"
+msgstr ""
+
 #: src/util/strings.c:146
 msgid "b"
 msgstr "b"

Modified: gnunet/po/vi.po
===================================================================
--- gnunet/po/vi.po     2015-09-16 13:18:29 UTC (rev 36366)
+++ gnunet/po/vi.po     2015-09-22 01:20:28 UTC (rev 36367)
@@ -8,7 +8,7 @@
 msgstr ""
 "Project-Id-Version: gnunet 0.8.0a\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2015-07-24 15:20+0200\n"
+"POT-Creation-Date: 2015-09-06 02:18+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"
@@ -358,13 +358,11 @@
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3290
-#: src/ats-tests/gnunet-solver-eval.c:918
+#: src/ats/gnunet-ats-solver-eval.c:3290 src/ats-tests/gnunet-solver-eval.c:918
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3293
-#: src/ats-tests/gnunet-solver-eval.c:921
+#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:921
 #: src/ats-tests/gnunet-solver-eval.c:924
 msgid "experiment to use"
 msgstr ""
@@ -651,58 +649,58 @@
 msgid "Print information about ATS state"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/cadet/gnunet-cadet.c:376
+#: src/cadet/gnunet-cadet.c:458
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/cadet/gnunet-cadet.c:643
+#: src/cadet/gnunet-cadet.c:735
 #, 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:686
+#: src/cadet/gnunet-cadet.c:778
 #, fuzzy, c-format
 msgid "Invalid tunnel owner `%s'\n"
 msgstr "Địa chỉ IP định dạng sai: %s\n"
 
-#: src/cadet/gnunet-cadet.c:752
-msgid "You must NOT give a TARGETwhen using 'request all' options\n"
+#: src/cadet/gnunet-cadet.c:844
+msgid "You must NOT give a TARGET when using 'request all' options\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:849
+#: src/cadet/gnunet-cadet.c:941
 #, 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:852
+#: src/cadet/gnunet-cadet.c:944
 msgid "activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:855
+#: src/cadet/gnunet-cadet.c:947
 msgid "dump debug information to STDERR"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:861
+#: src/cadet/gnunet-cadet.c:953
 msgid "port to listen to (default; 0)"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:864
+#: src/cadet/gnunet-cadet.c:956
 #, 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:867
+#: src/cadet/gnunet-cadet.c:959
 #, fuzzy
 msgid "provide information about all peers"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
 
-#: src/cadet/gnunet-cadet.c:870
+#: src/cadet/gnunet-cadet.c:962
 #, 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:873
+#: src/cadet/gnunet-cadet.c:965
 #, fuzzy
 msgid "provide information about all tunnels"
 msgstr "In ra thông tin về các đồng đẳng GNUnet."
@@ -1443,21 +1441,21 @@
 msgid "# PAYLOAD dropped (out of order)"
 msgstr "# các byte loại bỏ bởi UDP (đi ra)"
 
-#: src/core/gnunet-service-core_neighbours.c:177
+#: src/core/gnunet-service-core_neighbours.c:178
 #, fuzzy
 msgid "# sessions terminated by transport disconnect"
 msgstr "# Các quảng cáo đồng đẳng bị hủy do trọng tải"
 
-#: src/core/gnunet-service-core_neighbours.c:193
-#: src/core/gnunet-service-core_neighbours.c:355
+#: src/core/gnunet-service-core_neighbours.c:194
+#: src/core/gnunet-service-core_neighbours.c:362
 msgid "# neighbour entries allocated"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:264
+#: src/core/gnunet-service-core_neighbours.c:270
 msgid "# encrypted bytes given to transport"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:438
+#: src/core/gnunet-service-core_neighbours.c:448
 #, c-format
 msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n"
 msgstr ""
@@ -1505,7 +1503,7 @@
 msgstr ""
 
 #: src/datacache/datacache.c:119 src/datacache/datacache.c:294
-#: src/datastore/gnunet-service-datastore.c:853
+#: src/datastore/gnunet-service-datastore.c:866
 #, fuzzy
 msgid "# bytes stored"
 msgstr "# các byte trong kho dữ liệu"
@@ -1584,40 +1582,40 @@
 msgid "Failed to transmit request to drop database.\n"
 msgstr ""
 
-#: src/datastore/datastore_api.c:394
+#: src/datastore/datastore_api.c:395
 msgid "# queue entry timeouts"
 msgstr ""
 
-#: src/datastore/datastore_api.c:443
+#: src/datastore/datastore_api.c:450
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:471
+#: src/datastore/datastore_api.c:478
 #, fuzzy
 msgid "# queue entries created"
 msgstr "# các truy vấn lỗ hổng được định tuyến"
 
-#: src/datastore/datastore_api.c:491
+#: src/datastore/datastore_api.c:498
 #, fuzzy
 msgid "# Requests dropped from datastore queue"
 msgstr "# các yêu cầu lỗ hổng bị bỏ do trọng tải"
 
-#: src/datastore/datastore_api.c:533
+#: src/datastore/datastore_api.c:540
 #, fuzzy
 msgid "# datastore connections (re)created"
 msgstr "# các kết nối dht"
 
-#: src/datastore/datastore_api.c:621
+#: src/datastore/datastore_api.c:628
 #, fuzzy
 msgid "# transmission request failures"
 msgstr "# các sự truyền PONG bị lỗi"
 
-#: src/datastore/datastore_api.c:645
+#: src/datastore/datastore_api.c:652
 #, fuzzy
 msgid "# bytes sent to datastore"
 msgstr "# các byte trong kho dữ liệu"
 
-#: src/datastore/datastore_api.c:787
+#: src/datastore/datastore_api.c:794
 #, fuzzy
 msgid "Failed to receive status response from database."
 msgstr ""
@@ -1624,58 +1622,58 @@
 "\n"
 "Không nhận được đáp ứng từ gnunetd.\n"
 
-#: src/datastore/datastore_api.c:801
+#: src/datastore/datastore_api.c:808
 msgid "Error reading response from datastore service"
 msgstr ""
 
-#: src/datastore/datastore_api.c:813 src/datastore/datastore_api.c:819
+#: src/datastore/datastore_api.c:820 src/datastore/datastore_api.c:826
 #, fuzzy
 msgid "Invalid error message received from datastore service"
 msgstr "Nhận được thông báo « %s » sai từ đồng đẳng « %s ».\n"
 
-#: src/datastore/datastore_api.c:823
+#: src/datastore/datastore_api.c:830
 #, fuzzy
 msgid "# status messages received"
 msgstr "# các thông báo phát hiện dht được nhận"
 
-#: src/datastore/datastore_api.c:893
+#: src/datastore/datastore_api.c:909
 #, fuzzy
 msgid "# PUT requests executed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/datastore/datastore_api.c:959
+#: src/datastore/datastore_api.c:975
 #, fuzzy
 msgid "# RESERVE requests executed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/datastore/datastore_api.c:1020
+#: src/datastore/datastore_api.c:1036
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1080
+#: src/datastore/datastore_api.c:1096
 #, fuzzy
 msgid "# UPDATE requests executed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/datastore/datastore_api.c:1144
+#: src/datastore/datastore_api.c:1160
 #, fuzzy
 msgid "# REMOVE requests executed"
 msgstr "# các yêu cầu dht được định tuyến"
 
-#: src/datastore/datastore_api.c:1248
+#: src/datastore/datastore_api.c:1264
 #, fuzzy
 msgid "# Results received"
 msgstr "# các kết quả dht được nhận"
 
-#: src/datastore/datastore_api.c:1315
+#: src/datastore/datastore_api.c:1331
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1378
+#: src/datastore/datastore_api.c:1394
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1447
+#: src/datastore/datastore_api.c:1463
 #, fuzzy
 msgid "# GET requests executed"
 msgstr "# các yêu cầu dht được định tuyến"
@@ -1701,30 +1699,30 @@
 msgid "Manipulate GNUnet datastore"
 msgstr "cập nhật một giá trị trong tập tin cấu hình"
 
-#: src/datastore/gnunet-service-datastore.c:365
+#: src/datastore/gnunet-service-datastore.c:372
 #, fuzzy
 msgid "# bytes expired"
 msgstr "# các byte được nhận"
 
-#: src/datastore/gnunet-service-datastore.c:439
+#: src/datastore/gnunet-service-datastore.c:447
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:497
+#: src/datastore/gnunet-service-datastore.c:505
 #: src/gns/gnunet-gns-helper-service-w32.c:223
 msgid "Transmission to client failed!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:528
+#: src/datastore/gnunet-service-datastore.c:536
 #: src/gns/gnunet-gns-helper-service-w32.c:262
 msgid "Shutdown in progress, aborting transmission.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:643
+#: src/datastore/gnunet-service-datastore.c:652
 msgid "# results found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:686
+#: src/datastore/gnunet-service-datastore.c:696
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy `%s' request for "
@@ -1731,7 +1729,7 @@
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:697
+#: src/datastore/gnunet-service-datastore.c:707
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
@@ -1738,135 +1736,135 @@
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:701
+#: src/datastore/gnunet-service-datastore.c:711
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:707
+#: src/datastore/gnunet-service-datastore.c:717
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:712
-#: src/datastore/gnunet-service-datastore.c:767
-#: src/datastore/gnunet-service-datastore.c:1019
-#: src/datastore/gnunet-service-datastore.c:1597
+#: src/datastore/gnunet-service-datastore.c:723
+#: src/datastore/gnunet-service-datastore.c:779
+#: src/datastore/gnunet-service-datastore.c:1035
+#: src/datastore/gnunet-service-datastore.c:1630
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:780
+#: src/datastore/gnunet-service-datastore.c:793
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:865
+#: src/datastore/gnunet-service-datastore.c:879
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1071
+#: src/datastore/gnunet-service-datastore.c:1088
 #, fuzzy
 msgid "# GET requests received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/datastore/gnunet-service-datastore.c:1083
+#: src/datastore/gnunet-service-datastore.c:1101
 #, fuzzy
 msgid "# requests filtered by bloomfilter"
 msgstr "# các yêu cầu được lọc theo bộ lọc bloom"
 
-#: src/datastore/gnunet-service-datastore.c:1121
+#: src/datastore/gnunet-service-datastore.c:1141
 #, fuzzy
 msgid "# UPDATE requests received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/datastore/gnunet-service-datastore.c:1149
+#: src/datastore/gnunet-service-datastore.c:1170
 #, fuzzy
 msgid "# GET REPLICATION requests received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/datastore/gnunet-service-datastore.c:1182
+#: src/datastore/gnunet-service-datastore.c:1204
 #, fuzzy
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1233
 msgid "Content not found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1215
+#: src/datastore/gnunet-service-datastore.c:1244
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1247
+#: src/datastore/gnunet-service-datastore.c:1277
 #, fuzzy
 msgid "# REMOVE requests received"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/datastore/gnunet-service-datastore.c:1291
+#: src/datastore/gnunet-service-datastore.c:1321
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1296
+#: src/datastore/gnunet-service-datastore.c:1326
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1349
+#: src/datastore/gnunet-service-datastore.c:1379
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1360
+#: src/datastore/gnunet-service-datastore.c:1390
 #, fuzzy, c-format
 msgid "Failed to load datastore plugin for `%s'\n"
 msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
 
-#: src/datastore/gnunet-service-datastore.c:1429
-#: src/datastore/gnunet-service-datastore.c:1490
+#: src/datastore/gnunet-service-datastore.c:1459
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1477
+#: src/datastore/gnunet-service-datastore.c:1509
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1487
+#: src/datastore/gnunet-service-datastore.c:1519
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1625
-#: src/datastore/gnunet-service-datastore.c:1636
+#: src/datastore/gnunet-service-datastore.c:1661
+#: src/datastore/gnunet-service-datastore.c:1673
 #, c-format
 msgid "No `%s' specified for `%s' in configuration!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1630
+#: src/datastore/gnunet-service-datastore.c:1667
 #, fuzzy, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr "# các byte được phép trong kho dữ liệu"
 
-#: src/datastore/gnunet-service-datastore.c:1641
+#: src/datastore/gnunet-service-datastore.c:1679
 msgid "# quota"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1643
+#: src/datastore/gnunet-service-datastore.c:1681
 msgid "# cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1656
+#: src/datastore/gnunet-service-datastore.c:1696
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1674
-#: src/datastore/gnunet-service-datastore.c:1690
+#: src/datastore/gnunet-service-datastore.c:1714
+#: src/datastore/gnunet-service-datastore.c:1730
 #, fuzzy, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr "Không thể lưu tập tin cấu hình « %s »:"
 
-#: src/datastore/gnunet-service-datastore.c:1720
+#: src/datastore/gnunet-service-datastore.c:1760
 #, fuzzy
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
@@ -1929,7 +1927,7 @@
 #: src/namecache/plugin_namecache_sqlite.c:193
 #: src/namestore/plugin_namestore_sqlite.c:204
 #: src/peerstore/plugin_peerstore_sqlite.c:479
-#: src/psycstore/plugin_psycstore_sqlite.c:324
+#: src/psycstore/plugin_psycstore_sqlite.c:325
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "Không thể sơ khởi SQLite: %s.\n"
@@ -2008,9 +2006,9 @@
 msgstr ""
 
 #: src/dht/gnunet-dht-get.c:204 src/dht/gnunet-dht-monitor.c:271
-#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:755
-#: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:961
-#: src/fs/gnunet-search.c:307 src/fs/gnunet-unindex.c:168
+#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:794
+#: src/fs/gnunet-download.c:327 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-search.c:306 src/fs/gnunet-unindex.c:167
 #: src/nse/gnunet-nse-profiler.c:873
 msgid "be verbose (print progress information)"
 msgstr ""
@@ -2027,8 +2025,7 @@
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1393
-#: src/testbed/gnunet-testbed-profiler.c:267
+#: src/dht/gnunet_dht_profiler.c:1393 src/testbed/gnunet-testbed-profiler.c:267
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "tăng sổ tối đa các kết nối TCP/IP"
@@ -2250,8 +2247,7 @@
 msgid "# GET requests given to datacache"
 msgstr "# các yêu cầu get (lấy) dht được nhận"
 
-#: src/dht/gnunet-service-dht_hello.c:84
-#: src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
 #, fuzzy
 msgid "# HELLOs obtained from peerinfo"
 msgstr "Nhận được thông báo « %s » sai từ đồng đẳng « %s ».\n"
@@ -3134,73 +3130,73 @@
 msgid "Failed to connect to datastore."
 msgstr "Không kết nối được đến trình nền gnunetd."
 
-#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:443
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:441
 #, fuzzy, c-format
 msgid "Publishing failed: %s"
 msgstr "Gặp lỗi khi tải lên tập tin: %s\n"
 
-#: src/fs/fs_publish.c:709 src/fs/fs_publish.c:726 src/fs/fs_publish.c:765
-#: src/fs/fs_publish.c:786 src/fs/fs_publish.c:810 src/fs/fs_publish.c:1060
+#: src/fs/fs_publish.c:707 src/fs/fs_publish.c:724 src/fs/fs_publish.c:763
+#: src/fs/fs_publish.c:784 src/fs/fs_publish.c:808 src/fs/fs_publish.c:1058
 #, fuzzy, c-format
 msgid "Can not index file `%s': %s.  Will try to insert instead.\n"
 msgstr "Lỗi đánh chỉ mục tập tin « %s ». Đề nghị: thử chèn tập tin.\n"
 
-#: src/fs/fs_publish.c:711
+#: src/fs/fs_publish.c:709
 msgid "timeout on index-start request to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:723
+#: src/fs/fs_publish.c:721
 #, fuzzy
 msgid "unknown error"
 msgstr "Lỗi không rõ"
 
-#: src/fs/fs_publish.c:767
+#: src/fs/fs_publish.c:765
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:787
+#: src/fs/fs_publish.c:785
 #, fuzzy
 msgid "filename too long"
 msgstr "tên tập tin"
 
-#: src/fs/fs_publish.c:812
+#: src/fs/fs_publish.c:810
 msgid "could not connect to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:835
+#: src/fs/fs_publish.c:833
 #, fuzzy, c-format
 msgid "Failed to get file identifiers for `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/fs/fs_publish.c:899 src/fs/fs_publish.c:940
+#: src/fs/fs_publish.c:897 src/fs/fs_publish.c:938
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1014
+#: src/fs/fs_publish.c:1012
 #, fuzzy, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr "%s bị lỗi tại %s:%d: « %s »\n"
 
-#: src/fs/fs_publish.c:1022
+#: src/fs/fs_publish.c:1020
 #, fuzzy, c-format
 msgid "Recursive upload failed: %s"
 msgstr "Gặp lỗi khi tải lên tập tin: %s\n"
 
-#: src/fs/fs_publish.c:1062
+#: src/fs/fs_publish.c:1060
 msgid "needs to be an actual file"
 msgstr ""
 
-#: src/fs/fs_publish.c:1301
+#: src/fs/fs_publish.c:1299
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "Kho dữ liệu đầy.\n"
 
-#: src/fs/fs_publish.c:1392
+#: src/fs/fs_publish.c:1390
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:219
+#: src/fs/fs_publish_ksk.c:224
 #, fuzzy
 msgid "Could not connect to datastore."
 msgstr "« %s »: Không thể kết nối.\n"
@@ -3378,48 +3374,48 @@
 msgid "Failed to save state to file %s\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/fs/gnunet-auto-share.c:402
+#: src/fs/gnunet-auto-share.c:415
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:490
+#: src/fs/gnunet-auto-share.c:504
 #, fuzzy, c-format
 msgid "Publishing `%s'\n"
 msgstr "Gặp lỗi khi tải lên tập tin: %s\n"
 
-#: src/fs/gnunet-auto-share.c:499
+#: src/fs/gnunet-auto-share.c:514
 #, fuzzy, c-format
 msgid "Failed to run `%s'\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/fs/gnunet-auto-share.c:688
+#: src/fs/gnunet-auto-share.c:725
 #, fuzzy, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
 msgstr "Phải ghi rõ chỉ một tên tập tin để chèn.\n"
 
-#: src/fs/gnunet-auto-share.c:739 src/fs/gnunet-publish.c:908
+#: src/fs/gnunet-auto-share.c:778 src/fs/gnunet-publish.c:901
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr "đặt CẤP mong muốn của tình trạng nặc danh của người gửi"
 
-#: src/fs/gnunet-auto-share.c:743 src/fs/gnunet-publish.c:912
+#: src/fs/gnunet-auto-share.c:782 src/fs/gnunet-publish.c:905
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr "tắt thêm giờ tạo vào siêu dữ liệu của tập tin đã tải lên"
 
-#: src/fs/gnunet-auto-share.c:746 src/fs/gnunet-publish.c:915
+#: src/fs/gnunet-auto-share.c:785 src/fs/gnunet-publish.c:908
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:749 src/fs/gnunet-publish.c:939
+#: src/fs/gnunet-auto-share.c:788 src/fs/gnunet-publish.c:932
 msgid "specify the priority of the content"
 msgstr "xác định mức ưu tiên của nội dung"
 
-#: src/fs/gnunet-auto-share.c:752 src/fs/gnunet-publish.c:946
+#: src/fs/gnunet-auto-share.c:791 src/fs/gnunet-publish.c:939
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:772
+#: src/fs/gnunet-auto-share.c:815
 #, fuzzy
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr "Tự động chia sẻ một thư mục."
@@ -3490,68 +3486,68 @@
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr "Tiến trình tải lên « %s » đã tiếp tục lại.\n"
 
-#: src/fs/gnunet-download.c:209 src/fs/gnunet-publish.c:319
-#: src/fs/gnunet-search.c:206 src/fs/gnunet-unindex.c:108
+#: src/fs/gnunet-download.c:208 src/fs/gnunet-publish.c:297
+#: src/fs/gnunet-search.c:205 src/fs/gnunet-unindex.c:107
 #, fuzzy, c-format
 msgid "Unexpected status: %d\n"
 msgstr "Gặp sự kiện bất thường: %d\n"
 
-#: src/fs/gnunet-download.c:234
+#: src/fs/gnunet-download.c:233
 #, fuzzy
 msgid "You need to specify a URI argument.\n"
 msgstr "KHÔNG cho phép ghi rõ cả hai địa chỉ URI và tên tập tin.\n"
 
-#: src/fs/gnunet-download.c:240 src/fs/gnunet-publish.c:734
+#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:728
 #, fuzzy, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr "Tập tin « %s » có URI: %s\n"
 
-#: src/fs/gnunet-download.c:247
+#: src/fs/gnunet-download.c:246
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:254
+#: src/fs/gnunet-download.c:253
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:268 src/fs/gnunet-publish.c:878
-#: src/fs/gnunet-search.c:256 src/fs/gnunet-unindex.c:140
+#: src/fs/gnunet-download.c:267 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:255 src/fs/gnunet-unindex.c:139
 #, fuzzy, c-format
 msgid "Could not initialize `%s' subsystem.\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/fs/gnunet-download.c:305 src/fs/gnunet-search.c:295
+#: src/fs/gnunet-download.c:304 src/fs/gnunet-search.c:294
 #, fuzzy
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr "đặt CẤP mong muốn của tình trạng nặc danh của người gửi"
 
-#: src/fs/gnunet-download.c:308
+#: src/fs/gnunet-download.c:307
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr "xoá việc tải về không hoàn thành (khi hủy bở dùng CTRL-C)"
 
-#: src/fs/gnunet-download.c:311 src/fs/gnunet-search.c:298
+#: src/fs/gnunet-download.c:310 src/fs/gnunet-search.c:297
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:314
+#: src/fs/gnunet-download.c:313
 msgid "write the file to FILENAME"
 msgstr "ghi tập tin vào TÊN_TẬP_TIN"
 
-#: src/fs/gnunet-download.c:318
+#: src/fs/gnunet-download.c:317
 #, fuzzy
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr "đặt số tối đa các việc tải xuống đồng thời được phép"
 
-#: src/fs/gnunet-download.c:322
+#: src/fs/gnunet-download.c:321
 #, fuzzy
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr "đặt số tối đa các việc tải xuống đồng thời được phép"
 
-#: src/fs/gnunet-download.c:325
+#: src/fs/gnunet-download.c:324
 msgid "download a GNUnet directory recursively"
 msgstr "tải xuống đệ quy một thư mục GNUnet"
 
-#: src/fs/gnunet-download.c:339
+#: src/fs/gnunet-download.c:338
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
@@ -3582,136 +3578,136 @@
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:238 src/fs/gnunet-publish.c:250
+#: src/fs/gnunet-publish.c:221 src/fs/gnunet-publish.c:233
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:241
 #, fuzzy, c-format
 msgid "Error publishing: %s.\n"
 msgstr "Gặp lỗi khi tải xuống: %s\n"
 
-#: src/fs/gnunet-publish.c:268
+#: src/fs/gnunet-publish.c:248
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:253
 #, fuzzy, c-format
 msgid "URI is `%s'.\n"
 msgstr "Tôi là đồng đẳng « %s ».\n"
 
-#: src/fs/gnunet-publish.c:281
+#: src/fs/gnunet-publish.c:261
 #, fuzzy, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr "Tôi là đồng đẳng « %s ».\n"
 
-#: src/fs/gnunet-publish.c:299
+#: src/fs/gnunet-publish.c:277
 #, fuzzy
 msgid "Starting cleanup after abort\n"
 msgstr "Hoàn thành khởi chạy « %s ».\n"
 
-#: src/fs/gnunet-publish.c:306
+#: src/fs/gnunet-publish.c:284
 #, fuzzy
 msgid "Cleanup after abort completed.\n"
 msgstr "Hoàn thành khởi chạy « %s ».\n"
 
-#: src/fs/gnunet-publish.c:312
+#: src/fs/gnunet-publish.c:290
 #, fuzzy
 msgid "Cleanup after abort failed.\n"
 msgstr "Hoàn thành khởi chạy « %s ».\n"
 
-#: src/fs/gnunet-publish.c:447
+#: src/fs/gnunet-publish.c:432
 #, fuzzy, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr "Đang cập nhật dữ liệu cho mô-đun « %s »\n"
 
-#: src/fs/gnunet-publish.c:449
+#: src/fs/gnunet-publish.c:437
 #, fuzzy, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "Từ khoá cho tập tin « %s »:\n"
 
-#: src/fs/gnunet-publish.c:594
+#: src/fs/gnunet-publish.c:591
 #, fuzzy
 msgid "Could not publish\n"
 msgstr "Không thể truy cập đến « %s »: %s\n"
 
-#: src/fs/gnunet-publish.c:619
+#: src/fs/gnunet-publish.c:616
 #, fuzzy
 msgid "Could not start publishing.\n"
 msgstr "Không thể nạp phần bổ sung truyền tải « %s »\n"
 
-#: src/fs/gnunet-publish.c:653
+#: src/fs/gnunet-publish.c:650
 #, fuzzy, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/fs/gnunet-publish.c:657
+#: src/fs/gnunet-publish.c:654
 #, fuzzy, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "Đang bắt đầu tài về « %s »\n"
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:660
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:670
+#: src/fs/gnunet-publish.c:667
 msgid "Preprocessing complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:672
 #, fuzzy, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr "Đang cập nhật dữ liệu cho mô-đun « %s »\n"
 
-#: src/fs/gnunet-publish.c:682
+#: src/fs/gnunet-publish.c:679
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:691
+#: src/fs/gnunet-publish.c:688
 #, fuzzy
 msgid "Internal error scanning directory.\n"
 msgstr "=\tLỗi đọc thư mục.\n"
 
-#: src/fs/gnunet-publish.c:723
+#: src/fs/gnunet-publish.c:716
 #, fuzzy, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr "Không gian tên « %s » có đánh giá %d.\n"
 
-#: src/fs/gnunet-publish.c:755
+#: src/fs/gnunet-publish.c:749
 #, fuzzy, c-format
 msgid "Failed to access `%s': %s\n"
 msgstr "Lỗi mở tập tin ghi sự kiện « %s »: %s\n"
 
-#: src/fs/gnunet-publish.c:769
+#: src/fs/gnunet-publish.c:763
 msgid ""
 "Failed to start meta directory scanner.  Is gnunet-helper-publish-fs "
 "installed?\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:825
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr "Không thể trích siêu dữ liệu ra một địa chỉ URI.\n"
 
-#: src/fs/gnunet-publish.c:832
+#: src/fs/gnunet-publish.c:826
 #, c-format
 msgid "You must specify one and only one filename for insertion.\n"
 msgstr "Phải ghi rõ chỉ một tên tập tin để chèn.\n"
 
-#: src/fs/gnunet-publish.c:838
+#: src/fs/gnunet-publish.c:832
 #, c-format
 msgid "You must NOT specify an URI and a filename.\n"
 msgstr "KHÔNG cho phép ghi rõ cả hai địa chỉ URI và tên tập tin.\n"
 
-#: src/fs/gnunet-publish.c:846 src/vpn/gnunet-vpn.c:209
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:209
 #, c-format
 msgid "Option `%s' is required when using option `%s'.\n"
 msgstr "Tùy chọn « %s » cần thiết khi dùng tùy chọn « %s ».\n"
 
-#: src/fs/gnunet-publish.c:857 src/fs/gnunet-publish.c:865
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
 #: src/transport/gnunet-transport.c:1928 src/transport/gnunet-transport.c:1958
 #: src/transport/gnunet-transport.c:1989
 #, c-format
@@ -3718,7 +3714,7 @@
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr "Tùy chọn « %s » không có nghĩa khi không có tùy chọn « %s ».\n"
 
-#: src/fs/gnunet-publish.c:919
+#: src/fs/gnunet-publish.c:912
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
@@ -3726,7 +3722,7 @@
 "in ra danh sách các từ khóa đã giải phóng cần sử dụng, nhưng không thực hiện "
 "tải lên"
 
-#: src/fs/gnunet-publish.c:923
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "add an additional keyword for the top-level file or directory (this option "
 "can be specified multiple times)"
@@ -3734,11 +3730,11 @@
 "thêm một từ khoá bổ sung cho tập tin hoặc thư mục ở cấp đầu (có thể chỉ ra "
 "tùy chọn này nhiều lần)"
 
-#: src/fs/gnunet-publish.c:927
+#: src/fs/gnunet-publish.c:920
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr "đặt siêu dữ liệu cho KIỂU đưa ra thành GIÁ_TRỊ chỉ ra"
 
-#: src/fs/gnunet-publish.c:930
+#: src/fs/gnunet-publish.c:923
 msgid ""
 "do not index, perform full insertion (stores entire file in encrypted form "
 "in GNUnet database)"
@@ -3746,7 +3742,7 @@
 "không đánh chỉ mục, thực hiện việc chèn đầy đủ (chứa toàn bộ tập tin ở dạng "
 "mã hóa trong cơ sở dữ liệu GNUnet)"
 
-#: src/fs/gnunet-publish.c:935
+#: src/fs/gnunet-publish.c:928
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
@@ -3754,12 +3750,12 @@
 "chỉ ra mã số của một phiên bản đã cập nhật để công bố trong tương lai (chỉ "
 "cho sự chèn không gian tên)"
 
-#: src/fs/gnunet-publish.c:943
+#: src/fs/gnunet-publish.c:936
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 "công bố các tập tin dưới biệt hiệu TÊN (đặt tập tin vào không gian tên)"
 
-#: src/fs/gnunet-publish.c:949
+#: src/fs/gnunet-publish.c:942
 #, fuzzy
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
@@ -3767,13 +3763,13 @@
 msgstr ""
 "chỉ mô phỏng tiến trình, không thật công bố (có ích để tính địa chỉ URI)"
 
-#: src/fs/gnunet-publish.c:953
+#: src/fs/gnunet-publish.c:946
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
 "đặt mã số của phiên bản này của sự công bố (chỉ cho chèn không gian tên)"
 
-#: src/fs/gnunet-publish.c:957
+#: src/fs/gnunet-publish.c:950
 msgid ""
 "URI to be published (can be used instead of passing a file to add keywords "
 "to the file with the respective URI)"
@@ -3781,7 +3777,7 @@
 "Địa chỉ URI cần công bố (có thể được dùng thay vào gửi một tập tin để thêm "
 "từ khoá vào tập tin có địa chỉ URI tương ứng)"
 
-#: src/fs/gnunet-publish.c:973
+#: src/fs/gnunet-publish.c:966
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
@@ -3795,29 +3791,29 @@
 msgid "Error searching: %s.\n"
 msgstr "Gặp lỗi khi tải xuống: %s\n"
 
-#: src/fs/gnunet-search.c:246
+#: src/fs/gnunet-search.c:245
 #, fuzzy
 msgid "Could not create keyword URI from arguments.\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/fs/gnunet-search.c:270
+#: src/fs/gnunet-search.c:269
 #, fuzzy
 msgid "Could not start searching.\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/fs/gnunet-search.c:301
+#: src/fs/gnunet-search.c:300
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
-#: src/fs/gnunet-search.c:304
+#: src/fs/gnunet-search.c:303
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:311
+#: src/fs/gnunet-search.c:310
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
-#: src/fs/gnunet-search.c:322
+#: src/fs/gnunet-search.c:321
 #, fuzzy
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr "Không hiển thị kết quả tìm kiếm cho tập tin được chúng ta tải lên"
@@ -4217,17 +4213,17 @@
 msgid "Unindexing done.\n"
 msgstr "Bỏ chỉ mục tập tin."
 
-#: src/fs/gnunet-unindex.c:130
+#: src/fs/gnunet-unindex.c:129
 #, fuzzy, c-format
 msgid "You must specify one and only one filename for unindexing.\n"
 msgstr "Phải ghi rõ chỉ một tên tập tin để chèn.\n"
 
-#: src/fs/gnunet-unindex.c:147
+#: src/fs/gnunet-unindex.c:146
 #, fuzzy
 msgid "Could not start unindex operation.\n"
 msgstr "Không thể truy cập đến thông tin về không gian tên.\n"
 
-#: src/fs/gnunet-unindex.c:179
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
@@ -4635,68 +4631,68 @@
 msgid "GNS REST API initialized\n"
 msgstr "Lỗi sơ khởi lõi.\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:291
+#: src/gnsrecord/plugin_gnsrecord_dns.c:359
 #, fuzzy, c-format
 msgid "Unable to parse IPv4 address `%s'\n"
 msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:312
+#: src/gnsrecord/plugin_gnsrecord_dns.c:380
 #, fuzzy, c-format
 msgid "Failed to serialize NS record with value `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:334
+#: src/gnsrecord/plugin_gnsrecord_dns.c:402
 #, fuzzy, c-format
 msgid "Failed to serialize CNAME record with value `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:418
+#: src/gnsrecord/plugin_gnsrecord_dns.c:486
 #, fuzzy, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:455
+#: src/gnsrecord/plugin_gnsrecord_dns.c:522
 #, fuzzy, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:474
+#: src/gnsrecord/plugin_gnsrecord_dns.c:541
 #, fuzzy, c-format
 msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:497
+#: src/gnsrecord/plugin_gnsrecord_dns.c:564
 #, fuzzy, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:520
+#: src/gnsrecord/plugin_gnsrecord_dns.c:587
 #, fuzzy, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:535
+#: src/gnsrecord/plugin_gnsrecord_dns.c:602
 #, fuzzy, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:562
+#: src/gnsrecord/plugin_gnsrecord_dns.c:629
 #, fuzzy, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:578
+#: src/gnsrecord/plugin_gnsrecord_dns.c:645
 #, fuzzy, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr "Không thể truy cập đến tập tin gnunet-directory « %s »\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:595
+#: src/gnsrecord/plugin_gnsrecord_dns.c:662
 #, fuzzy, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr "Mức ưu tiên tiến trình không hợp lê « %s ».\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:619
-#: src/gnsrecord/plugin_gnsrecord_dns.c:635
+#: src/gnsrecord/plugin_gnsrecord_dns.c:686
+#: src/gnsrecord/plugin_gnsrecord_dns.c:702
 #, fuzzy, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
@@ -5227,6 +5223,31 @@
 msgid "Namecache failed to cache block"
 msgstr ""
 
+#: src/namecache/plugin_namecache_flat.c:119
+#: src/namecache/plugin_namecache_flat.c:236
+#: src/namestore/plugin_namestore_flat.c:184
+#: src/namestore/plugin_namestore_flat.c:352
+#, fuzzy, c-format
+msgid "Unable to initialize file: %s.\n"
+msgstr "Không thể sơ khởi SQLite: %s.\n"
+
+#: src/namecache/plugin_namecache_flat.c:130
+#: src/namestore/plugin_namestore_flat.c:195
+#, fuzzy, c-format
+msgid "Unable to get filesize: %s.\n"
+msgstr "Không thể tạo miền tên.\n"
+
+#: src/namecache/plugin_namecache_flat.c:142
+#: src/namestore/plugin_namestore_flat.c:207
+#, fuzzy, c-format
+msgid "Unable to read file: %s.\n"
+msgstr "Không thể tạo miền tên.\n"
+
+#: src/namecache/plugin_namecache_flat.c:391
+#, fuzzy
+msgid "flat plugin running\n"
+msgstr "kho dữ liệu sqlite"
+
 #: src/namecache/plugin_namecache_postgres.c:89
 #: src/namestore/plugin_namestore_postgres.c:96
 #, fuzzy
@@ -5325,8 +5346,7 @@
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "Đối số không hợp lệ cho « %s ».\n"
 
-#: src/namestore/gnunet-namestore.c:868
-#: src/peerinfo-tool/gnunet-peerinfo.c:817
+#: src/namestore/gnunet-namestore.c:868 src/peerinfo-tool/gnunet-peerinfo.c:817
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "Dữ liệu nhập không hợp lệ.\n"
@@ -5487,11 +5507,20 @@
 msgid "Namestore failed to store record\n"
 msgstr ""
 
+#: src/namestore/plugin_namestore_flat.c:650
+#, fuzzy
+msgid "flat file database running\n"
+msgstr "kho dữ liệu sqlite"
+
 #: src/namestore/plugin_rest_namestore.c:1023
 #, fuzzy
 msgid "Namestore REST API initialized\n"
 msgstr "Lỗi sơ khởi lõi.\n"
 
+#: src/nat/gnunet-nat.c:160
+msgid "GNUnet NAT traversal autoconfigure daemon"
+msgstr ""
+
 #: src/nat/gnunet-nat-server.c:279
 #, c-format
 msgid "Please pass valid port number as the first argument! (got `%s')\n"
@@ -5501,54 +5530,59 @@
 msgid "GNUnet NAT traversal test helper daemon"
 msgstr ""
 
-#: src/nat/nat_auto.c:179
+#: src/nat/nat_auto.c:394
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:180
+#: src/nat/nat_auto.c:395
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:201
+#: src/nat/nat_auto.c:416
 #, fuzzy
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr "Cổng để liên lạc với giao diện người dùng GNUnet"
 
-#: src/nat/nat_auto.c:249
+#: src/nat/nat_auto.c:448
 #, c-format
 msgid "Detected external IP `%s'\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:327
+#: src/nat/nat_auto.c:579
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:343
+#: src/nat/nat_auto.c:597
 #, fuzzy, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr "GNUnet bây giờ sử dụng địa chỉ IP %s.\n"
 
-#: src/nat/nat_auto.c:406
+#: src/nat/nat_auto.c:669 src/nat/nat_test.c:364
+#, fuzzy
+msgid "Failed to connect to `gnunet-nat-server'\n"
+msgstr "Lỗi kết nối đến gnunetd.\n"
+
+#: src/nat/nat_auto.c:715
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:407
+#: src/nat/nat_auto.c:716
 msgid "upnpc not found\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:437
+#: src/nat/nat_auto.c:748
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:445 src/nat/nat_auto.c:490
+#: src/nat/nat_auto.c:756 src/nat/nat_auto.c:804
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:453 src/nat/nat_auto.c:498
+#: src/nat/nat_auto.c:764 src/nat/nat_auto.c:812
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:483
+#: src/nat/nat_auto.c:797
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
@@ -5562,26 +5596,26 @@
 msgid "Failed to start %s\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/nat/nat.c:1286
+#: src/nat/nat.c:1305
 msgid "Error while running upnp client:\n"
 msgstr ""
 
-#: src/nat/nat.c:1356
+#: src/nat/nat.c:1375
 #, fuzzy, c-format
 msgid "Failed to run upnp client for port %u\n"
 msgstr "Lỗi sơ khởi dịch vụ « %s ».\n"
 
-#: src/nat/nat.c:1498
+#: src/nat/nat.c:1517
 msgid "malformed"
 msgstr ""
 
-#: src/nat/nat.c:1552
+#: src/nat/nat.c:1571
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP \n"
 msgstr ""
 
-#: src/nat/nat.c:1680 src/nat/nat.c:1692
+#: src/nat/nat.c:1700 src/nat/nat.c:1712
 #, c-format
 msgid ""
 "Configuration requires `%s', but binary is not installed properly (SUID bit "
@@ -5588,91 +5622,91 @@
 "not set).  Option disabled.\n"
 msgstr ""
 
-#: src/nat/nat.c:1830
+#: src/nat/nat.c:1855
 msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
 msgstr ""
 
-#: src/nat/nat.c:1846
+#: src/nat/nat.c:1871
 #, c-format
 msgid "Running gnunet-helper-nat-client %s %s %u\n"
 msgstr ""
 
-#: src/nat/nat.c:1931
+#: src/nat/nat.c:1958
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat/nat.c:1933
+#: src/nat/nat.c:1960
 msgid "Internal Failure (IPC, ...)"
 msgstr ""
 
-#: src/nat/nat.c:1935
+#: src/nat/nat.c:1962
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat/nat.c:1937
+#: src/nat/nat.c:1964
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat/nat.c:1939
+#: src/nat/nat.c:1966
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat/nat.c:1941
+#: src/nat/nat.c:1968
 msgid "`upnpc` command not found"
 msgstr ""
 
-#: src/nat/nat.c:1943
+#: src/nat/nat.c:1970
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/nat/nat.c:1945
+#: src/nat/nat.c:1972
 msgid "`upnpc' command took too long, process killed"
 msgstr ""
 
-#: src/nat/nat.c:1947
+#: src/nat/nat.c:1974
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat/nat.c:1949
+#: src/nat/nat.c:1976
 msgid "`external-ip' command not found"
 msgstr ""
 
-#: src/nat/nat.c:1951
+#: src/nat/nat.c:1978
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/nat/nat.c:1953
+#: src/nat/nat.c:1980
 msgid "`external-ip' command output invalid"
 msgstr ""
 
-#: src/nat/nat.c:1955
+#: src/nat/nat.c:1982
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat/nat.c:1957
+#: src/nat/nat.c:1984
 #, fuzzy
 msgid "Could not determine interface with internal/local network address"
 msgstr "Không thể truy cập đến thông tin về không gian tên.\n"
 
-#: src/nat/nat.c:1959
+#: src/nat/nat.c:1986
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat/nat.c:1961
+#: src/nat/nat.c:1988
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat/nat.c:1963
+#: src/nat/nat.c:1990
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat/nat.c:1965
+#: src/nat/nat.c:1992
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat/nat.c:1967
+#: src/nat/nat.c:1994
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
@@ -5684,17 +5718,12 @@
 msgid "`upnpc' command not found\n"
 msgstr ""
 
-#: src/nat/nat_test.c:360
-#, fuzzy
-msgid "Failed to connect to `gnunet-nat-server'\n"
-msgstr "Lỗi kết nối đến gnunetd.\n"
-
-#: src/nat/nat_test.c:462
+#: src/nat/nat_test.c:467
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat/nat_test.c:497
+#: src/nat/nat_test.c:502
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
@@ -5739,8 +5768,8 @@
 msgid "Measure quality and performance of the NSE service."
 msgstr "Không thể truy cập đến dịch vụ"
 
-#: src/nse/gnunet-service-nse.c:1537
-#: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260
+#: src/nse/gnunet-service-nse.c:1541
+#: src/revocation/gnunet-service-revocation.c:848 src/util/gnunet-scrypt.c:260
 #, fuzzy
 msgid "Value is too large.\n"
 msgstr "Giá trị không nằm trong phạm vi được phép."
@@ -6010,7 +6039,7 @@
 msgstr ""
 
 #: src/peerstore/plugin_peerstore_sqlite.c:398
-#: src/psycstore/plugin_psycstore_sqlite.c:281
+#: src/psycstore/plugin_psycstore_sqlite.c:282
 #, fuzzy, c-format
 msgid ""
 "Error executing SQL query: %s\n"
@@ -6018,7 +6047,7 @@
 msgstr "Gặp lỗi khi tạo người dùng"
 
 #: src/peerstore/plugin_peerstore_sqlite.c:422
-#: src/psycstore/plugin_psycstore_sqlite.c:258
+#: src/psycstore/plugin_psycstore_sqlite.c:259
 #, fuzzy, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
@@ -6075,43 +6104,48 @@
 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:645
-#, fuzzy
-msgid "Failed to begin modifying state!\n"
+#: src/psycstore/gnunet-service-psycstore.c:657
+#, fuzzy, c-format
+msgid "Failed to begin modifying state: %d\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:656
+#: src/psycstore/gnunet-service-psycstore.c:667
+#, fuzzy, c-format
+msgid "Failed to modify state: %d\n"
+msgstr "Lỗi bắt đầu thu thập.\n"
+
+#: src/psycstore/gnunet-service-psycstore.c:675
 #, fuzzy
 msgid "Failed to end modifying state!\n"
 msgstr "Lỗi bắt đầu thu thập.\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:686
+#: src/psycstore/gnunet-service-psycstore.c:706
 msgid "Tried to set invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:700
+#: src/psycstore/gnunet-service-psycstore.c:720
 #, 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:717
+#: src/psycstore/gnunet-service-psycstore.c:737
 #, 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:737
-#: src/psycstore/gnunet-service-psycstore.c:756
+#: src/psycstore/gnunet-service-psycstore.c:757
+#: src/psycstore/gnunet-service-psycstore.c:776
 #, 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:779
-#: src/psycstore/gnunet-service-psycstore.c:830
+#: src/psycstore/gnunet-service-psycstore.c:799
+#: src/psycstore/gnunet-service-psycstore.c:850
 msgid "Tried to get invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:806
-#: src/psycstore/gnunet-service-psycstore.c:845
+#: src/psycstore/gnunet-service-psycstore.c:826
+#: src/psycstore/gnunet-service-psycstore.c:865
 #, fuzzy
 msgid "Failed to get state variable!\n"
 msgstr "Lỗi lấy thông kê về truyền tải.\n"
@@ -6121,7 +6155,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:1907
+#: src/psycstore/plugin_psycstore_sqlite.c:1923
 #, fuzzy
 msgid "SQLite database running\n"
 msgstr "kho dữ liệu sqlite"
@@ -6392,37 +6426,37 @@
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:427
+#: src/revocation/gnunet-service-revocation.c:481
 #, fuzzy
 msgid "# unsupported revocations received via set union"
 msgstr "# các yêu cầu danh sách máy được nhận"
 
-#: src/revocation/gnunet-service-revocation.c:436
+#: src/revocation/gnunet-service-revocation.c:490
 #, fuzzy
 msgid "# revocation messages received via set union"
 msgstr "# các thông báo PONG đã mật mã được nhận"
 
-#: src/revocation/gnunet-service-revocation.c:441
+#: src/revocation/gnunet-service-revocation.c:495
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:445
+#: src/revocation/gnunet-service-revocation.c:499
 #, fuzzy
 msgid "# revocation set unions failed"
 msgstr "# các khoá phiên chạy được chấp nhận"
 
-#: src/revocation/gnunet-service-revocation.c:454
+#: src/revocation/gnunet-service-revocation.c:508
 #, fuzzy
 msgid "# revocation set unions completed"
 msgstr "# các sự truyền PONG bị lỗi"
 
-#: src/revocation/gnunet-service-revocation.c:493
-#: src/revocation/gnunet-service-revocation.c:759
+#: src/revocation/gnunet-service-revocation.c:547
+#: src/revocation/gnunet-service-revocation.c:780
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:851
+#: src/revocation/gnunet-service-revocation.c:872
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "« %s »: Không thể kết nối.\n"
@@ -6486,7 +6520,9 @@
 msgstr ""
 
 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1419
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1564
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1549
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1193
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1252
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr " Không kết nối được (lỗi ?)\n"
@@ -6760,7 +6796,7 @@
 "\n"
 "Gặp lỗi khi tải lên tập tin: %s"
 
-#: src/set/gnunet-service-set.c:1531
+#: src/set/gnunet-service-set.c:1960
 #, fuzzy
 msgid "Could not connect to cadet service\n"
 msgstr "Không thể kết nối tới %s:%u: %s\n"
@@ -6886,7 +6922,7 @@
 msgid "Could not save some persistent statistics\n"
 msgstr "Không thể tạo miền tên.\n"
 
-#: src/statistics/statistics_api.c:1090
+#: src/statistics/statistics_api.c:1088
 msgid ""
 "Failed to receive acknowledgement from statistics service, some statistics "
 "might have been lost!\n"
@@ -8534,7 +8570,7 @@
 msgid "# sessions allocated"
 msgstr "# các khoá phiên chạy được chấp nhận"
 
-#: src/transport/transport_api.c:812
+#: src/transport/transport_api.c:827
 #, fuzzy, c-format
 msgid "Received unexpected message of type %u in %s:%u\n"
 msgstr "Nhận được thông báo bị hỏng từ đồng đẳng « %s » trong %s:%d.\n"
@@ -8578,17 +8614,17 @@
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:263 src/util/client.c:889 src/util/service.c:621
+#: src/util/client.c:264 src/util/client.c:894 src/util/service.c:621
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/util/client.c:267 src/util/client.c:894 src/util/service.c:625
+#: src/util/client.c:268 src/util/client.c:899 src/util/service.c:625
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s: tùy chọn « %s » là mơ hồ\n"
 
-#: src/util/client.c:362
+#: src/util/client.c:367
 #, c-format
 msgid ""
 "Could not determine valid hostname and port for service `%s' from "
@@ -8595,17 +8631,17 @@
 "configuration.\n"
 msgstr ""
 
-#: src/util/client.c:370
+#: src/util/client.c:375
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/client.c:1039
+#: src/util/client.c:1044
 #, fuzzy, c-format
 msgid "Could not connect to service `%s', configuration broken.\n"
 msgstr "Không thể kết nối tới %s:%u: %s\n"
 
-#: src/util/client.c:1051
+#: src/util/client.c:1056
 #, fuzzy, c-format
 msgid "Failure to transmit request to service `%s'\n"
 msgstr "Lỗi đọc danh sách bạn bè từ « %s »\n"
@@ -8691,12 +8727,12 @@
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/connection.c:424
+#: src/util/connection.c:429
 #, fuzzy, c-format
 msgid "Access denied to `%s'\n"
 msgstr "Không đủ quyền cho « %s ».\n"
 
-#: src/util/connection.c:441
+#: src/util/connection.c:446
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
@@ -8763,17 +8799,17 @@
 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:981
+#: src/util/crypto_rsa.c:999
 #, 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"
 
-#: src/util/disk.c:1221
+#: src/util/disk.c:1226
 #, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr "Mong đợi « %s » là một thư mục.\n"
 
-#: src/util/disk.c:1444 src/util/service.c:1328
+#: src/util/disk.c:1449 src/util/service.c:1328
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "Không thể lấy thông tin về người dùng « %s »: %s\n"
@@ -9271,6 +9307,16 @@
 msgid "signal (%d, %p) returned %d.\n"
 msgstr ""
 
+#: src/util/socks.c:592
+#, c-format
+msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
+msgstr ""
+
+#: src/util/socks.c:605
+#, c-format
+msgid "Attempting to proxy service `%s' to invalid port %d or hostname `%s'.\n"
+msgstr ""
+
 #: src/util/strings.c:146
 msgid "b"
 msgstr "b"

Modified: gnunet/po/zh_CN.po
===================================================================
--- gnunet/po/zh_CN.po  2015-09-16 13:18:29 UTC (rev 36366)
+++ gnunet/po/zh_CN.po  2015-09-22 01:20:28 UTC (rev 36367)
@@ -7,7 +7,7 @@
 msgstr ""
 "Project-Id-Version: gnunet-0.8.1\n"
 "Report-Msgid-Bugs-To: address@hidden"
-"POT-Creation-Date: 2015-07-24 15:20+0200\n"
+"POT-Creation-Date: 2015-09-06 02:18+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"
@@ -351,13 +351,11 @@
 "%llu\n"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3290
-#: src/ats-tests/gnunet-solver-eval.c:918
+#: src/ats/gnunet-ats-solver-eval.c:3290 src/ats-tests/gnunet-solver-eval.c:918
 msgid "solver to use"
 msgstr ""
 
-#: src/ats/gnunet-ats-solver-eval.c:3293
-#: src/ats-tests/gnunet-solver-eval.c:921
+#: src/ats/gnunet-ats-solver-eval.c:3293 src/ats-tests/gnunet-solver-eval.c:921
 #: src/ats-tests/gnunet-solver-eval.c:924
 msgid "experiment to use"
 msgstr ""
@@ -642,58 +640,58 @@
 msgid "Print information about ATS state"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/cadet/gnunet-cadet.c:376
+#: src/cadet/gnunet-cadet.c:458
 #, fuzzy, c-format
 msgid "Invalid target `%s'\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/cadet/gnunet-cadet.c:643
+#: src/cadet/gnunet-cadet.c:735
 #, fuzzy, c-format
 msgid "Invalid peer ID `%s'\n"
 msgstr "无效条目。\n"
 
-#: src/cadet/gnunet-cadet.c:686
+#: src/cadet/gnunet-cadet.c:778
 #, fuzzy, c-format
 msgid "Invalid tunnel owner `%s'\n"
 msgstr "IP 格式无效:“%s”\n"
 
-#: src/cadet/gnunet-cadet.c:752
-msgid "You must NOT give a TARGETwhen using 'request all' options\n"
+#: src/cadet/gnunet-cadet.c:844
+msgid "You must NOT give a TARGET when using 'request all' options\n"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:849
+#: src/cadet/gnunet-cadet.c:941
 #, fuzzy
 msgid "provide information about a particular connection"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/cadet/gnunet-cadet.c:852
+#: src/cadet/gnunet-cadet.c:944
 msgid "activate echo mode"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:855
+#: src/cadet/gnunet-cadet.c:947
 msgid "dump debug information to STDERR"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:861
+#: src/cadet/gnunet-cadet.c:953
 msgid "port to listen to (default; 0)"
 msgstr ""
 
-#: src/cadet/gnunet-cadet.c:864
+#: src/cadet/gnunet-cadet.c:956
 #, fuzzy
 msgid "provide information about a patricular peer"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/cadet/gnunet-cadet.c:867
+#: src/cadet/gnunet-cadet.c:959
 #, fuzzy
 msgid "provide information about all peers"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/cadet/gnunet-cadet.c:870
+#: src/cadet/gnunet-cadet.c:962
 #, fuzzy
 msgid "provide information about a particular tunnel"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
 
-#: src/cadet/gnunet-cadet.c:873
+#: src/cadet/gnunet-cadet.c:965
 #, fuzzy
 msgid "provide information about all tunnels"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
@@ -1403,20 +1401,20 @@
 msgid "# PAYLOAD dropped (out of order)"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:177
+#: src/core/gnunet-service-core_neighbours.c:178
 msgid "# sessions terminated by transport disconnect"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:193
-#: src/core/gnunet-service-core_neighbours.c:355
+#: src/core/gnunet-service-core_neighbours.c:194
+#: src/core/gnunet-service-core_neighbours.c:362
 msgid "# neighbour entries allocated"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:264
+#: src/core/gnunet-service-core_neighbours.c:270
 msgid "# encrypted bytes given to transport"
 msgstr ""
 
-#: src/core/gnunet-service-core_neighbours.c:438
+#: src/core/gnunet-service-core_neighbours.c:448
 #, c-format
 msgid "Unsupported message of type %u (%u bytes) received from peer `%s'\n"
 msgstr ""
@@ -1461,7 +1459,7 @@
 msgstr ""
 
 #: src/datacache/datacache.c:119 src/datacache/datacache.c:294
-#: src/datastore/gnunet-service-datastore.c:853
+#: src/datastore/gnunet-service-datastore.c:866
 msgid "# bytes stored"
 msgstr ""
 
@@ -1535,83 +1533,83 @@
 msgid "Failed to transmit request to drop database.\n"
 msgstr ""
 
-#: src/datastore/datastore_api.c:394
+#: src/datastore/datastore_api.c:395
 msgid "# queue entry timeouts"
 msgstr ""
 
-#: src/datastore/datastore_api.c:443
+#: src/datastore/datastore_api.c:450
 msgid "# queue overflows"
 msgstr ""
 
-#: src/datastore/datastore_api.c:471
+#: src/datastore/datastore_api.c:478
 msgid "# queue entries created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:491
+#: src/datastore/datastore_api.c:498
 msgid "# Requests dropped from datastore queue"
 msgstr ""
 
-#: src/datastore/datastore_api.c:533
+#: src/datastore/datastore_api.c:540
 msgid "# datastore connections (re)created"
 msgstr ""
 
-#: src/datastore/datastore_api.c:621
+#: src/datastore/datastore_api.c:628
 msgid "# transmission request failures"
 msgstr ""
 
-#: src/datastore/datastore_api.c:645
+#: src/datastore/datastore_api.c:652
 msgid "# bytes sent to datastore"
 msgstr ""
 
-#: src/datastore/datastore_api.c:787
+#: src/datastore/datastore_api.c:794
 msgid "Failed to receive status response from database."
 msgstr ""
 
-#: src/datastore/datastore_api.c:801
+#: src/datastore/datastore_api.c:808
 msgid "Error reading response from datastore service"
 msgstr ""
 
-#: src/datastore/datastore_api.c:813 src/datastore/datastore_api.c:819
+#: src/datastore/datastore_api.c:820 src/datastore/datastore_api.c:826
 msgid "Invalid error message received from datastore service"
 msgstr ""
 
-#: src/datastore/datastore_api.c:823
+#: src/datastore/datastore_api.c:830
 msgid "# status messages received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:893
+#: src/datastore/datastore_api.c:909
 msgid "# PUT requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:959
+#: src/datastore/datastore_api.c:975
 msgid "# RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1020
+#: src/datastore/datastore_api.c:1036
 msgid "# RELEASE RESERVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1080
+#: src/datastore/datastore_api.c:1096
 msgid "# UPDATE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1144
+#: src/datastore/datastore_api.c:1160
 msgid "# REMOVE requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1248
+#: src/datastore/datastore_api.c:1264
 msgid "# Results received"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1315
+#: src/datastore/datastore_api.c:1331
 msgid "# GET REPLICATION requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1378
+#: src/datastore/datastore_api.c:1394
 msgid "# GET ZERO ANONYMITY requests executed"
 msgstr ""
 
-#: src/datastore/datastore_api.c:1447
+#: src/datastore/datastore_api.c:1463
 msgid "# GET requests executed"
 msgstr ""
 
@@ -1636,29 +1634,29 @@
 msgid "Manipulate GNUnet datastore"
 msgstr "更改配置文件中的一个值"
 
-#: src/datastore/gnunet-service-datastore.c:365
+#: src/datastore/gnunet-service-datastore.c:372
 msgid "# bytes expired"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:439
+#: src/datastore/gnunet-service-datastore.c:447
 msgid "# bytes purged (low-priority)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:497
+#: src/datastore/gnunet-service-datastore.c:505
 #: src/gns/gnunet-gns-helper-service-w32.c:223
 msgid "Transmission to client failed!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:528
+#: src/datastore/gnunet-service-datastore.c:536
 #: src/gns/gnunet-gns-helper-service-w32.c:262
 msgid "Shutdown in progress, aborting transmission.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:643
+#: src/datastore/gnunet-service-datastore.c:652
 msgid "# results found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:686
+#: src/datastore/gnunet-service-datastore.c:696
 #, c-format
 msgid ""
 "Insufficient space (%llu bytes are available) to satisfy `%s' request for "
@@ -1665,7 +1663,7 @@
 "%llu bytes\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:697
+#: src/datastore/gnunet-service-datastore.c:707
 #, c-format
 msgid ""
 "The requested amount (%llu bytes) is larger than the cache size (%llu "
@@ -1672,129 +1670,129 @@
 "bytes)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:701
+#: src/datastore/gnunet-service-datastore.c:711
 msgid ""
 "Insufficient space to satisfy request and requested amount is larger than "
 "cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:707
+#: src/datastore/gnunet-service-datastore.c:717
 msgid "Insufficient space to satisfy request"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:712
-#: src/datastore/gnunet-service-datastore.c:767
-#: src/datastore/gnunet-service-datastore.c:1019
-#: src/datastore/gnunet-service-datastore.c:1597
+#: src/datastore/gnunet-service-datastore.c:723
+#: src/datastore/gnunet-service-datastore.c:779
+#: src/datastore/gnunet-service-datastore.c:1035
+#: src/datastore/gnunet-service-datastore.c:1630
 msgid "# reserved"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:780
+#: src/datastore/gnunet-service-datastore.c:793
 msgid "Could not find matching reservation"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:865
+#: src/datastore/gnunet-service-datastore.c:879
 #, c-format
 msgid "Need %llu bytes more space (%llu allowed, using %llu)\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1071
+#: src/datastore/gnunet-service-datastore.c:1088
 msgid "# GET requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1083
+#: src/datastore/gnunet-service-datastore.c:1101
 msgid "# requests filtered by bloomfilter"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1121
+#: src/datastore/gnunet-service-datastore.c:1141
 msgid "# UPDATE requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1149
+#: src/datastore/gnunet-service-datastore.c:1170
 msgid "# GET REPLICATION requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1182
+#: src/datastore/gnunet-service-datastore.c:1204
 msgid "# GET ZERO ANONYMITY requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1207
+#: src/datastore/gnunet-service-datastore.c:1233
 msgid "Content not found"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1215
+#: src/datastore/gnunet-service-datastore.c:1244
 msgid "# bytes removed (explicit request)"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1247
+#: src/datastore/gnunet-service-datastore.c:1277
 msgid "# REMOVE requests received"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1291
+#: src/datastore/gnunet-service-datastore.c:1321
 #, c-format
 msgid ""
 "Datastore payload must have been inaccurate (%lld < %lld). Recomputing it.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1296
+#: src/datastore/gnunet-service-datastore.c:1326
 #, c-format
 msgid "New payload: %lld\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1349
+#: src/datastore/gnunet-service-datastore.c:1379
 #, c-format
 msgid "Loading `%s' datastore plugin\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1360
+#: src/datastore/gnunet-service-datastore.c:1390
 #, fuzzy, c-format
 msgid "Failed to load datastore plugin for `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/datastore/gnunet-service-datastore.c:1429
-#: src/datastore/gnunet-service-datastore.c:1490
+#: src/datastore/gnunet-service-datastore.c:1459
+#: src/datastore/gnunet-service-datastore.c:1522
 msgid "Bloomfilter construction complete.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1477
+#: src/datastore/gnunet-service-datastore.c:1509
 msgid "Rebuilding bloomfilter.  Please be patient.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1487
+#: src/datastore/gnunet-service-datastore.c:1519
 msgid "Plugin does not support get_keys function. Please fix!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1625
-#: src/datastore/gnunet-service-datastore.c:1636
+#: src/datastore/gnunet-service-datastore.c:1661
+#: src/datastore/gnunet-service-datastore.c:1673
 #, c-format
 msgid "No `%s' specified for `%s' in configuration!\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1630
+#: src/datastore/gnunet-service-datastore.c:1667
 #, c-format
 msgid "# bytes used in file-sharing datastore `%s'"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1641
+#: src/datastore/gnunet-service-datastore.c:1679
 msgid "# quota"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1643
+#: src/datastore/gnunet-service-datastore.c:1681
 msgid "# cache size"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1656
+#: src/datastore/gnunet-service-datastore.c:1696
 #, c-format
 msgid "Could not use specified filename `%s' for bloomfilter.\n"
 msgstr ""
 
-#: src/datastore/gnunet-service-datastore.c:1674
-#: src/datastore/gnunet-service-datastore.c:1690
+#: src/datastore/gnunet-service-datastore.c:1714
+#: src/datastore/gnunet-service-datastore.c:1730
 #, fuzzy, c-format
 msgid "Failed to remove bogus bloomfilter file `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/datastore/gnunet-service-datastore.c:1720
+#: src/datastore/gnunet-service-datastore.c:1760
 #, fuzzy
 msgid "Failed to initialize bloomfilter.\n"
 msgstr "初始化“%s”服务失败。\n"
@@ -1855,7 +1853,7 @@
 #: src/namecache/plugin_namecache_sqlite.c:193
 #: src/namestore/plugin_namestore_sqlite.c:204
 #: src/peerstore/plugin_peerstore_sqlite.c:479
-#: src/psycstore/plugin_psycstore_sqlite.c:324
+#: src/psycstore/plugin_psycstore_sqlite.c:325
 #, c-format
 msgid "Unable to initialize SQLite: %s.\n"
 msgstr "无法初始化 SQLite:%s。\n"
@@ -1934,9 +1932,9 @@
 msgstr ""
 
 #: src/dht/gnunet-dht-get.c:204 src/dht/gnunet-dht-monitor.c:271
-#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:755
-#: src/fs/gnunet-download.c:328 src/fs/gnunet-publish.c:961
-#: src/fs/gnunet-search.c:307 src/fs/gnunet-unindex.c:168
+#: src/dht/gnunet-dht-put.c:213 src/fs/gnunet-auto-share.c:794
+#: src/fs/gnunet-download.c:327 src/fs/gnunet-publish.c:954
+#: src/fs/gnunet-search.c:306 src/fs/gnunet-unindex.c:167
 #: src/nse/gnunet-nse-profiler.c:873
 msgid "be verbose (print progress information)"
 msgstr ""
@@ -1953,8 +1951,7 @@
 msgid "Prints all packets that go through the DHT."
 msgstr ""
 
-#: src/dht/gnunet_dht_profiler.c:1393
-#: src/testbed/gnunet-testbed-profiler.c:267
+#: src/dht/gnunet_dht_profiler.c:1393 src/testbed/gnunet-testbed-profiler.c:267
 #, fuzzy, c-format
 msgid "Exiting as the number of peers is %u\n"
 msgstr "增加 TCP/IP 的最大连接数"
@@ -2169,8 +2166,7 @@
 msgid "# GET requests given to datacache"
 msgstr ""
 
-#: src/dht/gnunet-service-dht_hello.c:84
-#: src/dht/gnunet-service-xdht_hello.c:82
+#: src/dht/gnunet-service-dht_hello.c:84 src/dht/gnunet-service-xdht_hello.c:82
 msgid "# HELLOs obtained from peerinfo"
 msgstr ""
 
@@ -3002,72 +2998,72 @@
 msgid "Failed to connect to datastore."
 msgstr ""
 
-#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:443
+#: src/fs/fs_publish.c:127 src/fs/fs_publish.c:441
 #, c-format
 msgid "Publishing failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:709 src/fs/fs_publish.c:726 src/fs/fs_publish.c:765
-#: src/fs/fs_publish.c:786 src/fs/fs_publish.c:810 src/fs/fs_publish.c:1060
+#: src/fs/fs_publish.c:707 src/fs/fs_publish.c:724 src/fs/fs_publish.c:763
+#: src/fs/fs_publish.c:784 src/fs/fs_publish.c:808 src/fs/fs_publish.c:1058
 #, c-format
 msgid "Can not index file `%s': %s.  Will try to insert instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:711
+#: src/fs/fs_publish.c:709
 msgid "timeout on index-start request to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:723
+#: src/fs/fs_publish.c:721
 #, fuzzy
 msgid "unknown error"
 msgstr "未知错误"
 
-#: src/fs/fs_publish.c:767
+#: src/fs/fs_publish.c:765
 msgid "failed to compute hash"
 msgstr ""
 
-#: src/fs/fs_publish.c:787
+#: src/fs/fs_publish.c:785
 msgid "filename too long"
 msgstr ""
 
-#: src/fs/fs_publish.c:812
+#: src/fs/fs_publish.c:810
 msgid "could not connect to `fs' service"
 msgstr ""
 
-#: src/fs/fs_publish.c:835
+#: src/fs/fs_publish.c:833
 #, fuzzy, c-format
 msgid "Failed to get file identifiers for `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/fs_publish.c:899 src/fs/fs_publish.c:940
+#: src/fs/fs_publish.c:897 src/fs/fs_publish.c:938
 msgid "Can not create LOC URI. Will continue with CHK instead.\n"
 msgstr ""
 
-#: src/fs/fs_publish.c:1014
+#: src/fs/fs_publish.c:1012
 #, c-format
 msgid "Recursive upload failed at `%s': %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1022
+#: src/fs/fs_publish.c:1020
 #, c-format
 msgid "Recursive upload failed: %s"
 msgstr ""
 
-#: src/fs/fs_publish.c:1062
+#: src/fs/fs_publish.c:1060
 msgid "needs to be an actual file"
 msgstr ""
 
-#: src/fs/fs_publish.c:1301
+#: src/fs/fs_publish.c:1299
 #, fuzzy, c-format
 msgid "Datastore failure: %s"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/fs/fs_publish.c:1392
+#: src/fs/fs_publish.c:1390
 #, c-format
 msgid "Reserving space for %u entries and %llu bytes for publication\n"
 msgstr ""
 
-#: src/fs/fs_publish_ksk.c:219
+#: src/fs/fs_publish_ksk.c:224
 msgid "Could not connect to datastore."
 msgstr ""
 
@@ -3242,48 +3238,48 @@
 msgid "Failed to save state to file %s\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/gnunet-auto-share.c:402
+#: src/fs/gnunet-auto-share.c:415
 #, c-format
 msgid "Publication of `%s' done\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:490
+#: src/fs/gnunet-auto-share.c:504
 #, c-format
 msgid "Publishing `%s'\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:499
+#: src/fs/gnunet-auto-share.c:514
 #, fuzzy, c-format
 msgid "Failed to run `%s'\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/fs/gnunet-auto-share.c:688
+#: src/fs/gnunet-auto-share.c:725
 #, c-format
 msgid ""
 "You must specify one and only one directory name for automatic publication.\n"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:739 src/fs/gnunet-publish.c:908
+#: src/fs/gnunet-auto-share.c:778 src/fs/gnunet-publish.c:901
 msgid "set the desired LEVEL of sender-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:743 src/fs/gnunet-publish.c:912
+#: src/fs/gnunet-auto-share.c:782 src/fs/gnunet-publish.c:905
 msgid "disable adding the creation time to the metadata of the uploaded file"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:746 src/fs/gnunet-publish.c:915
+#: src/fs/gnunet-auto-share.c:785 src/fs/gnunet-publish.c:908
 msgid "do not use libextractor to add keywords or metadata"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:749 src/fs/gnunet-publish.c:939
+#: src/fs/gnunet-auto-share.c:788 src/fs/gnunet-publish.c:932
 msgid "specify the priority of the content"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:752 src/fs/gnunet-publish.c:946
+#: src/fs/gnunet-auto-share.c:791 src/fs/gnunet-publish.c:939
 msgid "set the desired replication LEVEL"
 msgstr ""
 
-#: src/fs/gnunet-auto-share.c:772
+#: src/fs/gnunet-auto-share.c:815
 msgid "Automatically publish files from a directory on GNUnet"
 msgstr ""
 
@@ -3353,65 +3349,65 @@
 msgid "Downloading `%s' done (%s/s).\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:209 src/fs/gnunet-publish.c:319
-#: src/fs/gnunet-search.c:206 src/fs/gnunet-unindex.c:108
+#: src/fs/gnunet-download.c:208 src/fs/gnunet-publish.c:297
+#: src/fs/gnunet-search.c:205 src/fs/gnunet-unindex.c:107
 #, c-format
 msgid "Unexpected status: %d\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:234
+#: src/fs/gnunet-download.c:233
 #, fuzzy
 msgid "You need to specify a URI argument.\n"
 msgstr "您必须指定一个昵称\n"
 
-#: src/fs/gnunet-download.c:240 src/fs/gnunet-publish.c:734
+#: src/fs/gnunet-download.c:239 src/fs/gnunet-publish.c:728
 #, fuzzy, c-format
 msgid "Failed to parse URI: %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/fs/gnunet-download.c:247
+#: src/fs/gnunet-download.c:246
 msgid "Only CHK or LOC URIs supported.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:254
+#: src/fs/gnunet-download.c:253
 msgid "Target filename must be specified.\n"
 msgstr ""
 
-#: src/fs/gnunet-download.c:268 src/fs/gnunet-publish.c:878
-#: src/fs/gnunet-search.c:256 src/fs/gnunet-unindex.c:140
+#: src/fs/gnunet-download.c:267 src/fs/gnunet-publish.c:872
+#: src/fs/gnunet-search.c:255 src/fs/gnunet-unindex.c:139
 #, fuzzy, c-format
 msgid "Could not initialize `%s' subsystem.\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/fs/gnunet-download.c:305 src/fs/gnunet-search.c:295
+#: src/fs/gnunet-download.c:304 src/fs/gnunet-search.c:294
 msgid "set the desired LEVEL of receiver-anonymity"
 msgstr ""
 
-#: src/fs/gnunet-download.c:308
+#: src/fs/gnunet-download.c:307
 msgid "delete incomplete downloads (when aborted with CTRL-C)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:311 src/fs/gnunet-search.c:298
+#: src/fs/gnunet-download.c:310 src/fs/gnunet-search.c:297
 msgid "only search the local peer (no P2P network search)"
 msgstr ""
 
-#: src/fs/gnunet-download.c:314
+#: src/fs/gnunet-download.c:313
 msgid "write the file to FILENAME"
 msgstr ""
 
-#: src/fs/gnunet-download.c:318
+#: src/fs/gnunet-download.c:317
 msgid "set the maximum number of parallel downloads that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:322
+#: src/fs/gnunet-download.c:321
 msgid "set the maximum number of parallel requests for blocks that is allowed"
 msgstr ""
 
-#: src/fs/gnunet-download.c:325
+#: src/fs/gnunet-download.c:324
 msgid "download a GNUnet directory recursively"
 msgstr ""
 
-#: src/fs/gnunet-download.c:339
+#: src/fs/gnunet-download.c:338
 msgid ""
 "Download files from GNUnet using a GNUnet CHK or LOC URI (gnunet://fs/"
 "chk/...)"
@@ -3441,132 +3437,132 @@
 msgid "run a testbed to measure file-sharing performance"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:238 src/fs/gnunet-publish.c:250
+#: src/fs/gnunet-publish.c:221 src/fs/gnunet-publish.c:233
 #, c-format
 msgid "Publishing `%s' at %llu/%llu (%s remaining)\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:257
+#: src/fs/gnunet-publish.c:241
 #, c-format
 msgid "Error publishing: %s.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:268
+#: src/fs/gnunet-publish.c:248
 #, c-format
 msgid "Publishing `%s' done.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:273
+#: src/fs/gnunet-publish.c:253
 #, c-format
 msgid "URI is `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:281
+#: src/fs/gnunet-publish.c:261
 #, c-format
 msgid "Namespace URI is `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:299
+#: src/fs/gnunet-publish.c:277
 msgid "Starting cleanup after abort\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:306
+#: src/fs/gnunet-publish.c:284
 msgid "Cleanup after abort completed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:312
+#: src/fs/gnunet-publish.c:290
 msgid "Cleanup after abort failed.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:447
+#: src/fs/gnunet-publish.c:432
 #, fuzzy, c-format
 msgid "Meta data for file `%s' (%s)\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/gnunet-publish.c:449
+#: src/fs/gnunet-publish.c:437
 #, fuzzy, c-format
 msgid "Keywords for file `%s' (%s)\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/fs/gnunet-publish.c:594
+#: src/fs/gnunet-publish.c:591
 #, fuzzy
 msgid "Could not publish\n"
 msgstr "无法解析“%s”(%s):%s\n"
 
-#: src/fs/gnunet-publish.c:619
+#: src/fs/gnunet-publish.c:616
 msgid "Could not start publishing.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:653
+#: src/fs/gnunet-publish.c:650
 #, fuzzy, c-format
 msgid "Scanning directory `%s'.\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/fs/gnunet-publish.c:657
+#: src/fs/gnunet-publish.c:654
 #, fuzzy, c-format
 msgid "Scanning file `%s'.\n"
 msgstr "未知的命令“%s”。\n"
 
-#: src/fs/gnunet-publish.c:663
+#: src/fs/gnunet-publish.c:660
 #, c-format
 msgid "There was trouble processing file `%s', skipping it.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:670
+#: src/fs/gnunet-publish.c:667
 msgid "Preprocessing complete.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:675
+#: src/fs/gnunet-publish.c:672
 #, fuzzy, c-format
 msgid "Extracting meta data from file `%s' complete.\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/gnunet-publish.c:682
+#: src/fs/gnunet-publish.c:679
 msgid "Meta data extraction has finished.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:691
+#: src/fs/gnunet-publish.c:688
 #, fuzzy
 msgid "Internal error scanning directory.\n"
 msgstr "未知错误。\n"
 
-#: src/fs/gnunet-publish.c:723
+#: src/fs/gnunet-publish.c:716
 #, c-format
 msgid "Selected pseudonym `%s' unknown\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:755
+#: src/fs/gnunet-publish.c:749
 #, fuzzy, c-format
 msgid "Failed to access `%s': %s\n"
 msgstr "打开日志文件“%s”失败:%s\n"
 
-#: src/fs/gnunet-publish.c:769
+#: src/fs/gnunet-publish.c:763
 msgid ""
 "Failed to start meta directory scanner.  Is gnunet-helper-publish-fs "
 "installed?\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:825
+#: src/fs/gnunet-publish.c:819
 #, c-format
 msgid "Cannot extract metadata from a URI!\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:832
+#: src/fs/gnunet-publish.c:826
 #, c-format
 msgid "You must specify one and only one filename for insertion.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:838
+#: src/fs/gnunet-publish.c:832
 #, c-format
 msgid "You must NOT specify an URI and a filename.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:846 src/vpn/gnunet-vpn.c:209
+#: src/fs/gnunet-publish.c:840 src/vpn/gnunet-vpn.c:209
 #, c-format
 msgid "Option `%s' is required when using option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:857 src/fs/gnunet-publish.c:865
+#: src/fs/gnunet-publish.c:851 src/fs/gnunet-publish.c:859
 #: src/transport/gnunet-transport.c:1928 src/transport/gnunet-transport.c:1958
 #: src/transport/gnunet-transport.c:1989
 #, c-format
@@ -3573,56 +3569,56 @@
 msgid "Option `%s' makes no sense without option `%s'.\n"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:919
+#: src/fs/gnunet-publish.c:912
 msgid ""
 "print list of extracted keywords that would be used, but do not perform "
 "upload"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:923
+#: src/fs/gnunet-publish.c:916
 msgid ""
 "add an additional keyword for the top-level file or directory (this option "
 "can be specified multiple times)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:927
+#: src/fs/gnunet-publish.c:920
 msgid "set the meta-data for the given TYPE to the given VALUE"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:930
+#: src/fs/gnunet-publish.c:923
 msgid ""
 "do not index, perform full insertion (stores entire file in encrypted form "
 "in GNUnet database)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:935
+#: src/fs/gnunet-publish.c:928
 msgid ""
 "specify ID of an updated version to be published in the future (for "
 "namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:943
+#: src/fs/gnunet-publish.c:936
 msgid "publish the files under the pseudonym NAME (place file into namespace)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:949
+#: src/fs/gnunet-publish.c:942
 msgid ""
 "only simulate the process but do not do any actual publishing (useful to "
 "compute URIs)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:953
+#: src/fs/gnunet-publish.c:946
 msgid ""
 "set the ID of this version of the publication (for namespace insertions only)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:957
+#: src/fs/gnunet-publish.c:950
 msgid ""
 "URI to be published (can be used instead of passing a file to add keywords "
 "to the file with the respective URI)"
 msgstr ""
 
-#: src/fs/gnunet-publish.c:973
+#: src/fs/gnunet-publish.c:966
 msgid "Publish a file or directory on GNUnet"
 msgstr ""
 
@@ -3636,27 +3632,27 @@
 msgid "Error searching: %s.\n"
 msgstr "创建用户出错"
 
-#: src/fs/gnunet-search.c:246
+#: src/fs/gnunet-search.c:245
 msgid "Could not create keyword URI from arguments.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:270
+#: src/fs/gnunet-search.c:269
 msgid "Could not start searching.\n"
 msgstr ""
 
-#: src/fs/gnunet-search.c:301
+#: src/fs/gnunet-search.c:300
 msgid "write search results to file starting with PREFIX"
 msgstr ""
 
-#: src/fs/gnunet-search.c:304
+#: src/fs/gnunet-search.c:303
 msgid "automatically terminate search after DELAY"
 msgstr ""
 
-#: src/fs/gnunet-search.c:311
+#: src/fs/gnunet-search.c:310
 msgid "automatically terminate search after VALUE results are found"
 msgstr ""
 
-#: src/fs/gnunet-search.c:322
+#: src/fs/gnunet-search.c:321
 msgid "Search GNUnet for files that were published on GNUnet"
 msgstr ""
 
@@ -4019,16 +4015,16 @@
 msgid "Unindexing done.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:130
+#: src/fs/gnunet-unindex.c:129
 #, c-format
 msgid "You must specify one and only one filename for unindexing.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:147
+#: src/fs/gnunet-unindex.c:146
 msgid "Could not start unindex operation.\n"
 msgstr ""
 
-#: src/fs/gnunet-unindex.c:179
+#: src/fs/gnunet-unindex.c:178
 msgid "Unindex a file that was previously indexed with gnunet-publish."
 msgstr ""
 
@@ -4426,68 +4422,68 @@
 msgid "GNS REST API initialized\n"
 msgstr ""
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:291
+#: src/gnsrecord/plugin_gnsrecord_dns.c:359
 #, fuzzy, c-format
 msgid "Unable to parse IPv4 address `%s'\n"
 msgstr "无效的进程优先级“%s”\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:312
+#: src/gnsrecord/plugin_gnsrecord_dns.c:380
 #, fuzzy, c-format
 msgid "Failed to serialize NS record with value `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:334
+#: src/gnsrecord/plugin_gnsrecord_dns.c:402
 #, fuzzy, c-format
 msgid "Failed to serialize CNAME record with value `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:418
+#: src/gnsrecord/plugin_gnsrecord_dns.c:486
 #, fuzzy, c-format
 msgid "Failed to serialize CERT record with %u bytes\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:455
+#: src/gnsrecord/plugin_gnsrecord_dns.c:522
 #, fuzzy, c-format
 msgid "Unable to parse SOA record `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:474
+#: src/gnsrecord/plugin_gnsrecord_dns.c:541
 #, fuzzy, c-format
 msgid "Failed to serialize SOA record with mname `%s' and rname `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:497
+#: src/gnsrecord/plugin_gnsrecord_dns.c:564
 #, fuzzy, c-format
 msgid "Failed to serialize PTR record with value `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:520
+#: src/gnsrecord/plugin_gnsrecord_dns.c:587
 #, fuzzy, c-format
 msgid "Unable to parse MX record `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:535
+#: src/gnsrecord/plugin_gnsrecord_dns.c:602
 #, fuzzy, c-format
 msgid "Failed to serialize MX record with hostname `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:562
+#: src/gnsrecord/plugin_gnsrecord_dns.c:629
 #, fuzzy, c-format
 msgid "Unable to parse SRV record `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:578
+#: src/gnsrecord/plugin_gnsrecord_dns.c:645
 #, fuzzy, c-format
 msgid "Failed to serialize SRV record with target `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:595
+#: src/gnsrecord/plugin_gnsrecord_dns.c:662
 #, fuzzy, c-format
 msgid "Unable to parse IPv6 address `%s'\n"
 msgstr "无效的进程优先级“%s”\n"
 
-#: src/gnsrecord/plugin_gnsrecord_dns.c:619
-#: src/gnsrecord/plugin_gnsrecord_dns.c:635
+#: src/gnsrecord/plugin_gnsrecord_dns.c:686
+#: src/gnsrecord/plugin_gnsrecord_dns.c:702
 #, fuzzy, c-format
 msgid "Unable to parse TLSA record string `%s'\n"
 msgstr "解析配置文件“%s”失败\n"
@@ -4998,6 +4994,31 @@
 msgid "Namecache failed to cache block"
 msgstr ""
 
+#: src/namecache/plugin_namecache_flat.c:119
+#: src/namecache/plugin_namecache_flat.c:236
+#: src/namestore/plugin_namestore_flat.c:184
+#: src/namestore/plugin_namestore_flat.c:352
+#, fuzzy, c-format
+msgid "Unable to initialize file: %s.\n"
+msgstr "无法初始化 SQLite:%s。\n"
+
+#: src/namecache/plugin_namecache_flat.c:130
+#: src/namestore/plugin_namestore_flat.c:195
+#, fuzzy, c-format
+msgid "Unable to get filesize: %s.\n"
+msgstr "发送消息失败。\n"
+
+#: src/namecache/plugin_namecache_flat.c:142
+#: src/namestore/plugin_namestore_flat.c:207
+#, fuzzy, c-format
+msgid "Unable to read file: %s.\n"
+msgstr "发送消息失败。\n"
+
+#: src/namecache/plugin_namecache_flat.c:391
+#, fuzzy
+msgid "flat plugin running\n"
+msgstr "sqlite 数据仓库"
+
 #: src/namecache/plugin_namecache_postgres.c:89
 #: src/namestore/plugin_namestore_postgres.c:96
 #, fuzzy
@@ -5096,8 +5117,7 @@
 msgid "Invalid public key for reverse lookup `%s'\n"
 msgstr "“%s”的参数无效。\n"
 
-#: src/namestore/gnunet-namestore.c:868
-#: src/peerinfo-tool/gnunet-peerinfo.c:817
+#: src/namestore/gnunet-namestore.c:868 src/peerinfo-tool/gnunet-peerinfo.c:817
 #, fuzzy, c-format
 msgid "Invalid URI `%s'\n"
 msgstr "无效条目。\n"
@@ -5258,10 +5278,19 @@
 msgid "Namestore failed to store record\n"
 msgstr ""
 
+#: src/namestore/plugin_namestore_flat.c:650
+#, fuzzy
+msgid "flat file database running\n"
+msgstr "sqlite 数据仓库"
+
 #: src/namestore/plugin_rest_namestore.c:1023
 msgid "Namestore REST API initialized\n"
 msgstr ""
 
+#: src/nat/gnunet-nat.c:160
+msgid "GNUnet NAT traversal autoconfigure daemon"
+msgstr ""
+
 #: src/nat/gnunet-nat-server.c:279
 #, c-format
 msgid "Please pass valid port number as the first argument! (got `%s')\n"
@@ -5271,53 +5300,57 @@
 msgid "GNUnet NAT traversal test helper daemon"
 msgstr ""
 
-#: src/nat/nat_auto.c:179
+#: src/nat/nat_auto.c:394
 msgid "NAT traversal with ICMP Server succeeded.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:180
+#: src/nat/nat_auto.c:395
 msgid "NAT traversal with ICMP Server failed.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:201
+#: src/nat/nat_auto.c:416
 msgid "Testing connection reversal with ICMP server.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:249
+#: src/nat/nat_auto.c:448
 #, c-format
 msgid "Detected external IP `%s'\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:327
+#: src/nat/nat_auto.c:579
 msgid "This system has a global IPv6 address, setting IPv6 to supported.\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:343
+#: src/nat/nat_auto.c:597
 #, fuzzy, c-format
 msgid "Detected internal network address `%s'.\n"
 msgstr "GNUnet 现在使用 IP 地址 %s。\n"
 
-#: src/nat/nat_auto.c:406
+#: src/nat/nat_auto.c:669 src/nat/nat_test.c:364
+msgid "Failed to connect to `gnunet-nat-server'\n"
+msgstr ""
+
+#: src/nat/nat_auto.c:715
 msgid "upnpc found, enabling its use\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:407
+#: src/nat/nat_auto.c:716
 msgid "upnpc not found\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:437
+#: src/nat/nat_auto.c:748
 msgid "test_icmp_server not possible, as we have no public IPv4 address\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:445 src/nat/nat_auto.c:490
+#: src/nat/nat_auto.c:756 src/nat/nat_auto.c:804
 msgid "test_icmp_server not possible, as we are not behind NAT\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:453 src/nat/nat_auto.c:498
+#: src/nat/nat_auto.c:764 src/nat/nat_auto.c:812
 msgid "No working gnunet-helper-nat-server found\n"
 msgstr ""
 
-#: src/nat/nat_auto.c:483
+#: src/nat/nat_auto.c:797
 msgid "test_icmp_client not possible, as we have no internal IPv4 address\n"
 msgstr ""
 
@@ -5331,26 +5364,26 @@
 msgid "Failed to start %s\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/nat/nat.c:1286
+#: src/nat/nat.c:1305
 msgid "Error while running upnp client:\n"
 msgstr ""
 
-#: src/nat/nat.c:1356
+#: src/nat/nat.c:1375
 #, fuzzy, c-format
 msgid "Failed to run upnp client for port %u\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/nat/nat.c:1498
+#: src/nat/nat.c:1517
 msgid "malformed"
 msgstr ""
 
-#: src/nat/nat.c:1552
+#: src/nat/nat.c:1571
 msgid ""
 "UPnP enabled in configuration, but UPnP client `upnpc` command not found, "
 "disabling UPnP \n"
 msgstr ""
 
-#: src/nat/nat.c:1680 src/nat/nat.c:1692
+#: src/nat/nat.c:1700 src/nat/nat.c:1712
 #, c-format
 msgid ""
 "Configuration requires `%s', but binary is not installed properly (SUID bit "
@@ -5357,91 +5390,91 @@
 "not set).  Option disabled.\n"
 msgstr ""
 
-#: src/nat/nat.c:1830
+#: src/nat/nat.c:1855
 msgid "Internal IP address not known, cannot use ICMP NAT traversal method\n"
 msgstr ""
 
-#: src/nat/nat.c:1846
+#: src/nat/nat.c:1871
 #, c-format
 msgid "Running gnunet-helper-nat-client %s %s %u\n"
 msgstr ""
 
-#: src/nat/nat.c:1931
+#: src/nat/nat.c:1958
 msgid "Operation Successful"
 msgstr ""
 
-#: src/nat/nat.c:1933
+#: src/nat/nat.c:1960
 msgid "Internal Failure (IPC, ...)"
 msgstr ""
 
-#: src/nat/nat.c:1935
+#: src/nat/nat.c:1962
 msgid "Failure in network subsystem, check permissions."
 msgstr ""
 
-#: src/nat/nat.c:1937
+#: src/nat/nat.c:1964
 msgid "Encountered timeout while performing operation"
 msgstr ""
 
-#: src/nat/nat.c:1939
+#: src/nat/nat.c:1966
 msgid "detected that we are offline"
 msgstr ""
 
-#: src/nat/nat.c:1941
+#: src/nat/nat.c:1968
 msgid "`upnpc` command not found"
 msgstr ""
 
-#: src/nat/nat.c:1943
+#: src/nat/nat.c:1970
 #, fuzzy
 msgid "Failed to run `upnpc` command"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/nat/nat.c:1945
+#: src/nat/nat.c:1972
 msgid "`upnpc' command took too long, process killed"
 msgstr ""
 
-#: src/nat/nat.c:1947
+#: src/nat/nat.c:1974
 msgid "`upnpc' command failed to establish port mapping"
 msgstr ""
 
-#: src/nat/nat.c:1949
+#: src/nat/nat.c:1976
 msgid "`external-ip' command not found"
 msgstr ""
 
-#: src/nat/nat.c:1951
+#: src/nat/nat.c:1978
 #, fuzzy
 msgid "Failed to run `external-ip` command"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/nat/nat.c:1953
+#: src/nat/nat.c:1980
 msgid "`external-ip' command output invalid"
 msgstr ""
 
-#: src/nat/nat.c:1955
+#: src/nat/nat.c:1982
 msgid "no valid address was returned by `external-ip'"
 msgstr ""
 
-#: src/nat/nat.c:1957
+#: src/nat/nat.c:1984
 #, fuzzy
 msgid "Could not determine interface with internal/local network address"
 msgstr "无法确定用户界面定义文件。"
 
-#: src/nat/nat.c:1959
+#: src/nat/nat.c:1986
 msgid "No functioning gnunet-helper-nat-server installation found"
 msgstr ""
 
-#: src/nat/nat.c:1961
+#: src/nat/nat.c:1988
 msgid "NAT test could not be initialized"
 msgstr ""
 
-#: src/nat/nat.c:1963
+#: src/nat/nat.c:1990
 msgid "NAT test timeout reached"
 msgstr ""
 
-#: src/nat/nat.c:1965
+#: src/nat/nat.c:1992
 msgid "could not register NAT"
 msgstr ""
 
-#: src/nat/nat.c:1967
+#: src/nat/nat.c:1994
 msgid "No working gnunet-helper-nat-client installation found"
 msgstr ""
 
@@ -5453,16 +5486,12 @@
 msgid "`upnpc' command not found\n"
 msgstr ""
 
-#: src/nat/nat_test.c:360
-msgid "Failed to connect to `gnunet-nat-server'\n"
-msgstr ""
-
-#: src/nat/nat_test.c:462
+#: src/nat/nat_test.c:467
 #, c-format
 msgid "Failed to create listen socket bound to `%s' for NAT test: %s\n"
 msgstr ""
 
-#: src/nat/nat_test.c:497
+#: src/nat/nat_test.c:502
 #, fuzzy
 msgid "NAT test failed to start NAT library\n"
 msgstr "初始化“%s”服务失败。\n"
@@ -5505,8 +5534,8 @@
 msgid "Measure quality and performance of the NSE service."
 msgstr "无法访问该服务"
 
-#: src/nse/gnunet-service-nse.c:1537
-#: src/revocation/gnunet-service-revocation.c:827 src/util/gnunet-scrypt.c:260
+#: src/nse/gnunet-service-nse.c:1541
+#: src/revocation/gnunet-service-revocation.c:848 src/util/gnunet-scrypt.c:260
 #, fuzzy
 msgid "Value is too large.\n"
 msgstr "值不在合法范围内。"
@@ -5767,7 +5796,7 @@
 msgstr ""
 
 #: src/peerstore/plugin_peerstore_sqlite.c:398
-#: src/psycstore/plugin_psycstore_sqlite.c:281
+#: src/psycstore/plugin_psycstore_sqlite.c:282
 #, fuzzy, c-format
 msgid ""
 "Error executing SQL query: %s\n"
@@ -5775,7 +5804,7 @@
 msgstr "创建用户出错"
 
 #: src/peerstore/plugin_peerstore_sqlite.c:422
-#: src/psycstore/plugin_psycstore_sqlite.c:258
+#: src/psycstore/plugin_psycstore_sqlite.c:259
 #, fuzzy, c-format
 msgid ""
 "Error preparing SQL query: %s\n"
@@ -5832,43 +5861,48 @@
 msgid "Failed to get master counters!\n"
 msgstr "发送消息失败。\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:645
-#, fuzzy
-msgid "Failed to begin modifying state!\n"
+#: src/psycstore/gnunet-service-psycstore.c:657
+#, fuzzy, c-format
+msgid "Failed to begin modifying state: %d\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:656
+#: src/psycstore/gnunet-service-psycstore.c:667
+#, fuzzy, c-format
+msgid "Failed to modify state: %d\n"
+msgstr "运行 %s失败:%s %d\n"
+
+#: src/psycstore/gnunet-service-psycstore.c:675
 #, fuzzy
 msgid "Failed to end modifying state!\n"
 msgstr "运行 %s失败:%s %d\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:686
+#: src/psycstore/gnunet-service-psycstore.c:706
 msgid "Tried to set invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:700
+#: src/psycstore/gnunet-service-psycstore.c:720
 #, fuzzy
 msgid "Failed to begin synchronizing state!\n"
 msgstr "发送消息失败。\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:717
+#: src/psycstore/gnunet-service-psycstore.c:737
 #, fuzzy
 msgid "Failed to end synchronizing state!\n"
 msgstr "发送消息失败。\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:737
-#: src/psycstore/gnunet-service-psycstore.c:756
+#: src/psycstore/gnunet-service-psycstore.c:757
+#: src/psycstore/gnunet-service-psycstore.c:776
 #, fuzzy
 msgid "Failed to reset state!\n"
 msgstr "发送消息失败。\n"
 
-#: src/psycstore/gnunet-service-psycstore.c:779
-#: src/psycstore/gnunet-service-psycstore.c:830
+#: src/psycstore/gnunet-service-psycstore.c:799
+#: src/psycstore/gnunet-service-psycstore.c:850
 msgid "Tried to get invalid state variable name!\n"
 msgstr ""
 
-#: src/psycstore/gnunet-service-psycstore.c:806
-#: src/psycstore/gnunet-service-psycstore.c:845
+#: src/psycstore/gnunet-service-psycstore.c:826
+#: src/psycstore/gnunet-service-psycstore.c:865
 #, fuzzy
 msgid "Failed to get state variable!\n"
 msgstr "发送消息失败。\n"
@@ -5878,7 +5912,7 @@
 msgid "`%s' failed at %s:%d with error: %s (%d)\n"
 msgstr "“%s”于 %s:%d 处失败,错误为:%s\n"
 
-#: src/psycstore/plugin_psycstore_sqlite.c:1907
+#: src/psycstore/plugin_psycstore_sqlite.c:1923
 #, fuzzy
 msgid "SQLite database running\n"
 msgstr "sqlite 数据仓库"
@@ -6139,20 +6173,20 @@
 msgid "test if the public key KEY has been revoked"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:427
+#: src/revocation/gnunet-service-revocation.c:481
 msgid "# unsupported revocations received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:436
+#: src/revocation/gnunet-service-revocation.c:490
 msgid "# revocation messages received via set union"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:441
+#: src/revocation/gnunet-service-revocation.c:495
 #, c-format
 msgid "Error computing revocation set union with %s\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:445
+#: src/revocation/gnunet-service-revocation.c:499
 #, fuzzy
 msgid "# revocation set unions failed"
 msgstr ""
@@ -6159,16 +6193,16 @@
 "\n"
 "按任意键继续\n"
 
-#: src/revocation/gnunet-service-revocation.c:454
+#: src/revocation/gnunet-service-revocation.c:508
 msgid "# revocation set unions completed"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:493
-#: src/revocation/gnunet-service-revocation.c:759
+#: src/revocation/gnunet-service-revocation.c:547
+#: src/revocation/gnunet-service-revocation.c:780
 msgid "SET service crashed, terminating revocation service\n"
 msgstr ""
 
-#: src/revocation/gnunet-service-revocation.c:851
+#: src/revocation/gnunet-service-revocation.c:872
 #, fuzzy
 msgid "Could not open revocation database file!"
 msgstr "无法连接到 %s:%u:%s\n"
@@ -6232,7 +6266,9 @@
 msgstr ""
 
 #: src/scalarproduct/gnunet-service-scalarproduct_alice.c:1419
-#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1564
+#: src/scalarproduct/gnunet-service-scalarproduct_bob.c:1549
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_alice.c:1193
+#: src/scalarproduct/gnunet-service-scalarproduct-ecc_bob.c:1252
 #, fuzzy
 msgid "Connect to CADET failed\n"
 msgstr "“%s”已连接到“%s”。\n"
@@ -6500,7 +6536,7 @@
 msgid "Error loading sensor from file: %s\n"
 msgstr "创建用户出错"
 
-#: src/set/gnunet-service-set.c:1531
+#: src/set/gnunet-service-set.c:1960
 #, fuzzy
 msgid "Could not connect to cadet service\n"
 msgstr "无法连接到 %s:%u:%s\n"
@@ -6626,7 +6662,7 @@
 msgid "Could not save some persistent statistics\n"
 msgstr "初始化“%s”服务失败。\n"
 
-#: src/statistics/statistics_api.c:1090
+#: src/statistics/statistics_api.c:1088
 msgid ""
 "Failed to receive acknowledgement from statistics service, some statistics "
 "might have been lost!\n"
@@ -8213,7 +8249,7 @@
 msgid "# sessions allocated"
 msgstr ""
 
-#: src/transport/transport_api.c:812
+#: src/transport/transport_api.c:827
 #, c-format
 msgid "Received unexpected message of type %u in %s:%u\n"
 msgstr ""
@@ -8257,17 +8293,17 @@
 msgid "Metadata `%s' failed to deserialize"
 msgstr ""
 
-#: src/util/client.c:263 src/util/client.c:889 src/util/service.c:621
+#: src/util/client.c:264 src/util/client.c:894 src/util/service.c:621
 #, c-format
 msgid "UNIXPATH `%s' too long, maximum length is %llu\n"
 msgstr ""
 
-#: src/util/client.c:267 src/util/client.c:894 src/util/service.c:625
+#: src/util/client.c:268 src/util/client.c:899 src/util/service.c:625
 #, fuzzy, c-format
 msgid "Using `%s' instead\n"
 msgstr "%s:选项“%s”有歧义\n"
 
-#: src/util/client.c:362
+#: src/util/client.c:367
 #, c-format
 msgid ""
 "Could not determine valid hostname and port for service `%s' from "
@@ -8274,17 +8310,17 @@
 "configuration.\n"
 msgstr ""
 
-#: src/util/client.c:370
+#: src/util/client.c:375
 #, c-format
 msgid "Need a non-empty hostname for service `%s'.\n"
 msgstr ""
 
-#: src/util/client.c:1039
+#: src/util/client.c:1044
 #, fuzzy, c-format
 msgid "Could not connect to service `%s', configuration broken.\n"
 msgstr "无法连接到 %s:%u:%s\n"
 
-#: src/util/client.c:1051
+#: src/util/client.c:1056
 #, c-format
 msgid "Failure to transmit request to service `%s'\n"
 msgstr ""
@@ -8366,12 +8402,12 @@
 "as an environmental variable\n"
 msgstr ""
 
-#: src/util/connection.c:424
+#: src/util/connection.c:429
 #, fuzzy, c-format
 msgid "Access denied to `%s'\n"
 msgstr "“%s”已连接到“%s”。\n"
 
-#: src/util/connection.c:441
+#: src/util/connection.c:446
 #, c-format
 msgid "Accepting connection from `%s': %p\n"
 msgstr ""
@@ -8438,17 +8474,17 @@
 msgid "libgcrypt has not the expected version (version %s is required).\n"
 msgstr "libgcrypt 的版本不符合预期(要求版本 %s)。\n"
 
-#: src/util/crypto_rsa.c:981
+#: src/util/crypto_rsa.c:999
 #, fuzzy, c-format
 msgid "RSA signature verification failed at %s:%d: %s\n"
 msgstr "对驱动器“%2$s”的“%1$s”操作失败:%3$u\n"
 
-#: src/util/disk.c:1221
+#: src/util/disk.c:1226
 #, c-format
 msgid "Expected `%s' to be a directory!\n"
 msgstr "“%s”应为目录!\n"
 
-#: src/util/disk.c:1444 src/util/service.c:1328
+#: src/util/disk.c:1449 src/util/service.c:1328
 #, c-format
 msgid "Cannot obtain information about user `%s': %s\n"
 msgstr "无法获取有关用户“%s”的信息:%s\n"
@@ -8943,6 +8979,16 @@
 msgid "signal (%d, %p) returned %d.\n"
 msgstr ""
 
+#: src/util/socks.c:592
+#, c-format
+msgid "Attempting to use invalid port %d as SOCKS proxy for service `%s'.\n"
+msgstr ""
+
+#: src/util/socks.c:605
+#, c-format
+msgid "Attempting to proxy service `%s' to invalid port %d or hostname `%s'.\n"
+msgstr ""
+
 #: src/util/strings.c:146
 msgid "b"
 msgstr "b"

Modified: gnunet/src/consensus/consensus_protocol.h
===================================================================
--- gnunet/src/consensus/consensus_protocol.h   2015-09-16 13:18:29 UTC (rev 
36366)
+++ gnunet/src/consensus/consensus_protocol.h   2015-09-22 01:20:28 UTC (rev 
36367)
@@ -37,6 +37,9 @@
 
 /**
  * Sent as context message for set reconciliation.
+ *
+ * Essentially contains all the fields
+ * from 'struct TaskKey', but in NBO.
  */
 struct GNUNET_CONSENSUS_RoundContextMessage
 {
@@ -44,9 +47,44 @@
    * Type: GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ROUND_CONTEXT
    */
   struct GNUNET_MessageHeader header;
-  uint32_t round;
-  uint32_t exp_repetition;
-  uint32_t exp_subround;
+
+  /**
+   * A value from 'enum PhaseKind'.
+   */
+  uint16_t kind;
+
+  /**
+   * Number of the first peer
+   * in canonical order.
+   */
+  int16_t peer1;
+
+  /**
+   * Number of the second peer in canonical order.
+   */
+  int16_t peer2;
+
+  /**
+   * Repetition of the gradecast phase.
+   */
+  int16_t repetition;
+
+  /**
+   * Leader in the gradecast phase.
+   *
+   * Can be different from both peer1 and peer2.
+   */
+  int16_t leader;
+
+  /**
+   * Non-zero if this set reconciliation
+   * had elements removed because they were contested.
+   *
+   * Will be considered when grading broadcasts.
+   *
+   * Ignored for set operations that are not within gradecasts.
+   */
+  uint16_t is_contested;
 };
 
 GNUNET_NETWORK_STRUCT_END

Modified: gnunet/src/consensus/gnunet-service-consensus.c
===================================================================
--- gnunet/src/consensus/gnunet-service-consensus.c     2015-09-16 13:18:29 UTC 
(rev 36366)
+++ gnunet/src/consensus/gnunet-service-consensus.c     2015-09-22 01:20:28 UTC 
(rev 36367)
@@ -34,234 +34,410 @@
 #include "consensus.h"
 
 
-/**
- * Log macro that prefixes the local peer and the peer we are in contact with.
- *
- * @param kind log level
- * @param cpi ConsensusPeerInformation of the partner peer
- * @param m log message
- */
-#define LOG_PP(kind, cpi, m,...) GNUNET_log (kind, "P%d for P%d: " m, \
-   cpi->session->local_peer_idx, (int) (cpi - 
cpi->session->info),##__VA_ARGS__)
 
+GNUNET_NETWORK_STRUCT_BEGIN
 
 /**
- * Number of exponential rounds, used in the exp and completion round.
+ * Tuple of integers that together
+ * identify a task uniquely.
  */
-#define NUM_EXP_REPETITIONS 4
+struct TaskKey {
+  /**
+   * A value from 'enum PhaseKind'.
+   */
+  uint16_t kind GNUNET_PACKED;
 
+  /**
+   * Number of the first peer
+   * in canonical order.
+   */
+  int16_t peer1 GNUNET_PACKED;
 
-/* forward declarations */
-
-/* mutual recursion with struct ConsensusSession */
-struct ConsensusPeerInformation;
-
-/* mutual recursion with round_over */
-static void
-subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc);
-
-
-/**
- * Describes the current round a consensus session is in.
- */
-enum ConsensusRound
-{
   /**
-   * Not started the protocol yet.
+   * Number of the second peer in canonical order.
    */
-  CONSENSUS_ROUND_BEGIN=0,
+  int16_t peer2 GNUNET_PACKED;
+
   /**
-   * Distribution of elements with the exponential scheme.
+   * Repetition of the gradecast phase.
    */
-  CONSENSUS_ROUND_EXCHANGE,
+  int16_t repetition GNUNET_PACKED;
+
   /**
-   * Collect and distribute missing values.
+   * Leader in the gradecast phase.
+   *
+   * Can be different from both peer1 and peer2.
    */
-  CONSENSUS_ROUND_COMPLETION,
+  int16_t leader GNUNET_PACKED;
+};
+
+
+enum ReferendumVote
+{
+  VOTE_NONE = 0,
+  VOTE_ADD = 1,
+  VOTE_REMOVE = 2,
+  VOTE_CONTESTED = 3
+};
+
+
+struct SetKey
+{
+  int set_kind GNUNET_PACKED;
+  int k1 GNUNET_PACKED;
+  int k2 GNUNET_PACKED;
+};
+
+
+struct SetEntry
+{
+  struct SetKey key;
+  struct GNUNET_SET_Handle *h;
   /**
-   * Consensus concluded. After timeout and finished communication with client,
-   * consensus session will be destroyed.
+   * GNUNET_YES if the set resulted
+   * from applying a referendum with contested
+   * elements.
    */
-  CONSENSUS_ROUND_FINISH
+  int is_contested;
 };
 
 
-/**
- * Information about the current round.
- */
-struct RoundInfo
+struct DiffKey
 {
+  int diff_kind GNUNET_PACKED;
+  int k1 GNUNET_PACKED;
+  int k2 GNUNET_PACKED;
+};
+
+struct RfnKey
+{
+  int rfn_kind GNUNET_PACKED;
+  int k1 GNUNET_PACKED;
+  int k2 GNUNET_PACKED;
+};
+
+
+GNUNET_NETWORK_STRUCT_END
+
+enum PhaseKind
+{
+  PHASE_KIND_ALL_TO_ALL,
+  PHASE_KIND_GRADECAST_LEADER,
+  PHASE_KIND_GRADECAST_ECHO,
+  PHASE_KIND_GRADECAST_ECHO_GRADE,
+  PHASE_KIND_GRADECAST_CONFIRM,
+  PHASE_KIND_GRADECAST_CONFIRM_GRADE,
+  PHASE_KIND_GRADECAST_APPLY_RESULT,
+  PHASE_KIND_FINISH,
+};
+
+
+enum ActionType
+{
   /**
-   * The current main round.
+   * Do a set reconciliation with another peer (or via looback).
    */
-  enum ConsensusRound round;
+  ACTION_RECONCILE,
   /**
-   * The current exp round repetition, valid if
-   * the main round is an exp round.
+   * Apply a referendum with a threshold
+   * to a set and/or a diff.
    */
-  uint32_t exp_repetition;
+  ACTION_EVAL_RFN,
   /**
-   * The current exp subround, valid if
-   * the main round is an exp round.
+   * Apply a diff to a set.
    */
-  uint32_t exp_subround;
+  ACTION_APPLY_DIFF,
+  ACTION_FINISH,
 };
 
+enum SetKind
+{
+  SET_KIND_NONE = 0,
+  SET_KIND_CURRENT,
+  SET_KIND_LEADER,
+  SET_KIND_ECHO_RESULT,
+};
 
-/**
- * A consensus session consists of one local client and the remote authorities.
+enum DiffKind
+{
+  DIFF_KIND_NONE = 0,
+  DIFF_KIND_LEADER,
+  DIFF_KIND_GRADECAST_RESULT,
+};
+
+enum RfnKind
+{
+  RFN_KIND_NONE = 0,
+  RFN_KIND_ECHO,
+  RFN_KIND_CONFIRM,
+};
+
+
+/*
+ * Node in the consensus task graph.
  */
-struct ConsensusSession
+struct TaskEntry
 {
+  struct TaskKey key;
+
+  struct Step *step;
+
+  int is_running;
+
+  int is_finished;
+
+  enum ActionType action;
+
+  struct SetKey input_set;
+  struct DiffKey input_diff;
+  struct RfnKey input_rfn;
+  struct SetKey output_set;
+  struct DiffKey output_diff;
+  struct RfnKey output_rfn;
+
   /**
-   * Consensus sessions are kept in a DLL.
+   * Threshold when evaluating referendums.
    */
-  struct ConsensusSession *next;
+  uint16_t threshold;
 
   /**
-   * Consensus sessions are kept in a DLL.
+   * Operation that is running for this task.
    */
-  struct ConsensusSession *prev;
+  struct GNUNET_SET_OperationHandle *op;
 
-  /**
-  * Global consensus identification, computed
-  * from the session id and participating authorities.
-  */
-  struct GNUNET_HashCode global_id;
+  struct GNUNET_SET_Handle *commited_set;
+};
 
+
+struct Step
+{
   /**
-   * Client that inhabits the session
+   * All steps of one session are in a
+   * linked list for easier deallocation.
    */
-  struct GNUNET_SERVER_Client *client;
+  struct Step *prev;
 
   /**
-   * Queued messages to the client.
+   * All steps of one session are in a
+   * linked list for easier deallocation.
    */
-  struct GNUNET_MQ_Handle *client_mq;
+  struct Step *next;
 
-  /**
-   * Time when the conclusion of the consensus should begin.
+  struct ConsensusSession *session;
+
+  struct TaskEntry **tasks;
+  unsigned int tasks_len;
+  unsigned int tasks_cap;
+
+  unsigned int finished_tasks;
+
+  /*
+   * Tasks that have this task as dependency.
+   *
+   * We store pointers to subordinates rather
+   * than to prerequisites since it makes
+   * tracking the readiness of a task easier.
    */
-  struct GNUNET_TIME_Absolute conclude_start;
+  struct Step **subordinates;
+  unsigned int subordinates_len;
+  unsigned int subordinates_cap;
 
   /**
-   * Timeout for all rounds together, single rounds will schedule a timeout 
task
-   * with a fraction of the conclude timeout.
-   * Only valid once the current round is not CONSENSUS_ROUND_BEGIN.
+   * Counter for the prerequisites of
+   * this step.
    */
-  struct GNUNET_TIME_Absolute conclude_deadline;
+  size_t pending_prereq;
 
-  /**
-   * Timeout task identifier for the current round or subround.
+  /*
+   * Task that will run this step despite
+   * any pending prerequisites.
    */
-  struct GNUNET_SCHEDULER_Task * round_timeout_tid;
+  struct GNUNET_SCHEDULER_Task *timeout_task;
 
-  /**
-   * Number of other peers in the consensus.
+  unsigned int is_running;
+
+  unsigned int is_finished;
+
+  /*
+   * Round that this step should start.
+   * If not all prerequisites have run,
+   * the task will run anyway.
    */
-  unsigned int num_peers;
+  unsigned int start_round;
 
-  /**
-   * Information about the other peers,
-   * their state, etc.
+  /*
+   * Number of rounds this step occupies.
+   *
+   * Some steps are more expensive, and thus
+   * are allocated more rounds.
    */
-  struct ConsensusPeerInformation *info;
+  unsigned int num_rounds;
 
   /**
-   * Index of the local peer in the peers array
+   * Human-readable name for
+   * the task, used for debugging.
    */
-  unsigned int local_peer_idx;
+  char *debug_name;
+};
 
-  /**
-   * Current round
+struct RfnPeerInfo
+{
+  /* Peers can propose changes,
+   * but they are only accepted once
+   * the whole set operation is done. */
+  int is_commited;
+};
+
+struct RfnElementInfo
+{
+  struct GNUNET_SET_Element *element;
+
+  /*
+   * Vote (or VOTE_NONE) from every peer
+   * in the session about the element.
    */
-  enum ConsensusRound current_round;
+  int *votes;
+};
 
-  /**
-   * Permutation of peers for the current round,
+
+struct ReferendumEntry
+{
+  struct RfnKey key;
+
+  /*
+   * Elements where there is at least one proposed change.
+   *
+   * Maps the hash of the GNUNET_SET_Element
+   * to 'struct RfnElementInfo'.
    */
-  uint32_t *shuffle;
+  struct GNUNET_CONTAINER_MultiHashMap *rfn_elements;
 
   /**
-   * Inverse permutation of peers for the current round,
+   * Stores, for every peer in the session,
+   * whether the peer finished the whole referendum.
+   *
+   * Votes from peers are only counted if they're
+   * marked as commited (#GNUNET_YES) in the referendum.
+   *
+   * Otherwise (#GNUNET_NO), the requested changes are
+   * not counted for majority votes or thresholds.
    */
-  uint32_t *shuffle_inv;
+  int *peer_commited;
+};
 
+
+struct DiffElementInfo
+{
+  struct GNUNET_SET_Element *element;
+
   /**
-   * Current round of the exponential scheme.
+   * Positive weight for 'add', negative
+   * weights for 'remove'.
    */
-  uint32_t exp_repetition;
+  int weight;
+};
 
+
+/**
+ * Weighted diff.
+ */
+struct DiffEntry
+{
+  struct DiffKey key;
+  struct GNUNET_CONTAINER_MultiHashMap *changes;
+};
+
+
+
+/**
+ * A consensus session consists of one local client and the remote authorities.
+ */
+struct ConsensusSession
+{
   /**
-   * Current sub-round of the exponential scheme.
+   * Consensus sessions are kept in a DLL.
    */
-  uint32_t exp_subround;
+  struct ConsensusSession *next;
 
   /**
-   * The partner for the current exp-round.
-   * The local peer will initiate the set reconciliation with the
-   * outgoing peer.
+   * Consensus sessions are kept in a DLL.
    */
-  struct ConsensusPeerInformation *partner_outgoing;
+  struct ConsensusSession *prev;
 
+  unsigned int num_client_insert_pending;
+
+  struct GNUNET_CONTAINER_MultiHashMap *setmap;
+  struct GNUNET_CONTAINER_MultiHashMap *rfnmap;
+  struct GNUNET_CONTAINER_MultiHashMap *diffmap;
+
   /**
-   * The partner for the current exp-round
-   * The incoming peer will initiate the set reconciliation with
-   * the incoming peer.
+   * Array of peers with length 'num_peers'.
    */
-  struct ConsensusPeerInformation *partner_incoming;
+  int *peers_ignored;
 
-  /**
-   * The consensus set of this session.
+  /*
+   * Mapping from (hashed) TaskKey to TaskEntry.
+   *
+   * We map the application_id for a round to the task that should be
+   * executed, so we don't have to go through all task whenever we get
+   * an incoming set op request.
    */
-  struct GNUNET_SET_Handle *element_set;
+  struct GNUNET_CONTAINER_MultiHashMap *taskmap;
 
+  struct Step *steps_head;
+  struct Step *steps_tail;
+
+  int conclude_started;
+
+  int conclude_done;
+
   /**
-   * Listener for requests from other peers.
-   * Uses the session's global id as app id.
+  * Global consensus identification, computed
+  * from the session id and participating authorities.
+  */
+  struct GNUNET_HashCode global_id;
+
+  /**
+   * Client that inhabits the session
    */
-  struct GNUNET_SET_ListenHandle *set_listener;
-};
+  struct GNUNET_SERVER_Client *client;
 
-
-/**
- * Information about a peer that is in a consensus session.
- */
-struct ConsensusPeerInformation
-{
   /**
-   * Peer identitty of the peer in the consensus session
+   * Queued messages to the client.
    */
-  struct GNUNET_PeerIdentity peer_id;
+  struct GNUNET_MQ_Handle *client_mq;
 
   /**
-   * Back-reference to the consensus session,
-   * to that ConsensusPeerInformation can be used as a closure
+   * Time when the conclusion of the consensus should begin.
    */
-  struct ConsensusSession *session;
+  struct GNUNET_TIME_Absolute conclude_start;
 
   /**
-   * Have we finished the set operation for this (sub-)round?
+   * Timeout for all rounds together, single rounds will schedule a timeout 
task
+   * with a fraction of the conclude timeout.
+   * Only valid once the current round is not CONSENSUS_ROUND_BEGIN.
    */
-  int set_op_finished;
+  struct GNUNET_TIME_Absolute conclude_deadline;
 
+  struct GNUNET_PeerIdentity *peers;
+
   /**
-   * Set operation we are currently executing with this peer.
+   * Number of other peers in the consensus.
    */
-  struct GNUNET_SET_OperationHandle *set_op;
+  unsigned int num_peers;
 
   /**
-   * Set operation we are planning on executing with this peer.
+   * Index of the local peer in the peers array
    */
-  struct GNUNET_SET_OperationHandle *delayed_set_op;
+  unsigned int local_peer_idx;
 
   /**
-   * Info about the round of the delayed set operation.
+   * Listener for requests from other peers.
+   * Uses the session's global id as app id.
    */
-  struct RoundInfo delayed_round_info;
+  struct GNUNET_SET_ListenHandle *set_listener;
 };
 
-
 /**
  * Linked list of sessions this peer participates in.
  */
@@ -288,34 +464,126 @@
 static struct GNUNET_PeerIdentity my_peer;
 
 
-/**
- * Check if the current subround has finished.
- * Must only be called when an exp-round is the current round.
- *
- * @param session session to check for exp-round completion
- * @return GNUNET_YES if the subround has finished,
- *         GNUNET_NO if not
- */
-static int
-have_exp_subround_finished (const struct ConsensusSession *session)
+static void
+finish_task (struct TaskEntry *task);
+
+static void
+run_task_remote_union (struct ConsensusSession *session, struct TaskEntry 
*task);
+
+static void
+run_task_eval_rfn (struct ConsensusSession *session, struct TaskEntry *task);
+
+static void
+run_task_apply_diff (struct ConsensusSession *session, struct TaskEntry *task);
+
+static void
+run_ready_steps (struct ConsensusSession *session);
+
+static const char *
+phasename (uint16_t phase)
 {
-  int not_finished;
+  switch (phase)
+  {
+    case PHASE_KIND_ALL_TO_ALL: return "ALL_TO_ALL";
+    case PHASE_KIND_FINISH: return "FINISH";
+    case PHASE_KIND_GRADECAST_LEADER: return "GRADECAST_LEADER";
+    case PHASE_KIND_GRADECAST_ECHO: return "GRADECAST_ECHO";
+    case PHASE_KIND_GRADECAST_ECHO_GRADE: return "GRADECAST_ECHO_GRADE";
+    case PHASE_KIND_GRADECAST_CONFIRM: return "GRADECAST_CONFIRM";
+    case PHASE_KIND_GRADECAST_CONFIRM_GRADE: return "GRADECAST_CONFIRM_GRADE";
+    case PHASE_KIND_GRADECAST_APPLY_RESULT: return "GRADECAST_APPLY_RESULT";
+    default: return "(unknown)";
+  }
+}
 
-  GNUNET_assert (CONSENSUS_ROUND_EXCHANGE == session->current_round);
 
-  not_finished = 0;
-  if ( (NULL != session->partner_outgoing) &&
-       (GNUNET_NO == session->partner_outgoing->set_op_finished) )
-    not_finished++;
-  if ( (NULL != session->partner_incoming) &&
-       (GNUNET_NO == session->partner_incoming->set_op_finished) )
-    not_finished++;
-  if (0 == not_finished)
-    return GNUNET_YES;
-  return GNUNET_NO;
+static const char *
+setname (uint16_t kind)
+{
+  switch (kind)
+  {
+    case SET_KIND_CURRENT: return "CURRENT";
+    case SET_KIND_LEADER: return "LEADER";
+    case SET_KIND_NONE: return "NONE";
+    default: return "(unknown)";
+  }
 }
 
+static const char *
+rfnname (uint16_t kind)
+{
+  switch (kind)
+  {
+    case RFN_KIND_NONE: return "NONE";
+    case RFN_KIND_ECHO: return "ECHO";
+    case RFN_KIND_CONFIRM: return "CONFIRM";
+    default: return "(unknown)";
+  }
+}
 
+static const char *
+diffname (uint16_t kind)
+{
+  switch (kind)
+  {
+    case DIFF_KIND_NONE: return "NONE";
+    case DIFF_KIND_LEADER: return "LEADER";
+    case DIFF_KIND_GRADECAST_RESULT: return "GRADECAST_RESULT";
+    default: return "(unknown)";
+  }
+}
+
+static const char *
+debug_str_task_key (struct TaskKey *tk)
+{
+  static char buf[256];
+
+  snprintf (buf, sizeof (buf),
+            "TaskKey kind=%s, p1=%d, p2=%d, l=%d, rep=%d",
+            phasename (tk->kind), tk->peer1, tk->peer2,
+            tk->leader, tk->repetition);
+
+  return buf;
+}
+
+static const char *
+debug_str_diff_key (struct DiffKey *dk)
+{
+  static char buf[256];
+
+  snprintf (buf, sizeof (buf),
+            "DiffKey kind=%s, k1=%d, k2=%d",
+            diffname (dk->diff_kind), dk->k1, dk->k2);
+
+  return buf;
+}
+
+static const char *
+debug_str_set_key (struct SetKey *sk)
+{
+  static char buf[256];
+
+  snprintf (buf, sizeof (buf),
+            "SetKey kind=%s, k1=%d, k2=%d",
+            setname (sk->set_kind), sk->k1, sk->k2);
+
+  return buf;
+}
+
+
+static const char *
+debug_str_rfn_key (struct RfnKey *rk)
+{
+  static char buf[256];
+
+  snprintf (buf, sizeof (buf),
+            "RfnKey kind=%s, k1=%d, k2=%d",
+            rfnname (rk->rfn_kind), rk->k1, rk->k2);
+
+  return buf;
+}
+
+
 /**
  * Destroy a session, free all resources associated with it.
  *
@@ -325,11 +593,6 @@
 destroy_session (struct ConsensusSession *session)
 {
   GNUNET_CONTAINER_DLL_remove (sessions_head, sessions_tail, session);
-  if (NULL != session->element_set)
-  {
-    GNUNET_SET_destroy (session->element_set);
-    session->element_set = NULL;
-  }
   if (NULL != session->set_listener)
   {
     GNUNET_SET_listen_cancel (session->set_listener);
@@ -345,38 +608,13 @@
     GNUNET_SERVER_client_disconnect (session->client);
     session->client = NULL;
   }
-  if (NULL != session->shuffle)
-  {
-    GNUNET_free (session->shuffle);
-    session->shuffle = NULL;
-  }
-  if (NULL != session->shuffle_inv)
-  {
-    GNUNET_free (session->shuffle_inv);
-    session->shuffle_inv = NULL;
-  }
-  if (NULL != session->info)
-  {
-    int i;
-    for (i = 0; i < session->num_peers; i++)
-    {
-      struct ConsensusPeerInformation *cpi;
-      cpi = &session->info[i];
-      if (NULL != cpi->set_op)
-      {
-        GNUNET_SET_operation_cancel (cpi->set_op);
-        cpi->set_op = NULL;
-      }
-    }
-    GNUNET_free (session->info);
-    session->info = NULL;
-  }
   GNUNET_free (session);
 }
 
 
 /**
- * Iterator for set elements. [FIXME: bad comment]
+ * Send the final result set of the consensus to the client, element by
+ * element.
  *
  * @param cls closure
  * @param element the current element, NULL if all elements have been
@@ -387,7 +625,8 @@
 send_to_client_iter (void *cls,
                      const struct GNUNET_SET_Element *element)
 {
-  struct ConsensusSession *session = cls;
+  struct TaskEntry *task = (struct TaskEntry *) cls;
+  struct ConsensusSession *session = task->step->session;
   struct GNUNET_MQ_Envelope *ev;
 
   if (NULL != element)
@@ -417,186 +656,110 @@
 
 
 /**
- * Start the next round.
- * This function can be invoked as a timeout task, or called manually (tc will 
be NULL then).
+ * Callback for set operation results. Called for each element
+ * in the result set.
  *
- * @param cls the session
- * @param tc task context, for when this task is invoked by the scheduler,
- *           NULL if invoked for another reason
+ * @param cls closure
+ * @param element a result element, only valid if status is 
GNUNET_SET_STATUS_OK
+ * @param status see enum GNUNET_SET_Status
  */
 static void
-round_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+set_result_cb_loop (void *cls,
+               const struct GNUNET_SET_Element *element,
+               enum GNUNET_SET_Status status)
 {
-  struct ConsensusSession *session;
-  unsigned int i;
-  int res;
+  /* Nothing to do here.
+     This is the callback for looped local set operations, everything is
+     handled by the first callback */
 
-  /* don't kick off next round if we're shutting down */
-  if ((NULL != tc) && (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
+  struct TaskEntry *task = cls;
+  struct ConsensusSession *session = task->step->session;
+  
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "P%u: skipping looped set result for {%s}, status %u\n",
+              session->local_peer_idx,
+              debug_str_task_key (&task->key),
+              status);
+}
 
-  session = cls;
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%d: round over\n", 
session->local_peer_idx);
 
-  if (tc != NULL)
-    session->round_timeout_tid = NULL;
+static struct SetEntry *
+lookup_set (struct ConsensusSession *session, struct SetKey *key)
+{
+  struct GNUNET_HashCode hash;
 
-  if (session->round_timeout_tid != NULL)
-  {
-    GNUNET_SCHEDULER_cancel (session->round_timeout_tid);
-    session->round_timeout_tid = NULL;
-  }
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "P%u: looking up set {%s}\n",
+              session->local_peer_idx,
+              debug_str_set_key (key));
 
-  for (i = 0; i < session->num_peers; i++)
-  {
-    if (NULL != session->info[i].set_op)
-    {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%d: canceling stray op with 
P%d\n",
-                  session->local_peer_idx, i);
-      GNUNET_SET_operation_cancel (session->info[i].set_op);
-      session->info[i].set_op = NULL;
-    }
-    /* we're in the new round, nothing finished yet */
-    session->info[i].set_op_finished = GNUNET_NO;
-  }
-
-  switch (session->current_round)
-  {
-    case CONSENSUS_ROUND_BEGIN:
-      session->current_round = CONSENSUS_ROUND_EXCHANGE;
-      session->exp_repetition = 0;
-      subround_over (session, NULL);
-      break;
-    case CONSENSUS_ROUND_EXCHANGE:
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%d: finished, sending elements to 
client\n",
-                  session->local_peer_idx);
-      session->current_round = CONSENSUS_ROUND_FINISH;
-      res = GNUNET_SET_iterate (session->element_set, send_to_client_iter, 
session);
-      if (GNUNET_SYSERR == res)
-      {
-        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "can't iterate set: set 
invalid\n");
-      }
-      else if (GNUNET_NO == res)
-      {
-        GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "can't iterate set: iterator 
already active\n");
-      }
-      break;
-    default:
-      GNUNET_assert (0);
-  }
+  GNUNET_assert (SET_KIND_NONE != key->set_kind);
+  GNUNET_CRYPTO_hash (key, sizeof (struct SetKey), &hash);
+  return GNUNET_CONTAINER_multihashmap_get (session->setmap, &hash);
 }
 
 
-/**
- * Create a new permutation for the session's peers in session->shuffle.
- * Uses a Fisher-Yates shuffle with pseudo-randomness coming from
- * both the global session id and the current round index.
- *
- * @param session the session to create the new permutation for
- */
-static void
-shuffle (struct ConsensusSession *session)
+static struct DiffEntry *
+lookup_diff (struct ConsensusSession *session, struct DiffKey *key)
 {
-  uint32_t i;
-  uint32_t randomness[session->num_peers-1];
+  struct GNUNET_HashCode hash;
 
-  if (NULL == session->shuffle)
-    session->shuffle = GNUNET_malloc (session->num_peers * sizeof 
(*session->shuffle));
-  if (NULL == session->shuffle_inv)
-    session->shuffle_inv = GNUNET_malloc (session->num_peers * sizeof 
(*session->shuffle_inv));
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "P%u: looking up diff {%s}\n",
+              session->local_peer_idx,
+              debug_str_diff_key (key));
 
-  GNUNET_CRYPTO_kdf (randomness, sizeof (randomness),
-                    &session->exp_repetition, sizeof (uint32_t),
-                     &session->global_id, sizeof (struct GNUNET_HashCode),
-                    NULL);
+  GNUNET_assert (DIFF_KIND_NONE != key->diff_kind);
+  GNUNET_CRYPTO_hash (key, sizeof (struct DiffKey), &hash);
+  return GNUNET_CONTAINER_multihashmap_get (session->diffmap, &hash);
+}
 
-  for (i = 0; i < session->num_peers; i++)
-    session->shuffle[i] = i;
 
-  for (i = session->num_peers - 1; i > 0; i--)
-  {
-    uint32_t x;
-    uint32_t tmp;
-    x = randomness[i-1] % session->num_peers;
-    tmp = session->shuffle[x];
-    session->shuffle[x] = session->shuffle[i];
-    session->shuffle[i] = tmp;
-  }
+static struct ReferendumEntry *
+lookup_rfn (struct ConsensusSession *session, struct RfnKey *key)
+{
+  struct GNUNET_HashCode hash;
 
-  /* create the inverse */
-  for (i = 0; i < session->num_peers; i++)
-    session->shuffle_inv[session->shuffle[i]] = i;
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "P%u: looking up rfn {%s}\n",
+              session->local_peer_idx,
+              debug_str_rfn_key (key));
+
+  GNUNET_assert (RFN_KIND_NONE != key->rfn_kind);
+  GNUNET_CRYPTO_hash (key, sizeof (struct RfnKey), &hash);
+  return GNUNET_CONTAINER_multihashmap_get (session->rfnmap, &hash);
 }
 
 
-/**
- * Find and set the partner_incoming and partner_outgoing of our peer,
- * one of them may not exist (and thus set to NULL) if the number of peers
- * in the session is not a power of two.
- *
- * @param session the consensus session
- */
 static void
-find_partners (struct ConsensusSession *session)
+diff_insert (struct DiffEntry *diff,
+             int weight,
+             const struct GNUNET_SET_Element *element)
 {
-  unsigned int arc;
-  unsigned int num_ghosts;
-  unsigned int largest_arc;
-  int partner_idx;
+  GNUNET_assert (0);
+}
 
-  /* shuffled local index */
-  int my_idx = session->shuffle[session->local_peer_idx];
 
-  /* distance to neighboring peer in current subround */
-  arc = 1 << session->exp_subround;
-  largest_arc = 1;
-  while (largest_arc < session->num_peers)
-    largest_arc <<= 1;
-  num_ghosts = largest_arc - session->num_peers;
-  // GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "largest arc: %u\n", largest_arc);
-  // GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "arc: %u\n", arc);
-  // GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "num ghosts: %u\n", num_ghosts);
+static void
+rfn_vote (struct ReferendumEntry *rfn,
+          uint16_t voting_peer,
+          uint16_t num_peers,
+          int vote,
+          const struct GNUNET_SET_Element *element)
+{
+  GNUNET_assert (voting_peer < num_peers);
+  GNUNET_assert (0);
+}
 
-  if (0 == (my_idx & arc))
-  {
-    /* we are outgoing */
-    partner_idx = (my_idx + arc) % session->num_peers;
-    session->partner_outgoing = 
&session->info[session->shuffle_inv[partner_idx]];
-    GNUNET_assert (GNUNET_NO == session->partner_outgoing->set_op_finished);
-    /* are we a 'ghost' of a peer that would exist if
-     * the number of peers was a power of two, and thus have to partner
-     * with an additional peer?
-     */
-    if (my_idx < num_ghosts)
-    {
-      int ghost_partner_idx;
-      // GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "my index %d, arc %d, peers 
%u\n", my_idx, arc, session->num_peers);
-      ghost_partner_idx = (my_idx - (int) arc) % (int) session->num_peers;
-      /* platform dependent; modulo sometimes returns negative values */
-      if (ghost_partner_idx < 0)
-        ghost_partner_idx += session->num_peers;
-      /* we only need to have a ghost partner if the partner is outgoing */
-      if (0 == (ghost_partner_idx & arc))
-      {
-        // GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "ghost partner is %d\n", 
ghost_partner_idx);
-        session->partner_incoming = 
&session->info[session->shuffle_inv[ghost_partner_idx]];
-        GNUNET_assert (GNUNET_NO == 
session->partner_incoming->set_op_finished);
-        return;
-      }
-    }
-    session->partner_incoming = NULL;
-    return;
-  }
-  /* we only have an incoming connection */
-  partner_idx = (my_idx - (int) arc) % (int) session->num_peers;
-  if (partner_idx < 0)
-    partner_idx += session->num_peers;
-  session->partner_outgoing = NULL;
-  session->partner_incoming = 
&session->info[session->shuffle_inv[partner_idx]];
-  GNUNET_assert (GNUNET_NO == session->partner_incoming->set_op_finished);
+uint16_t
+task_other_peer (struct TaskEntry *task)
+{
+  uint16_t me = task->step->session->local_peer_idx;
+  if (task->key.peer1 == me)
+    return task->key.peer2;
+  return task->key.peer1;
 }
 
-
 /**
  * Callback for set operation results. Called for each element
  * in the result set.
@@ -610,270 +773,778 @@
                const struct GNUNET_SET_Element *element,
                enum GNUNET_SET_Status status)
 {
-  struct ConsensusPeerInformation *cpi = cls;
-  unsigned int remote_idx = cpi - cpi->session->info;
-  unsigned int local_idx = cpi->session->local_peer_idx;
+  struct TaskEntry *task = cls;
+  struct ConsensusSession *session = task->step->session;
+  struct SetEntry *output_set = NULL;
+  struct DiffEntry *output_diff = NULL;
+  struct ReferendumEntry *output_rfn = NULL;
+  unsigned int other_idx;
+  
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "P%u: got set result for {%s}, status %u\n",
+              session->local_peer_idx,
+              debug_str_task_key (&task->key),
+              status);
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: set result from P%u with status 
%u\n",
-              local_idx, remote_idx, (unsigned int) status);
+  if (GNUNET_NO == task->is_running)
+  {
+    GNUNET_break_op (0);
+    return;
+  }
 
-  GNUNET_assert ((cpi == cpi->session->partner_outgoing) ||
-                 (cpi == cpi->session->partner_incoming));
+  if (GNUNET_YES == task->is_finished)
+  {
+    GNUNET_break_op (0);
+    return;
+  }
 
+  if (task->key.peer1 == session->local_peer_idx)
+    other_idx = task->key.peer2;
+  else if (task->key.peer2 == session->local_peer_idx)
+    other_idx = task->key.peer1;
+  else
+  {
+    /* error in task graph construction */
+    GNUNET_assert (0);
+  }
+
+  if (SET_KIND_NONE != task->output_set.set_kind)
+    output_set = lookup_set (session, &task->output_set);
+
+  if (DIFF_KIND_NONE != task->output_diff.diff_kind)
+    output_diff = lookup_diff (session, &task->output_diff);
+
+  if (RFN_KIND_NONE != task->output_rfn.rfn_kind)
+    output_rfn = lookup_rfn (session, &task->output_rfn);
+
+  if (GNUNET_YES == session->peers_ignored[other_idx])
+  {
+    /* We should have never started or commited to an operation
+       with an ignored peer. */
+    GNUNET_break (0);
+    return;
+  }
+
   switch (status)
   {
+    // case GNUNET_SET_STATUS_MISSING_LOCAL:
     case GNUNET_SET_STATUS_OK:
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: set result from P%u: 
element\n",
-                  local_idx, remote_idx);
-      break;
-    case GNUNET_SET_STATUS_FAILURE:
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: set result from P%u: 
failure\n",
-                  local_idx, remote_idx);
-      cpi->set_op = NULL;
-      return;
-    case GNUNET_SET_STATUS_HALF_DONE:
-    case GNUNET_SET_STATUS_DONE:
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: set result from P%u: done\n",
-                  local_idx, remote_idx);
-      cpi->set_op_finished = GNUNET_YES;
-      cpi->set_op = NULL;
-      if (have_exp_subround_finished (cpi->session) == GNUNET_YES)
+      if (NULL != output_set)
       {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: all reconciliations of 
subround done\n",
-                    local_idx);
-        subround_over (cpi->session, NULL);
+        // FIXME: record pending adds, use callback
+        GNUNET_SET_add_element (output_set->h,
+                                element,
+                                NULL,
+                                NULL);
+
       }
-      else
+      if (NULL != output_diff)
       {
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: waiting for further set 
results\n",
-                    local_idx);
+        diff_insert (output_diff, 1, element);
       }
-      return;
-    default:
+      if (NULL != output_rfn)
+      {
+        rfn_vote (output_rfn, task_other_peer (task), session->num_peers, 
VOTE_ADD, element);
+      }
+      // XXX: add result to structures in task
+      break;
+    //case GNUNET_SET_STATUS_MISSING_REMOTE:
+    //  // XXX: add result to structures in task
+    //  break;
+    case GNUNET_SET_STATUS_DONE:
+      // XXX: check first if any changes to the underlying
+      // set are still pending
+      // XXX: commit other peer in referendum
+      finish_task (task);
+      break;
+    case GNUNET_SET_STATUS_FAILURE:
+      // XXX: cleanup
       GNUNET_break (0);
       return;
-  }
-
-  switch (cpi->session->current_round)
-  {
-    case CONSENSUS_ROUND_COMPLETION:
-    case CONSENSUS_ROUND_EXCHANGE:
-      GNUNET_SET_add_element (cpi->session->element_set, element, NULL, NULL);
-      break;
     default:
-      GNUNET_break (0);
-      return;
+      /* not reached */
+      GNUNET_assert (0);
   }
 }
 
 
+
 /**
- * Compare the round the session is in with the round of the given context 
message.
- *
- * @param session a consensus session
- * @param ri a round context message
- * @return 0 if it's the same round, -1 if the session is in an earlier round,
- *         1 if the session is in a later round
+ * Commit the appropriate set for a
+ * task.
  */
-static int
-rounds_compare (struct ConsensusSession *session,
-                struct RoundInfo* ri)
+static void
+commit_set (struct ConsensusSession *session,
+            struct TaskEntry *task)
 {
-  if (session->current_round < ri->round)
-    return -1;
-  if (session->current_round > ri->round)
-    return 1;
-  if (session->current_round == CONSENSUS_ROUND_EXCHANGE)
-  {
-    if (session->exp_repetition < ri->exp_repetition)
-      return -1;
-    if (session->exp_repetition > ri->exp_repetition)
-      return 1;
-    if (session->exp_subround < ri->exp_subround)
-      return -1;
-    if (session->exp_subround > ri->exp_subround)
-      return 1;
-    return 0;
-  }
-  /* other rounds have no subrounds / repetitions to compare */
-  return 0;
+  struct SetEntry *set;
+
+  GNUNET_assert (NULL != task->op);
+  set = lookup_set (session, &task->input_set);
+  GNUNET_assert (NULL != set);
+  GNUNET_SET_commit (task->op, set->h);
 }
 
 
-/**
- * Do the next subround in the exp-scheme.
- * This function can be invoked as a timeout task, or called manually (tc will 
be NULL then).
- *
- * @param cls the session
- * @param tc task context, for when this task is invoked by the scheduler,
- *           NULL if invoked for another reason
- */
 static void
-subround_over (void *cls, const struct GNUNET_SCHEDULER_TaskContext *tc)
+put_diff (struct ConsensusSession *session,
+         struct DiffEntry *diff)
 {
-  struct ConsensusSession *session;
-  struct GNUNET_TIME_Relative subround_timeout;
-  int i;
+  struct GNUNET_HashCode hash;
 
-  /* don't kick off next subround if we're shutting down */
-  if ((NULL != tc) && (tc->reason & GNUNET_SCHEDULER_REASON_SHUTDOWN))
-    return;
+  GNUNET_CRYPTO_hash (&diff->key, sizeof (struct DiffKey), &hash);
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_CONTAINER_multihashmap_put (session->diffmap, &hash, 
diff,
+                                                    
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+}
 
-  session = cls;
+static void
+put_set (struct ConsensusSession *session,
+         struct SetEntry *set)
+{
+  struct GNUNET_HashCode hash;
 
-  GNUNET_assert (CONSENSUS_ROUND_EXCHANGE == session->current_round);
+  GNUNET_assert (NULL != set->h);
 
-  if (tc != NULL)
+  GNUNET_CRYPTO_hash (&set->key, sizeof (struct SetKey), &hash);
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_CONTAINER_multihashmap_put (session->setmap, &hash, 
set,
+                                                    
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+}
+
+
+static void
+put_rfn (struct ConsensusSession *session,
+         struct ReferendumEntry *rfn)
+{
+  struct GNUNET_HashCode hash;
+
+  GNUNET_CRYPTO_hash (&rfn->key, sizeof (struct RfnKey), &hash);
+  GNUNET_assert (GNUNET_OK ==
+                 GNUNET_CONTAINER_multihashmap_put (session->rfnmap, &hash, 
rfn,
+                                                    
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+}
+
+
+
+static void
+output_cloned_cb (void *cls, struct GNUNET_SET_Handle *copy)
+{
+  struct TaskEntry *task = (struct TaskEntry *) cls;
+  struct ConsensusSession *session = task->step->session;
+  struct SetEntry *set = GNUNET_new (struct SetEntry);
+
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "P%u: Received lazy copy, storing output set %s\n",
+              session->local_peer_idx, debug_str_set_key (&task->output_set));
+
+  set->key = task->output_set;
+  set->h = copy;
+  put_set (task->step->session, set);
+  run_task_remote_union (task->step->session, task);
+}
+
+
+static void
+run_task_remote_union (struct ConsensusSession *session, struct TaskEntry 
*task)
+{
+  struct SetEntry *input;
+
+  input = lookup_set (session, &task->input_set);
+  GNUNET_assert (NULL != input);
+  GNUNET_assert (NULL != input->h);
+
+  /* We create the outputs for the operation here
+     (rather than in the set operation callback)
+     because we want something valid in there, even
+     if the other peer doesn't talk to us */
+
+  if (SET_KIND_NONE != task->output_set.set_kind)
   {
-    session->round_timeout_tid = NULL;
-    GNUNET_log (GNUNET_ERROR_TYPE_WARNING, "P%u: consensus subround timed 
out\n",
-                session->local_peer_idx);
+    /* If we don't have an existing output set,
+       we clone the input set. */
+    if (NULL == lookup_set (session, &task->output_set))
+    {
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "Output set missing, copying from input set\n");
+      /* Since the cloning is asynchronous,
+         we'll retry the current function once the copy
+         has been provided by the SET service. */
+      GNUNET_SET_copy_lazy (input->h, output_cloned_cb, task);
+      return;
+    }
   }
 
-  /* cancel timeout */
-  if (session->round_timeout_tid != NULL)
+  if (RFN_KIND_NONE != task->output_rfn.rfn_kind)
   {
-    GNUNET_SCHEDULER_cancel (session->round_timeout_tid);
-    session->round_timeout_tid = NULL;
+    if (NULL == lookup_rfn (session, &task->output_rfn))
+    {
+      struct ReferendumEntry *rfn;
+
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                  "P%u: output rfn <%s> missing, creating.\n",
+                  session->local_peer_idx,
+                  debug_str_rfn_key (&task->output_rfn));
+
+      rfn = GNUNET_new (struct ReferendumEntry);
+      rfn->key = task->output_rfn;
+      rfn->rfn_elements = GNUNET_CONTAINER_multihashmap_create (8, GNUNET_NO);
+      rfn->peer_commited = GNUNET_new_array (session->num_peers, int);
+      put_rfn (session, rfn);
+    }
   }
 
-  for (i = 0; i < session->num_peers; i++)
+  if (task->key.peer1 == session->local_peer_idx)
   {
-    if (NULL != session->info[i].set_op)
+    struct GNUNET_CONSENSUS_RoundContextMessage rcm = { 0 };
+
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "P%u: Looking up set {%s} to run remote union\n",
+                session->local_peer_idx,
+                debug_str_set_key (&task->input_set));
+
+    rcm.header.type = htons (GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ROUND_CONTEXT);
+    rcm.header.size = htons (sizeof (struct 
GNUNET_CONSENSUS_RoundContextMessage));
+
+    rcm.kind = htons (task->key.kind);
+    rcm.peer1 = htons (task->key.peer1);
+    rcm.peer2 = htons (task->key.peer2);
+    rcm.leader = htons (task->key.leader);
+    rcm.repetition = htons (task->key.repetition);
+
+    GNUNET_assert (NULL == task->op);
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: initiating set op with P%u, our 
set is %s\n",
+                session->local_peer_idx, task->key.peer2, debug_str_set_key 
(&task->input_set));
+
+    // XXX: maybe this should be done while
+    // setting up tasks alreays?
+    task->op = GNUNET_SET_prepare (&session->peers[task->key.peer2],
+                                   &session->global_id,
+                                   &rcm.header,
+                                   GNUNET_SET_RESULT_ADDED, /* XXX: will be 
obsolete soon */
+                                   set_result_cb,
+                                   task);
+
+    /* Referendums must be materialized as a set before */
+    GNUNET_assert (RFN_KIND_NONE == task->input_rfn.rfn_kind);
+
+    if (GNUNET_OK != GNUNET_SET_commit (task->op, input->h))
     {
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%d: canceling stray op with 
P%d\n",
-                  session->local_peer_idx, i);
-      GNUNET_SET_operation_cancel (session->info[i].set_op);
-      session->info[i].set_op = NULL;
+      GNUNET_break (0);
+      /* XXX: cleanup? */
+      return;
     }
-    /* we're in the new round, nothing finished yet */
-    session->info[i].set_op_finished = GNUNET_NO;
   }
+  else if (task->key.peer2 == session->local_peer_idx)
+  {
+    /* Wait for the other peer to contact us */
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: waiting set op with P%u\n",
+                session->local_peer_idx, task->key.peer1);
 
-  if (session->exp_repetition >= NUM_EXP_REPETITIONS)
+    if (NULL != task->op)
+    {
+      GNUNET_assert (NULL == task->commited_set);
+      commit_set (session, task);
+    }
+  }
+  else
   {
-    round_over (session, NULL);
-    return;
+    /* We made an error while constructing the task graph. */
+    GNUNET_assert (0);
   }
+}
 
-  if (session->exp_repetition == 0)
+
+static int
+rfn_majority (uint16_t num_peers,
+              struct ReferendumEntry *rfn,
+              struct RfnElementInfo *ri,
+              uint16_t threshold)
+{
+  unsigned int votes_add = 0;
+  unsigned int votes_remove = 0;
+  unsigned int num_commited = 0;
+  unsigned int maj_thresh;
+  unsigned int nv;
+  unsigned int tv;
+  unsigned int i;
+
+  for (i = 0; i < num_peers; i++)
   {
-    /* initialize everything for the log-rounds */
-    session->exp_repetition = 1;
-    session->exp_subround = 0;
-    if (NULL == session->shuffle)
-      session->shuffle = GNUNET_malloc ((sizeof (int)) * session->num_peers);
-    if (NULL == session->shuffle_inv)
-      session->shuffle_inv = GNUNET_malloc ((sizeof (int)) * 
session->num_peers);
-    for (i = 0; i < session->num_peers; i++)
-      session->shuffle[i] = session->shuffle_inv[i] = i;
+    if (GNUNET_NO == rfn->peer_commited[i])
+      continue;
+    num_commited++;
+    if (ri->votes[i] == VOTE_ADD)
+      votes_add++;
+    if (ri->votes[i] == VOTE_REMOVE)
+      votes_remove++;
   }
-  else if (session->exp_subround + 1 >= (int) ceil (log2 (session->num_peers)))
+
+  /* Threshold to reach a majority among
+     submitted votes, may not be enough for the
+     global threshold. */
+  maj_thresh = (num_commited + 1) / 2;
+  /* Vote are relative to our local set, so it can only be
+     either all add or all remove */
+  GNUNET_assert ( (0 == votes_add) || (0 == votes_remove) );
+
+  if (votes_add > 0)
   {
-    /* subrounds done, start new log-round */
-    session->exp_repetition++;
-    session->exp_subround = 0;
-    shuffle (session);
+    nv = votes_add;
+    tv = VOTE_ADD;
   }
+  else if (votes_remove > 0)
+  {
+    nv = votes_remove;
+    tv = VOTE_REMOVE;
+  }
   else
   {
-    session->exp_subround++;
+    nv = 0;
+    tv = VOTE_NONE;
   }
 
-  subround_timeout =
-      GNUNET_TIME_relative_divide (GNUNET_TIME_absolute_get_difference 
(session->conclude_start, session->conclude_deadline),
-                                   2 * NUM_EXP_REPETITIONS * ((int) ceil (log2 
(session->num_peers))));
+  if ( (nv >= maj_thresh) && (nv >= threshold) )
+    return tv;
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "subround timeout: %u ms\n", 
subround_timeout.rel_value_us / 1000);
+  if ( ((num_commited - nv) >= maj_thresh) && ((num_commited - nv) >= 
threshold) )
+    return VOTE_NONE;
 
-  session->round_timeout_tid = GNUNET_SCHEDULER_add_delayed (subround_timeout, 
subround_over, session);
+  return VOTE_CONTESTED;
+}
 
-  /* determine the incoming and outgoing partner */
-  find_partners (session);
 
-  GNUNET_assert (session->partner_outgoing != 
&session->info[session->local_peer_idx]);
-  GNUNET_assert (session->partner_incoming != 
&session->info[session->local_peer_idx]);
+struct SetChangeProgressCls
+{
+  int num_pending;
+  struct TaskEntry *task;
+};
 
-  /* initiate set operation with the outgoing partner */
-  if (NULL != session->partner_outgoing)
+
+static void
+eval_rfn_done (struct TaskEntry *task)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "P%u: EVAL_REFERENDUM done for task {%s}\n",
+              task->step->session->local_peer_idx, debug_str_task_key 
(&task->key));
+
+  finish_task (task);
+}
+
+
+static void
+eval_rfn_progress (void *cls)
+{
+  struct SetChangeProgressCls *erc = cls;
+
+  GNUNET_assert (erc->num_pending > 0);
+
+  erc->num_pending--;
+
+  if (0 == erc->num_pending)
   {
-    struct GNUNET_CONSENSUS_RoundContextMessage *msg;
-    msg = GNUNET_new (struct GNUNET_CONSENSUS_RoundContextMessage);
-    msg->header.type = htons (GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ROUND_CONTEXT);
-    msg->header.size = htons (sizeof *msg);
-    msg->round = htonl (session->current_round);
-    msg->exp_repetition = htonl (session->exp_repetition);
-    msg->exp_subround = htonl (session->exp_subround);
+    struct TaskEntry *task = erc->task;
+    GNUNET_free (erc);
+    eval_rfn_done (task);
+  }
+}
 
-    if (NULL != session->partner_outgoing->set_op)
+
+static void
+eval_rfn_copy_cb (void *cls, struct GNUNET_SET_Handle *copy)
+{
+  struct TaskEntry *task = (struct TaskEntry *) cls;
+  struct ConsensusSession *session = task->step->session;
+  struct SetEntry *set;
+
+  set = GNUNET_new (struct SetEntry);
+  set->h = copy;
+  set->key = task->output_set;
+
+  put_set (session, set);
+
+  run_task_eval_rfn (session, task);
+}
+
+
+/**
+ * Take an input set and an input referendum, 
+ * apply the referendum with a threshold to the input
+ * set and store the result in the output set and/or output diff.
+ */
+static void
+run_task_eval_rfn (struct ConsensusSession *session, struct TaskEntry *task)
+{
+  struct GNUNET_CONTAINER_MultiHashMapIterator *iter;
+  struct ReferendumEntry *input_rfn;
+  struct RfnElementInfo *ri;
+  struct SetEntry *output_set = NULL;
+  struct DiffEntry *output_diff = NULL;
+  struct SetChangeProgressCls *progress_cls;
+
+  /* Have at least one output */
+  GNUNET_assert ( (task->output_set.set_kind != SET_KIND_NONE) ||
+                  (task->output_diff.diff_kind != DIFF_KIND_NONE));
+
+  /* Not allowed as output */
+  GNUNET_assert ( (task->output_rfn.rfn_kind == RFN_KIND_NONE));
+
+  if (SET_KIND_NONE != task->output_set.set_kind)
+  {
+    /* We have a set output, thus the output set must
+       exist or copy it from the input set */
+    output_set = lookup_set (session, &task->output_set);
+    if (NULL == output_set)
     {
-      GNUNET_break (0);
-      GNUNET_SET_operation_cancel (session->partner_outgoing->set_op);
+      struct SetEntry *input_set;
+
+      input_set = lookup_set (session, &task->input_set);
+      GNUNET_assert (NULL != input_set);
+      GNUNET_SET_copy_lazy (input_set->h,
+                            eval_rfn_copy_cb,
+                            task);
+      /* We'll be called again, this time with the
+         set ready. */
+      return;
     }
-    session->partner_outgoing->set_op =
-        GNUNET_SET_prepare (&session->partner_outgoing->peer_id,
-                            &session->global_id,
-                            (struct GNUNET_MessageHeader *) msg,
-                            GNUNET_SET_RESULT_ADDED,
-                            set_result_cb, session->partner_outgoing);
-    GNUNET_free (msg);
-    if (GNUNET_OK != GNUNET_SET_commit (session->partner_outgoing->set_op, 
session->element_set))
+  }
+
+  if (DIFF_KIND_NONE != task->output_diff.diff_kind)
+  {
+    output_diff = lookup_diff (session, &task->output_diff);
+    if (NULL == output_diff)
     {
-      GNUNET_break (0);
-      session->partner_outgoing->set_op = NULL;
-      session->partner_outgoing->set_op_finished = GNUNET_YES;
+      output_diff = GNUNET_new (struct DiffEntry);
+      output_diff->key = task->output_diff;
+      output_diff->changes = GNUNET_CONTAINER_multihashmap_create (8, 
GNUNET_NO);
+      put_diff (session, output_diff);
     }
   }
 
-  /* commit to the delayed set operation */
-  if ((NULL != session->partner_incoming) && (NULL != 
session->partner_incoming->delayed_set_op))
+  progress_cls = GNUNET_new (struct SetChangeProgressCls);
+
+  input_rfn = lookup_rfn (session, &task->input_rfn);
+
+  GNUNET_assert (NULL != input_rfn);
+
+  iter = GNUNET_CONTAINER_multihashmap_iterator_create 
(input_rfn->rfn_elements);
+  GNUNET_assert (NULL != iter);
+
+  while (GNUNET_YES == GNUNET_CONTAINER_multihashmap_iterator_next (iter, 
NULL, (const void **) &ri))
   {
-    int cmp = rounds_compare (session, 
&session->partner_incoming->delayed_round_info);
-
-    if (NULL != session->partner_incoming->set_op)
+    int majority_vote = rfn_majority (session->num_peers, input_rfn, ri, 
task->threshold);
+    switch (majority_vote)
     {
-      GNUNET_break (0);
-      GNUNET_SET_operation_cancel (session->partner_incoming->set_op);
-      session->partner_incoming->set_op = NULL;
+      case VOTE_ADD:
+        if (NULL != output_set)
+        {
+          progress_cls->num_pending++;
+          GNUNET_assert (GNUNET_OK ==
+                         GNUNET_SET_add_element (output_set->h,
+                                     ri->element,
+                                     eval_rfn_progress,
+                                     progress_cls));
+        }
+        if (NULL != output_diff)
+        {
+          diff_insert (output_diff, 1, ri->element);
+        }
+        break;
+      case VOTE_CONTESTED:
+        if (NULL != output_set)
+          output_set->is_contested = GNUNET_YES;
+        /* fallthrough */
+      case VOTE_REMOVE:
+        if (NULL != output_set)
+        {
+          progress_cls->num_pending++;
+          GNUNET_assert (GNUNET_OK ==
+                         GNUNET_SET_remove_element (output_set->h,
+                                     ri->element,
+                                     eval_rfn_progress,
+                                     progress_cls));
+        }
+        if (NULL != output_diff)
+        {
+          diff_insert (output_diff, -1, ri->element);
+        }
+        break;
+      case VOTE_NONE:
+        /* Nothing to do. */
+        break;
+      default:
+        /* not reached */
+        GNUNET_assert (0);
     }
-    if (cmp == 0)
+  }
+  GNUNET_CONTAINER_multihashmap_iterator_destroy (iter);
+
+  if (progress_cls->num_pending == 0)
+  {
+    // call closure right now, no pending ops
+    GNUNET_free (progress_cls);
+    eval_rfn_done (task);
+  }
+}
+
+
+static void
+apply_diff_copy_cb (void *cls, struct GNUNET_SET_Handle *copy)
+{
+  struct TaskEntry *task = (struct TaskEntry *) cls;
+  struct ConsensusSession *session = task->step->session;
+  struct SetEntry *set;
+
+  set = GNUNET_new (struct SetEntry);
+  set->h = copy;
+  set->key = task->output_set;
+
+  put_set (session, set);
+
+  run_task_apply_diff (session, task);
+}
+
+
+static void
+apply_diff_done (struct TaskEntry *task)
+{
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "P%u: APPLY_DIFF done for task {%s}\n",
+              task->step->session->local_peer_idx, debug_str_task_key 
(&task->key));
+  finish_task (task);
+}
+
+
+static void
+apply_diff_progress (void *cls)
+{
+  struct SetChangeProgressCls *erc = cls;
+
+  GNUNET_assert (erc->num_pending > 0);
+
+  erc->num_pending--;
+
+  if (0 == erc->num_pending)
+  {
+    struct TaskEntry *task = erc->task;
+    GNUNET_free (erc);
+    apply_diff_done (task);
+  }
+}
+
+
+static void
+run_task_apply_diff (struct ConsensusSession *session, struct TaskEntry *task)
+{
+  struct SetEntry *output_set;
+  struct DiffEntry *input_diff;
+  struct GNUNET_CONTAINER_MultiHashMapIterator *iter;
+  struct DiffElementInfo *di;
+  struct SetChangeProgressCls *progress_cls;
+
+  GNUNET_assert (task->output_set.set_kind != SET_KIND_NONE);
+  GNUNET_assert (task->input_diff.diff_kind != DIFF_KIND_NONE);
+
+  input_diff = lookup_diff (session, &task->input_diff);
+
+  GNUNET_assert (NULL != input_diff);
+
+  output_set = lookup_set (session, &task->output_set);
+
+  if (NULL == output_set)
+  {
+      struct SetEntry *input_set;
+
+      input_set = lookup_set (session, &task->input_set);
+      GNUNET_assert (NULL != input_set);
+      GNUNET_SET_copy_lazy (input_set->h,
+                            apply_diff_copy_cb,
+                            task);
+      /* We'll be called again, this time with the
+         set ready. */
+      return;
+  }
+
+  progress_cls = GNUNET_new (struct SetChangeProgressCls);
+
+  iter = GNUNET_CONTAINER_multihashmap_iterator_create (input_diff->changes);
+
+  while (GNUNET_YES == GNUNET_CONTAINER_multihashmap_iterator_next (iter, 
NULL, (const void **) &di))
+  {
+    if (di->weight > 0)
     {
-      if (GNUNET_OK != GNUNET_SET_commit 
(session->partner_incoming->delayed_set_op, session->element_set))
-      {
-        GNUNET_break (0);
-      }
-      session->partner_incoming->set_op = 
session->partner_incoming->delayed_set_op;
-      session->partner_incoming->delayed_set_op = NULL;
-      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%d resumed delayed round with 
P%d\n",
-                  session->local_peer_idx, (int) (session->partner_incoming - 
session->info));
+      progress_cls->num_pending++;
+      GNUNET_assert (GNUNET_OK ==
+                     GNUNET_SET_remove_element (output_set->h,
+                                 di->element,
+                                 apply_diff_progress,
+                                 progress_cls));
     }
-    else
+    else if (di->weight < 0)
     {
-      /* this should not happen -- a round has been skipped! */
-      GNUNET_break_op (0);
+      progress_cls->num_pending++;
+      GNUNET_assert (GNUNET_OK ==
+                     GNUNET_SET_add_element (output_set->h,
+                                 di->element,
+                                 apply_diff_progress,
+                                 progress_cls));
     }
   }
 
+  GNUNET_CONTAINER_multihashmap_iterator_destroy (iter);
+
+  if (progress_cls->num_pending == 0)
+  {
+    // call closure right now, no pending ops
+    GNUNET_free (progress_cls);
+    apply_diff_done (task);
+  }
+}
+
+
+static void
+run_task_finish (struct ConsensusSession *session, struct TaskEntry *task)
+{
+  struct SetEntry *final_set;
+
+  final_set = lookup_set (session, &task->input_set);
+
+  GNUNET_assert (NULL != final_set);
+
+
+  GNUNET_SET_iterate (final_set->h,
+                      send_to_client_iter,
+                      task);
+}
+
+static void
+run_task (struct ConsensusSession *session, struct TaskEntry *task)
+{
+  GNUNET_assert (GNUNET_NO == task->is_running);
+  GNUNET_assert (GNUNET_NO == task->is_finished);
+
+  
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: running task {%s}\n", 
session->local_peer_idx, debug_str_task_key (&task->key));
+
+  switch (task->action)
+  {
+    case ACTION_RECONCILE:
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: running ACTION_RECONCILE 
task\n", session->local_peer_idx);
+      run_task_remote_union (session, task);
+      break;
+    case ACTION_EVAL_RFN:
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: running ACTION_EVAL_RFN 
task\n", session->local_peer_idx);
+      run_task_eval_rfn (session, task);
+      break;
+    case ACTION_APPLY_DIFF:
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: running ACTION_APPLY_DIFF 
task\n", session->local_peer_idx);
+      run_task_apply_diff (session, task);
+      break;
+    case ACTION_FINISH:
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: running ACTION_FINISH 
task\n", session->local_peer_idx);
+      run_task_finish (session, task);
+      break;
+    default:
+      /* not reached */
+      GNUNET_assert (0);
+  }
+  task->is_running = GNUNET_YES;
+}
+
+
+static void finish_step (struct Step *step)
+{
+  unsigned int i;
+
+  GNUNET_assert (step->finished_tasks == step->tasks_len);
+  GNUNET_assert (GNUNET_YES == step->is_running);
+  GNUNET_assert (GNUNET_NO == step->is_finished);
+
 #ifdef GNUNET_EXTRA_LOGGING
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "All tasks of step `%s' with %u subordinates finished.\n",
+              step->debug_name,
+              step->subordinates_len);
+#endif
+
+  for (i = 0; i < step->subordinates_len; i++)
   {
-    int in;
-    int out;
-    if (session->partner_outgoing == NULL)
-      out = -1;
-    else
-      out = (int) (session->partner_outgoing - session->info);
-    if (session->partner_incoming == NULL)
-      in = -1;
-    else
-      in = (int) (session->partner_incoming - session->info);
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: doing exp-round, r=%d, sub=%d, 
in: %d, out: %d\n", session->local_peer_idx,
-                session->exp_repetition, session->exp_subround, in, out);
+    GNUNET_assert (step->subordinates[i]->pending_prereq > 0);
+    step->subordinates[i]->pending_prereq--;
+#ifdef GNUNET_EXTRA_LOGGING
+    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+                "Decreased pending_prereq to %u for step `%s'.\n",
+                step->subordinates[i]->pending_prereq,
+                step->subordinates[i]->debug_name);
+
+#endif
   }
-#endif /* GNUNET_EXTRA_LOGGING */
 
+  step->is_finished = GNUNET_YES;
+
+  // XXX: maybe schedule as task to avoid recursion?
+  run_ready_steps (step->session);
 }
 
 
+/*
+ * Run all steps of the session that don't any
+ * more dependencies.
+ */
+static void
+run_ready_steps (struct ConsensusSession *session)
+{
+  struct Step *step;
+
+  step = session->steps_head;
+
+  while (NULL != step)
+  {
+    if ( (GNUNET_NO == step->is_running) && (0 == step->pending_prereq) )
+    {
+      size_t i;
+
+      GNUNET_assert (0 == step->finished_tasks);
+
+#ifdef GNUNET_EXTRA_LOGGING
+      GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: Running step `%s' of round 
%d:%d with %d tasks and %d subordinates\n",
+                  session->local_peer_idx,
+                  step->debug_name,
+                  step->start_round, step->num_rounds, step->tasks_len, 
step->subordinates_len);
+#endif
+
+      step->is_running = GNUNET_YES;
+      for (i = 0; i < step->tasks_len; i++)
+        run_task (session, step->tasks[i]);
+
+      /* Sometimes there is no task to trigger finishing the step, so we have 
to do it here. */
+      if ( (step->finished_tasks == step->tasks_len) && (GNUNET_NO == 
step->is_finished))
+        finish_step (step);
+
+      /* Running the next ready steps will be triggered by task completion */
+      return;
+    }
+    step = step->next;
+  }
+
+  return;
+}
+
+
+
+static void
+finish_task (struct TaskEntry *task)
+{
+  GNUNET_assert (GNUNET_NO == task->is_finished);
+  task->is_finished = GNUNET_YES;
+
+  task->step->finished_tasks++;
+
+  if (task->step->finished_tasks == task->step->tasks_len)
+    finish_step (task->step);
+}
+
+
 /**
  * Search peer in the list of peers in session.
  *
@@ -886,7 +1557,7 @@
 {
   int i;
   for (i = 0; i < session->num_peers; i++)
-    if (0 == memcmp (peer, &session->info[i].peer_id, sizeof *peer))
+    if (0 == memcmp (peer, &session->peers[i], sizeof (struct 
GNUNET_PeerIdentity)))
       return i;
   return -1;
 }
@@ -899,27 +1570,24 @@
  * exactly the same peers, the global id will be different.
  *
  * @param session session to generate the global id for
- * @param session_id local id of the consensus session
+ * @param local_session_id local id of the consensus session
  */
 static void
 compute_global_id (struct ConsensusSession *session,
-                  const struct GNUNET_HashCode *session_id)
+                  const struct GNUNET_HashCode *local_session_id)
 {
-  int i;
-  struct GNUNET_HashCode tmp;
-  struct GNUNET_HashCode phash;
+  const char *salt = "gnunet-service-consensus/session_id";
 
-  /* FIXME: use kdf? */
-
-  session->global_id = *session_id;
-  for (i = 0; i < session->num_peers; ++i)
-  {
-    GNUNET_CRYPTO_hash (&session->info[i].peer_id, sizeof (struct 
GNUNET_PeerIdentity), &phash);
-    GNUNET_CRYPTO_hash_xor (&session->global_id, &phash, &tmp);
-    session->global_id = tmp;
-    GNUNET_CRYPTO_hash (&session->global_id, sizeof (struct 
GNUNET_PeerIdentity), &tmp);
-    session->global_id = tmp;
-  }
+  GNUNET_assert (GNUNET_YES ==
+                 GNUNET_CRYPTO_kdf (&session->global_id,
+                                    sizeof (struct GNUNET_HashCode),
+                                    salt,
+                                    strlen (salt),
+                                    session->peers,
+                                    session->num_peers * sizeof (struct 
GNUNET_PeerIdentity),
+                                    local_session_id,
+                                    sizeof (struct GNUNET_HashCode),
+                                    NULL));
 }
 
 
@@ -948,7 +1616,6 @@
   unsigned int local_peer_in_list;
   uint32_t listed_peers;
   const struct GNUNET_PeerIdentity *msg_peers;
-  struct GNUNET_PeerIdentity *peers;
   unsigned int i;
 
   GNUNET_assert (NULL != join_msg);
@@ -973,25 +1640,27 @@
   if (GNUNET_NO == local_peer_in_list)
     session->num_peers++;
 
-  peers = GNUNET_malloc (session->num_peers * sizeof (struct 
GNUNET_PeerIdentity));
+  session->peers = GNUNET_malloc (session->num_peers * sizeof (struct 
GNUNET_PeerIdentity));
 
   if (GNUNET_NO == local_peer_in_list)
-    peers[session->num_peers - 1] = my_peer;
+    session->peers[session->num_peers - 1] = my_peer;
 
-  memcpy (peers, msg_peers, listed_peers * sizeof (struct 
GNUNET_PeerIdentity));
-  qsort (peers, session->num_peers, sizeof (struct GNUNET_PeerIdentity), 
&peer_id_cmp);
+  memcpy (session->peers, msg_peers, listed_peers * sizeof (struct 
GNUNET_PeerIdentity));
+  qsort (session->peers, session->num_peers, sizeof (struct 
GNUNET_PeerIdentity), &peer_id_cmp);
+}
 
-  session->info = GNUNET_malloc (session->num_peers * sizeof (struct 
ConsensusPeerInformation));
 
-  for (i = 0; i < session->num_peers; ++i)
-  {
-    /* initialize back-references, so consensus peer information can
-     * be used as closure */
-    session->info[i].session = session;
-    session->info[i].peer_id = peers[i];
-  }
+static struct TaskEntry *
+lookup_task (struct ConsensusSession *session,
+             struct TaskKey *key)
+{
+  struct GNUNET_HashCode hash;
 
-  GNUNET_free (peers);
+
+  GNUNET_CRYPTO_hash (key, sizeof (struct TaskKey), &hash);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Looking up task hash %s\n",
+              GNUNET_h2s (&hash));
+  return GNUNET_CONTAINER_multihashmap_get (session->taskmap, &hash);
 }
 
 
@@ -1017,12 +1686,10 @@
                struct GNUNET_SET_Request *request)
 {
   struct ConsensusSession *session = cls;
-  struct GNUNET_CONSENSUS_RoundContextMessage *msg = (struct 
GNUNET_CONSENSUS_RoundContextMessage *) context_msg;
-  struct ConsensusPeerInformation *cpi;
-  struct GNUNET_SET_OperationHandle *set_op;
-  struct RoundInfo round_info;
-  int index;
-  int cmp;
+  struct TaskKey tk;
+  struct TaskEntry *task;
+  struct GNUNET_CONSENSUS_RoundContextMessage *cm;
+  GNUNET_SET_ResultIterator my_result_cb;
 
   if (NULL == context_msg)
   {
@@ -1030,85 +1697,524 @@
     return;
   }
 
-  index = get_peer_idx (other_peer, session);
+  if (GNUNET_MESSAGE_TYPE_CONSENSUS_P2P_ROUND_CONTEXT != ntohs 
(context_msg->type))
+  {
+    GNUNET_break_op (0);
+    return;
+  }
 
-  if (index < 0)
+  if (sizeof (struct GNUNET_CONSENSUS_RoundContextMessage) != ntohs 
(context_msg->size))
   {
     GNUNET_break_op (0);
     return;
   }
 
-  round_info.round = ntohl (msg->round);
-  round_info.exp_repetition = ntohl (msg->exp_repetition);
-  round_info.exp_subround = ntohl (msg->exp_subround);
+  cm = (struct GNUNET_CONSENSUS_RoundContextMessage *) context_msg;
 
-  cpi = &session->info[index];
+  tk = ((struct TaskKey) {
+      .kind = ntohs (cm->kind),
+      .peer1 = ntohs (cm->peer1),
+      .peer2 = ntohs (cm->peer2),
+      .repetition = ntohs (cm->repetition),
+      .leader = ntohs (cm->leader),
+  });
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%d got set request from P%d\n", 
session->local_peer_idx, index);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: got req for task %s\n",
+              session->local_peer_idx, debug_str_task_key (&tk));
 
-  switch (session->current_round)
+  task = lookup_task (session, &tk);
+
+  if (NULL == task)
   {
-    case CONSENSUS_ROUND_BEGIN:
-      /* we're in the begin round, so requests for the exchange round may
-       * come in, they will be delayed for now! */
-    case CONSENSUS_ROUND_EXCHANGE:
-      cmp = rounds_compare (session, &round_info);
-      if (cmp > 0)
-      {
-        /* the other peer is too late */
-        LOG_PP (GNUNET_ERROR_TYPE_DEBUG, cpi, "too late for the current 
round\n");
-        return;
-      }
-      /* kill old request, if any. this is legal,
-       * as the other peer would not make a new request if it would want to
-       * complete the old one! */
-      if (NULL != cpi->set_op)
-      {
-        LOG_PP (GNUNET_ERROR_TYPE_INFO, cpi, "got new request from same peer, 
canceling old one\n");
-        GNUNET_SET_operation_cancel (cpi->set_op);
-        cpi->set_op = NULL;
-      }
-      set_op = GNUNET_SET_accept (request, GNUNET_SET_RESULT_ADDED,
-                                  set_result_cb, &session->info[index]);
-      if (cmp == 0)
-      {
-        /* we're in exactly the right round for the incoming request */
-        if (cpi != cpi->session->partner_incoming)
-        {
-          GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "P%u: got request from %u (with 
matching round), "
-                      "but incoming partner is %d\n", 
cpi->session->local_peer_idx, cpi - cpi->session->info,
-                      ((NULL == cpi->session->partner_incoming) ? -1 : 
(cpi->session->partner_incoming - cpi->session->info)));
-          GNUNET_SET_operation_cancel (set_op);
-          return;
-        }
-        cpi->set_op = set_op;
-        if (GNUNET_OK != GNUNET_SET_commit (set_op, session->element_set))
-        {
-          GNUNET_break (0);
-        }
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%d commited to set request from 
P%d\n", session->local_peer_idx, index);
-      }
-      else
-      {
-        /* we still have wait until we have finished the current round,
-         * as the other peer's round is larger */
-        cpi->delayed_set_op = set_op;
-        cpi->delayed_round_info = round_info;
-        /* The current setop is finished, as we canceled the current setop 
above. */
-        cpi->set_op_finished = GNUNET_YES;
-        GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%d delaying set request from 
P%d\n", session->local_peer_idx, index);
-      }
-      break;
-    default:
-      GNUNET_log (GNUNET_ERROR_TYPE_ERROR, "P%d got unexpected set request in 
round %d from P%d\n",
-                  session->local_peer_idx, session->current_round, index);
-      GNUNET_break_op (0);
-      return;
+    GNUNET_break_op (0);
+    return;
   }
+
+  if (ACTION_RECONCILE != task->action)
+  {
+    GNUNET_break_op (0);
+    return;
+  }
+
+  if (GNUNET_YES == task->is_finished)
+  {
+    GNUNET_break_op (0);
+    return;
+  }
+
+  if (task->key.peer2 != session->local_peer_idx)
+  {
+    /* We're being asked, so we must be thne 2nd peer. */
+    GNUNET_break_op (0);
+    return;
+  }
+
+  if (task->key.peer1 == task->key.peer2)
+    my_result_cb = set_result_cb_loop;
+  else
+    my_result_cb = set_result_cb;
+
+  task->op = GNUNET_SET_accept (request,
+                                GNUNET_SET_RESULT_ADDED, /* XXX: obsolete soon 
*/
+                                my_result_cb,
+                                task);
+  
+  /* If the task hasn't been started yet, 
+     we wait for that until we commit. */
+
+  if (GNUNET_YES == task->is_running)
+  {
+    commit_set (session, task);
+  }
 }
 
 
+
+static void
+put_task (struct GNUNET_CONTAINER_MultiHashMap *taskmap,
+          struct TaskEntry *t)
+{
+  struct GNUNET_HashCode round_hash;
+  struct Step *s;
+
+  GNUNET_assert (NULL != t->step);
+
+  t = GNUNET_memdup (t, sizeof (struct TaskEntry));
+
+  s = t->step;
+
+  if (s->tasks_len == s->tasks_cap)
+  {
+    unsigned int target_size = 3 * (s->tasks_cap + 1) / 2;
+    GNUNET_array_grow (s->tasks,
+                       s->tasks_cap,
+                       target_size);
+  }
+
+#ifdef GNUNET_EXTRA_LOGGING
+  GNUNET_assert (NULL != s->debug_name);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "Putting task <%s> into step `%s'\n",
+              debug_str_task_key (&t->key),
+              s->debug_name);
+#endif
+
+  s->tasks[s->tasks_len] = t;
+  s->tasks_len++;
+
+  GNUNET_CRYPTO_hash (&t->key, sizeof (struct TaskKey), &round_hash);
+  GNUNET_assert (GNUNET_OK ==
+      GNUNET_CONTAINER_multihashmap_put (taskmap, &round_hash, t,
+                                         
GNUNET_CONTAINER_MULTIHASHMAPOPTION_UNIQUE_ONLY));
+}
+
+
+static void
+install_step_timeouts (struct ConsensusSession *session)
+{
+  /* Given the fully constructed task graph
+     with rounds for tasks, we can give the tasks timeouts. */
+
+  /* XXX: implement! */
+}
+
+
+
+/*
+ * Arrange two peers in some canonical order.
+ */
+static void
+arrange_peers (uint16_t *p1, uint16_t *p2, uint16_t n)
+{
+  uint16_t a;
+  uint16_t b;
+
+  GNUNET_assert (*p1 < n);
+  GNUNET_assert (*p2 < n);
+
+  if (*p1 < *p2)
+  {
+    a = *p1;
+    b = *p2;
+  }
+  else
+  {
+    a = *p2;
+    b = *p1;
+  }
+
+  /* For uniformly random *p1, *p2,
+     this condition is true with 50% chance */
+  if (((b - a) + n) % n <= n / 2)
+  {
+    *p1 = a;
+    *p2 = b;
+  }
+  else
+  {
+    *p1 = b;
+    *p2 = a;
+  }
+}
+
+
 /**
+ * Record @a dep as a dependency of @step.
+ */
+static void
+step_depend_on (struct Step *step, struct Step *dep)
+{
+  /* We're not checking for cyclic dependencies,
+     but this is a cheap sanity check. */
+  GNUNET_assert (step != dep);
+  GNUNET_assert (NULL != step);
+  GNUNET_assert (NULL != dep);
+  // XXX: make rounds work
+  //GNUNET_assert (dep->start_round <= step->start_round);
+
+#ifdef GNUNET_EXTRA_LOGGING
+  /* Make sure we have complete debugging information.
+     Also checks that we don't screw up too badly
+     constructing the task graph. */
+  GNUNET_assert (NULL != step->debug_name);
+  GNUNET_assert (NULL != dep->debug_name);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG,
+              "Making step `%s' depend on `%s'\n",
+              step->debug_name,
+              dep->debug_name);
+#endif
+
+  if (dep->subordinates_cap == dep->subordinates_len)
+  {
+    unsigned int target_size = 3 * (dep->subordinates_cap + 1) / 2;
+    GNUNET_array_grow (dep->subordinates,
+                       dep->subordinates_cap,
+                       target_size);
+  }
+
+  GNUNET_assert (dep->subordinates_len <= dep->subordinates_cap);
+
+  dep->subordinates[dep->subordinates_len] = step;
+  dep->subordinates_len++;
+
+  step->pending_prereq++;
+}
+
+
+static struct Step *
+create_step (struct ConsensusSession *session, int start_round, int num_rounds)
+{
+  struct Step *step;
+  step = GNUNET_new (struct Step);
+  step->session = session;
+  step->start_round = start_round;
+  step->num_rounds = num_rounds;
+  GNUNET_CONTAINER_DLL_insert_tail (session->steps_head,
+                                    session->steps_tail,
+                                    step);
+  return step;
+}
+
+
+/**
+ * Construct the task graph for a single
+ * gradecast.
+ */
+static void
+construct_task_graph_gradecast (struct ConsensusSession *session,
+                                uint16_t rep,
+                                uint16_t lead,
+                                struct Step *step_before,
+                                struct Step *step_after)
+{
+  uint16_t n = session->num_peers;
+  uint16_t t = n / 3;
+
+  uint16_t me = session->local_peer_idx;
+
+  uint16_t p1;
+  uint16_t p2;
+
+  /* The task we're currently setting up. */
+  struct TaskEntry task;
+
+  struct Step *step;
+  struct Step *prev_step;
+
+  uint16_t round;
+
+  unsigned int k;
+
+  round = step_before->start_round + step_before->num_rounds;
+
+  /* gcast step 1: leader disseminates */
+
+  step = create_step (session, round, 1);
+
+#ifdef GNUNET_EXTRA_LOGGING
+  GNUNET_asprintf (&step->debug_name, "disseminate leader %u rep %u", lead, 
rep);
+#endif
+  step_depend_on (step, step_before);
+
+  GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: Considering leader %d\n", 
session->local_peer_idx, lead);
+
+  if (lead == me)
+  {
+    for (k = 0; k < n; k++)
+    {
+      if (k == me)
+        continue;
+      p1 = me;
+      p2 = k;
+      arrange_peers (&p1, &p2, n);
+      GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: GC LEADER(1): %d %d %d %d\n", 
session->local_peer_idx, p1, p2, rep, lead);
+      task = ((struct TaskEntry) {
+        .step = step,
+        .action = ACTION_RECONCILE,
+        .key = (struct TaskKey) { PHASE_KIND_GRADECAST_LEADER, p1, p2, rep, me 
},
+        .input_set = (struct SetKey) { SET_KIND_CURRENT, rep },
+        .output_set = (struct SetKey) { SET_KIND_NONE },
+      });
+      put_task (session->taskmap, &task);
+    }
+    /* We run this task to make sure that the leader
+       has the stored the SET_KIND_LEADER set of himself,
+       so he can participate in the rest of the gradecast
+       without the code having to handle any special cases. */
+    task = ((struct TaskEntry) {
+      .step = step,
+      .action = ACTION_RECONCILE,
+      .key = (struct TaskKey) { PHASE_KIND_GRADECAST_LEADER, me, me, rep, me },
+      .input_set = (struct SetKey) { SET_KIND_CURRENT, rep },
+      .output_set = (struct SetKey) { SET_KIND_LEADER, rep, me },
+      .output_diff = (struct DiffKey) { DIFF_KIND_LEADER, rep, me },
+    });
+    put_task (session->taskmap, &task);
+  }
+  else
+  {
+    p1 = me;
+    p2 = lead;
+    arrange_peers (&p1, &p2, n);
+    GNUNET_log (GNUNET_ERROR_TYPE_INFO, "P%d: GC LEADER(2): %d %d %d %d\n", 
session->local_peer_idx, p1, p2, rep, lead);
+    task = ((struct TaskEntry) {
+      .step = step,
+      .action = ACTION_RECONCILE,
+      .key = (struct TaskKey) { PHASE_KIND_GRADECAST_LEADER, p1, p2, rep, 
lead},
+      .input_set = (struct SetKey) { SET_KIND_CURRENT, rep },
+      .output_set = (struct SetKey) { SET_KIND_LEADER, rep, lead },
+      .output_diff = (struct DiffKey) { DIFF_KIND_LEADER, rep, lead },
+    });
+    put_task (session->taskmap, &task);
+  }
+
+  /* gcast phase 2: echo */
+  prev_step = step;
+  step = create_step (session, round, 1);
+#ifdef GNUNET_EXTRA_LOGGING
+  GNUNET_asprintf (&step->debug_name, "echo leader %u rep %u", lead, rep);
+#endif
+  step_depend_on (step, prev_step);
+
+  for (k = 0; k < n; k++)
+  {
+    p1 = k;
+    p2 = me;
+    arrange_peers (&p1, &p2, n);
+    task = ((struct TaskEntry) {
+      .step = step,
+      .action = ACTION_RECONCILE,
+      .key = (struct TaskKey) { PHASE_KIND_GRADECAST_ECHO, p1, p2, rep, lead },
+      .input_set = (struct SetKey) { SET_KIND_LEADER, rep, lead },
+      .output_rfn = (struct RfnKey) { RFN_KIND_ECHO, rep, lead },
+    });
+    put_task (session->taskmap, &task);
+  }
+
+  prev_step = step;
+  step = create_step (session, round, 1);
+#ifdef GNUNET_EXTRA_LOGGING
+  GNUNET_asprintf (&step->debug_name, "echo grade leader %u rep %u", lead, 
rep);
+#endif
+  step_depend_on (step, prev_step);
+
+  arrange_peers (&p1, &p2, n);
+  task = ((struct TaskEntry) {
+    .key = (struct TaskKey) { PHASE_KIND_GRADECAST_ECHO_GRADE, -1, -1, rep, 
lead },
+    .step = step,
+    .action = ACTION_EVAL_RFN,
+    .input_set = (struct SetKey) { SET_KIND_LEADER, rep, lead },
+    .input_rfn = (struct RfnKey) { RFN_KIND_ECHO, rep, lead },
+    .output_set = (struct SetKey) { SET_KIND_ECHO_RESULT, rep, lead },
+    .threshold = n - t,
+  });
+  put_task (session->taskmap, &task);
+
+  prev_step = step;
+  step = create_step (session, round, 1);
+#ifdef GNUNET_EXTRA_LOGGING
+  GNUNET_asprintf (&step->debug_name, "confirm leader %u rep %u", lead, rep);
+#endif
+  step_depend_on (step, prev_step);
+
+  /* gcast phase 3: confirmation and grading */
+  for (k = 0; k < n; k++)
+  {
+    p1 = k;
+    p2 = me;
+    arrange_peers (&p1, &p2, n);
+    task = ((struct TaskEntry) {
+      .step = step,
+      .action = ACTION_RECONCILE,
+      .key = (struct TaskKey) { PHASE_KIND_GRADECAST_CONFIRM, p1, p2, rep, 
lead},
+      .input_set = (struct SetKey) { SET_KIND_ECHO_RESULT, rep, lead },
+      .output_rfn = (struct RfnKey) { RFN_KIND_CONFIRM, rep, lead },
+    });
+    put_task (session->taskmap, &task);
+  }
+
+  prev_step = step;
+  step = create_step (session, round, 1);
+#ifdef GNUNET_EXTRA_LOGGING
+  GNUNET_asprintf (&step->debug_name, "confirm grade leader %u rep %u", lead, 
rep);
+#endif
+  step_depend_on (step, prev_step);
+
+  // evaluate ConfirmationReferendum and
+  // apply it to the LeaderReferendum
+  task = ((struct TaskEntry) {
+    .step = step,
+    .key = (struct TaskKey) { PHASE_KIND_GRADECAST_CONFIRM_GRADE, -1, -1, rep, 
lead },
+    .action = ACTION_EVAL_RFN,
+    .input_rfn = (struct RfnKey) { RFN_KIND_ECHO, rep, lead },
+    .output_diff = (struct DiffKey) { DIFF_KIND_GRADECAST_RESULT, rep },
+  });
+  put_task (session->taskmap, &task);
+
+  step_depend_on (step_after, step);
+}
+
+
+static void
+construct_task_graph (struct ConsensusSession *session)
+{
+  uint16_t n = session->num_peers;
+  uint16_t t = n / 3;
+
+  uint16_t me = session->local_peer_idx;
+
+  uint16_t p1;
+  uint16_t p2;
+
+  /* The task we're currently setting up. */
+  struct TaskEntry task;
+
+  /* Current leader */
+  unsigned int lead;
+
+  struct Step *step;
+  struct Step *prev_step;
+
+  unsigned int round = 0;
+
+  unsigned int i;
+
+  // XXX: introduce first step,
+  // where we wait for all insert acks
+  // from the set service
+  
+  /* faster but brittle all-to-all */
+
+  // XXX: Not implemented yet
+
+  /* all-to-all step */
+
+  step = create_step (session, round, 1);
+
+#ifdef GNUNET_EXTRA_LOGGING
+  step->debug_name = GNUNET_strdup ("all to all");
+#endif
+
+  for (i = 0; i < n; i++)
+  {
+    p1 = me;
+    p2 = i;
+    arrange_peers (&p1, &p2, n);
+    task = ((struct TaskEntry) {
+      .key = (struct TaskKey) { PHASE_KIND_ALL_TO_ALL, p1, p2, -1, -1 },
+      .step = step,
+      .action = ACTION_RECONCILE,
+      .input_set = (struct SetKey) { SET_KIND_CURRENT, 0 },
+      .output_set = (struct SetKey) { SET_KIND_CURRENT, 0 },
+    });
+    put_task (session->taskmap, &task);
+  }
+
+  round++;
+
+  prev_step = step;
+  step = NULL;
+
+  /* Byzantine union */
+
+  /* sequential repetitions of the gradecasts */
+  for (i = 0; i < t + 1; i++)
+  {
+    struct Step *step_rep_start;
+    struct Step *step_rep_end;
+
+    step_rep_start = create_step (session, round, 1);
+#ifdef GNUNET_EXTRA_LOGGING
+      GNUNET_asprintf (&step_rep_start->debug_name, "gradecast start rep %u", 
i);
+#endif
+
+    step_depend_on (step_rep_start, prev_step);
+
+    step_rep_end = create_step (session, round, 1);
+#ifdef GNUNET_EXTRA_LOGGING
+      GNUNET_asprintf (&step_rep_end->debug_name, "gradecast end rep %u", i);
+#endif
+
+    /* parallel gradecasts */
+    for (lead = 0; lead < n; lead++)
+      construct_task_graph_gradecast (session, i, lead, step_rep_start, 
step_rep_end);
+
+    // TODO: add peers to ignore list,
+    //
+    // evaluate ConfirmationReferendum and
+    // apply it to the LeaderReferendum
+    task = ((struct TaskEntry) {
+      .step = step_rep_end,
+      .key = (struct TaskKey) { PHASE_KIND_GRADECAST_APPLY_RESULT, -1, -1, i, 
-1},
+      .action = ACTION_APPLY_DIFF,
+      .input_set = (struct SetKey) { SET_KIND_CURRENT, i },
+      .input_diff = (struct DiffKey) { DIFF_KIND_GRADECAST_RESULT, i },
+      .output_set = (struct SetKey) { SET_KIND_CURRENT, i + 1 },
+    });
+    put_task (session->taskmap, &task);
+
+    prev_step = step_rep_end;
+  }
+
+ /* There is no next gradecast round, thus the final
+    start step is the overall end step of the gradecasts */
+  step = create_step (session, round, 1);
+#ifdef GNUNET_EXTRA_LOGGING
+  GNUNET_asprintf (&step->debug_name, "finish");
+#endif
+  step_depend_on (step, prev_step);
+
+  task = ((struct TaskEntry) {
+    .step = step,
+    .key = (struct TaskKey) { PHASE_KIND_FINISH, -1, -1, -1, -1 },
+    .input_set = (struct SetKey) { SET_KIND_CURRENT, t + 1 },
+    .action = ACTION_FINISH,
+  });
+
+  put_task (session->taskmap, &task);
+}
+
+
+/**
  * Initialize the session, continue receiving messages from the owning client
  *
  * @param session the session to initialize
@@ -1124,9 +2230,9 @@
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "session with %u peers\n", 
session->num_peers);
   compute_global_id (session, &join_msg->session_id);
 
-  /* check if some local client already owns the session.
-   * it is only legal to have a session with an existing global id
-   * if all other sessions with this global id are finished.*/
+  /* Check if some local client already owns the session.
+     It is only legal to have a session with an existing global id
+     if all other sessions with this global id are finished.*/
   other_session = sessions_head;
   while (NULL != other_session)
   {
@@ -1133,12 +2239,12 @@
     if ((other_session != session) &&
         (0 == GNUNET_CRYPTO_hash_cmp (&session->global_id, 
&other_session->global_id)))
     {
-      if (CONSENSUS_ROUND_FINISH != other_session->current_round)
-      {
-        GNUNET_break (0);
-        destroy_session (session);
-        return;
-      }
+      //if (CONSENSUS_ROUND_FINISH != other_session->current_round)
+      //{
+      //  GNUNET_break (0);
+      //  destroy_session (session);
+      //  return;
+      //}
       break;
     }
     other_session = other_session->next;
@@ -1152,12 +2258,30 @@
 
   session->local_peer_idx = get_peer_idx (&my_peer, session);
   GNUNET_assert (-1 != session->local_peer_idx);
-  session->element_set = GNUNET_SET_create (cfg, GNUNET_SET_OPERATION_UNION);
-  GNUNET_assert (NULL != session->element_set);
   session->set_listener = GNUNET_SET_listen (cfg, GNUNET_SET_OPERATION_UNION,
                                              &session->global_id,
                                              set_listen_cb, session);
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "%d is the local peer\n", 
session->local_peer_idx);
+
+  session->setmap = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
+  session->taskmap = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
+  session->diffmap = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
+  session->rfnmap = GNUNET_CONTAINER_multihashmap_create (1, GNUNET_NO);
+
+  {
+    struct SetEntry *client_set;
+    client_set = GNUNET_new (struct SetEntry);
+    client_set->h = GNUNET_SET_create (cfg, GNUNET_SET_OPERATION_UNION);
+    client_set->key = ((struct SetKey) { SET_KIND_CURRENT, 0, 0 });
+    put_set (session, client_set);
+  }
+
+  session->peers_ignored = GNUNET_new_array (session->num_peers, int);
+
+  /* Just construct the task graph,
+     but don't run anything until the client calls conclude. */
+  construct_task_graph (session);
+
   GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "session %s initialized\n", GNUNET_h2s 
(&session->global_id));
 }
 
@@ -1212,6 +2336,13 @@
 }
 
 
+static void
+client_insert_done (void *cls)
+{
+  // FIXME: implement
+}
+
+
 /**
  * Called when a client performs an insert operation.
  *
@@ -1228,6 +2359,7 @@
   struct GNUNET_CONSENSUS_ElementMessage *msg;
   struct GNUNET_SET_Element *element;
   ssize_t element_size;
+  struct GNUNET_SET_Handle *initial_set;
 
   session = get_session_by_client (client);
 
@@ -1238,7 +2370,7 @@
     return;
   }
 
-  if (CONSENSUS_ROUND_BEGIN != session->current_round)
+  if (GNUNET_YES == session->conclude_started)
   {
     GNUNET_break (0);
     GNUNET_SERVER_client_disconnect (client);
@@ -1258,11 +2390,19 @@
   element->size = element_size;
   memcpy (&element[1], &msg[1], element_size);
   element->data = &element[1];
-  GNUNET_SET_add_element (session->element_set, element, NULL, NULL);
+  {
+    struct SetKey key = { SET_KIND_CURRENT, 0, 0 };
+    struct SetEntry *entry;
+    entry = lookup_set (session, &key);
+    GNUNET_assert (NULL != entry);
+    initial_set = entry->h;
+  }
+  session->num_client_insert_pending++;
+  GNUNET_SET_add_element (initial_set, element, client_insert_done, session);
   GNUNET_free (element);
   GNUNET_SERVER_receive_done (client, GNUNET_OK);
 
-  // GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: element added\n", 
session->local_peer_idx);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "P%u: element added\n", 
session->local_peer_idx);
 }
 
 
@@ -1280,7 +2420,6 @@
 {
   struct ConsensusSession *session;
 
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "conclude requested\n");
   session = get_session_by_client (client);
   if (NULL == session)
   {
@@ -1289,24 +2428,24 @@
     GNUNET_SERVER_client_disconnect (client);
     return;
   }
-  if (CONSENSUS_ROUND_BEGIN != session->current_round)
+
+  if (GNUNET_YES == session->conclude_started)
   {
-    /* client requested conclude twice */
+    /* conclude started twice */
     GNUNET_break (0);
+    GNUNET_SERVER_client_disconnect (client);
+    destroy_session (session);
     return;
   }
-  if (session->num_peers <= 1)
-  {
-    session->current_round = CONSENSUS_ROUND_FINISH;
-    GNUNET_SET_iterate (session->element_set, send_to_client_iter, session);
-  }
-  else
-  {
-    /* the 'begin' round is over, start with the next, actual round */
-    round_over (session, NULL);
-  }
 
-  GNUNET_assert (CONSENSUS_ROUND_BEGIN != session->current_round);
+  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "conclude requested\n");
+
+  session->conclude_started = GNUNET_YES;
+
+  install_step_timeouts (session);
+  run_ready_steps (session);
+
+
   GNUNET_SERVER_receive_done (client, GNUNET_OK);
 }
 
@@ -1343,17 +2482,11 @@
   session = get_session_by_client (client);
   if (NULL == session)
     return;
-  if ((CONSENSUS_ROUND_BEGIN == session->current_round) ||
-      (CONSENSUS_ROUND_FINISH == session->current_round))
-  {
-    GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "client disconnected, destroying 
session\n");
-    destroy_session (session);
-    return;
-  }
-  GNUNET_log (GNUNET_ERROR_TYPE_DEBUG, "client disconnected, but waiting for 
consensus to finish\n");
+  // FIXME: destroy if we can
 }
 
 
+
 /**
  * Start processing consensus requests.
  *

Modified: gnunet/src/consensus/test_consensus.conf
===================================================================
--- gnunet/src/consensus/test_consensus.conf    2015-09-16 13:18:29 UTC (rev 
36366)
+++ gnunet/src/consensus/test_consensus.conf    2015-09-22 01:20:28 UTC (rev 
36367)
@@ -1,6 +1,8 @@
address@hidden@ ../../contrib/no_forcestart.conf
+
 [consensus]
 #PREFIX = gdbserver :12345
-#PREFIX = valgrind
+PREFIX = valgrind
 OPTIONS = -L INFO
 
 [transport]
@@ -9,14 +11,17 @@
 [set]
 OPTIONS = -L INFO
 #PREFIX = valgrind --leak-check=full
-#PREFIX = valgrind
+PREFIX = valgrind
 
 [testbed]
 OVERLAY_TOPOLOGY = CLIQUE
 
 [hostlist]
-SERVERS =
+AUTOSTART = NO
 
+[revocation]
+AUTOSTART = NO
+
 [nat]
 # Use addresses from the local network interfaces (inluding loopback, but also 
others)
 USE_LOCALADDR = YES

Modified: gnunet/src/set/gnunet-service-set.c
===================================================================
--- gnunet/src/set/gnunet-service-set.c 2015-09-16 13:18:29 UTC (rev 36366)
+++ gnunet/src/set/gnunet-service-set.c 2015-09-22 01:20:28 UTC (rev 36367)
@@ -339,7 +339,12 @@
 {
   struct MutationEvent *mut;
   int is_present;
+  unsigned int i;
 
+  /* If ee->mutations is NULL,
+     the element was added in generation 0,
+     and there are no removes, thus the element
+     is part of any generation we query. */
   if (NULL == ee->mutations)
     return GNUNET_YES;
 
@@ -349,22 +354,38 @@
     return GNUNET_NO;
   }
 
-  is_present = GNUNET_YES;
+  is_present = GNUNET_NO;
 
-  // Could be made faster with binary search, but lists
-  // are small, so why bother.
-  for (mut = ee->mutations; 0 != mut->generation; mut++)
+  /* Could be made faster with binary search, but lists
+     are small, so why bother. */
+  for (i = 0; i < ee->mutations_size; i++)
   {
-    if ( (mut->generation > query_generation) ||
-         (GNUNET_YES == is_excluded_generation (mut->generation, excluded, 
excluded_size)) )
+    mut = &ee->mutations[i];
+
+    if (mut->generation > query_generation)
     {
+      /* The mutation doesn't apply to our generation
+         anymore.  We can'b break here, since mutations aren't
+         sorted by generation. */
       continue;
     }
 
-    // This would be an inconsistency in how we manage mutations.
+    if (GNUNET_YES == is_excluded_generation (mut->generation, excluded, 
excluded_size))
+    {
+      /* The generation is excluded (because it belongs to another
+         fork via a lazy copy) and thus mutations aren't considered
+         for membership testing. */
+      continue;
+    }
+
+    /* This would be an inconsistency in how we manage mutations. */
     if ( (GNUNET_YES == is_present) && (GNUNET_YES == mut->added) )
       GNUNET_assert (0);
 
+    /* Likewise. */
+    if ( (GNUNET_NO == is_present) && (GNUNET_NO == mut->added) )
+      GNUNET_assert (0);
+
     is_present = mut->added;
   }
 
@@ -816,7 +837,9 @@
     ee->mutations = NULL;
     ee->mutations_size = 0;
     ee->element_hash = hash;
-  } else if (GNUNET_YES == _GSS_is_element_of_set (ee, set)) {
+  }
+  else if (GNUNET_YES == _GSS_is_element_of_set (ee, set))
+  {
     /* same element inserted twice */
     GNUNET_break (0);
     return;
@@ -829,7 +852,6 @@
       .added = GNUNET_YES
     };
     GNUNET_array_append (ee->mutations, ee->mutations_size, mut);
-    ee->mutations_size += 1;
   }
 
   GNUNET_break (GNUNET_YES ==
@@ -888,7 +910,6 @@
       .added = GNUNET_NO
     };
     GNUNET_array_append (ee->mutations, ee->mutations_size, mut);
-    ee->mutations_size += 1;
   }
   set->vt->remove (set->state, ee);
 }
@@ -1263,8 +1284,6 @@
   GNUNET_array_append (set->excluded_generations,
                        set->excluded_generations_size,
                        r);
-
-  set->excluded_generations_size += 1;
 }
 
 /**

Modified: gnunet/src/set/gnunet-service-set.h
===================================================================
--- gnunet/src/set/gnunet-service-set.h 2015-09-16 13:18:29 UTC (rev 36366)
+++ gnunet/src/set/gnunet-service-set.h 2015-09-22 01:20:28 UTC (rev 36367)
@@ -323,6 +323,9 @@
    */
   struct MutationEvent *mutations;
 
+  /**
+   * Number of elements in the array @a mutations.
+   */
   unsigned int mutations_size;
 
   /**




reply via email to

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